* Re: [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs
2021-04-15 17:59 0% ` Ajit Khaparde
2021-04-16 6:58 0% ` Bing Zhao
@ 2021-04-16 7:03 0% ` Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-16 7:03 UTC (permalink / raw)
To: Ajit Khaparde
Cc: Bing Zhao, dev, Ori Kam, Ferruh Yigit, Andrew Rybchenko,
Matan Azrad, Slava Ovsiienko, dpdk-dev, Gregory Etelson,
Andrey Vesnovaty
15/04/2021 19:59, Ajit Khaparde:
> On Thu, Apr 15, 2021 at 8:52 AM Bing Zhao <bingz@nvidia.com> wrote:
> > There are two types of flow actions:
> > 1. the direct (normal) actions that could be created and stored
> > within a flow rule. Such action is tied to its flow rule and
> > cannot be reused.
> > 2. the indirect action, in the past, named shared_action. It is
> > created from a direct actioni, like count or rss, and then used
> > in the flow rules with an object handle. The PMD will take care
> > of the retrieve from indirect action to the direct action
> > when it is referenced.
[...]
> > The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> > break the ABI. All the implementations are changed by using
> > RTE_FLOW_ACTION_TYPE_INDIRECT.
>
> When I read this somehow indirect did not feel right.
> But I don't have a strong suggestion either.
> Since it is a context of action or actions maybe we use action_context?
This is an action which is not directly described in the flow rule,
but in another object referenced by its handle.
It creates a level of indirection in the rule description.
I think the word "indirect" is accurate.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v5 1/5] devargs: unify scratch buffer storage
@ 2021-04-16 7:00 3% ` David Marchand
0 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-16 7:00 UTC (permalink / raw)
To: Aaron Conole, dpdklab
Cc: Thomas Monjalon, Gaetan Rivet, dev, Xueming(Steven) Li,
Asaf Penso, Wenzhuo Lu, Beilei Xing, Bernard Iremonger,
Gaetan Rivet, Anatoly Burakov, Ray Kinsella, Neil Horman,
Ferruh Yigit, Andrew Rybchenko, Dodji Seketeli, ci
On Tue, Apr 13, 2021 at 5:15 AM Xueming Li <xuemingl@nvidia.com> wrote:
> diff --git a/lib/librte_eal/include/rte_devargs.h b/lib/librte_eal/include/rte_devargs.h
> index 296f19324f..134b44a887 100644
> --- a/lib/librte_eal/include/rte_devargs.h
> +++ b/lib/librte_eal/include/rte_devargs.h
> @@ -60,16 +60,16 @@ struct rte_devargs {
> /** Name of the device. */
> char name[RTE_DEV_NAME_MAX_LEN];
> RTE_STD_C11
> - union {
> - /** Arguments string as given by user or "" for no argument. */
> - char *args;
> + union { /**< driver-related part of device string. */
> + const char *args; /**< legacy name. */
> const char *drv_str;
> };
> struct rte_bus *bus; /**< bus handle. */
> struct rte_class *cls; /**< class handle. */
> const char *bus_str; /**< bus-related part of device string. */
> const char *cls_str; /**< class-related part of device string. */
> - const char *data; /**< Device string storage. */
> + char *data;
> + /**< Raw string including bus, class and driver arguments. */
> };
>
> /**
- Flagging this patch for info and its impact on UNH jobs.
This change is fine, but older libabigail versions could not deal with
such changes (anonymous union, changes of const fields).
This results in an ABI check failure in the UNH x86 job on Ubuntu
18.04 (and for some people not using recent libabigail).
I can see the ARM job passes fine, so I suppose it is using a more
recent libabigail (running Ubuntu 20.04 maybe?).
We either need to disable this x86 job or update its libabigail
package (maybe aligning with what we have for public CI which is
libabigail 1.8 manually compiled).
- For the longer term, what do you think of using/extending the .ci/
scripts for use by UNH jobs?
--
David Marchand
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs
2021-04-15 17:59 0% ` Ajit Khaparde
@ 2021-04-16 6:58 0% ` Bing Zhao
2021-04-16 7:03 0% ` Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Bing Zhao @ 2021-04-16 6:58 UTC (permalink / raw)
To: Ajit Khaparde
Cc: Ori Kam, NBU-Contact-Thomas Monjalon, Ferruh Yigit,
Andrew Rybchenko, Matan Azrad, Slava Ovsiienko, dpdk-dev,
Gregory Etelson, Andrey Vesnovaty
Hi Ajit,
> -----Original Message-----
> From: Ajit Khaparde <ajit.khaparde@broadcom.com>
> Sent: Friday, April 16, 2021 2:00 AM
> To: Bing Zhao <bingz@nvidia.com>
> Cc: Ori Kam <orika@nvidia.com>; NBU-Contact-Thomas Monjalon
> <thomas@monjalon.net>; Ferruh Yigit <ferruh.yigit@intel.com>; Andrew
> Rybchenko <andrew.rybchenko@oktetlabs.ru>; Matan Azrad
> <matan@nvidia.com>; Slava Ovsiienko <viacheslavo@nvidia.com>; dpdk-
> dev <dev@dpdk.org>; Gregory Etelson <getelson@nvidia.com>; Andrey
> Vesnovaty <andreyv@nvidia.com>
> Subject: Re: [PATCH v3 1/1] ethdev: introduce indirect action APIs
>
> On Thu, Apr 15, 2021 at 8:52 AM Bing Zhao <bingz@nvidia.com> wrote:
> >
> > Right now, rte_flow_shared_action_* APIs are used for some shared
> > actions, like RSS, count. The shared action should be created
> before
> > using it inside a flow. These shared actions sometimes are not
> > really shared but just some indirect actions decoupled from a flow.
> >
> > The new functions rte_flow_action_handle_* are added to replace
> > the current shared functions rte_flow_shared_action_*.
> >
> > There are two types of flow actions:
> > 1. the direct (normal) actions that could be created and stored
> > within a flow rule. Such action is tied to its flow rule and
> > cannot be reused.
> > 2. the indirect action, in the past, named shared_action. It is
> > created from a direct actioni, like count or rss, and then used
> > in the flow rules with an object handle. The PMD will take care
> > of the retrieve from indirect action to the direct action
> > when it is referenced.
> >
> > The indirect action is accessed (update / query) w/o any flow rule,
> > just via the action object handle. For example, when querying or
> > resetting a counter, it could be done out of any flow using this
> > counter, but only the handle of the counter action object is
> > required.
> > The indirect action object could be shared by different flows or
> > used by a single flow, depending on the direct action type and
> > the real-life requirements.
> > The handle of an indirect action object is opaque and defined in
> > each driver and possibly different per direct action type.
> >
> > The old name "shared" is improper in a sense and should be
> replaced.
> >
> > Since the APIs are changed from "rte_flow_shared_action*" to the
> new
> > "rte_flow_action_handle*", the testpmd application code and
> command
> > line interfaces also need to be updated to do the adaption.
> > The testpmd application user guide is also updated. All the
> "shared
> > action" related parts are replaced with "indirect action" to have
> a
> > correct explanation.
> >
> > The parameter of "update" interface is also changed. A general
> > pointer will replace the rte_flow_action struct pointer due to the
> > facts:
> > 1. Some action may not support fields updating. In the example of
> a
> > counter, the only "update" supported should be the reset. So
> > passing a rte_flow_action struct pointer is meaningless and
> > there is even no such corresponding action struct. What's more,
> > if more than one operations should be supported, for some other
> > action, such pointer parameter may not meet the need.
> > 2. Some action may need conditional or partial update, the current
> > parameter will not provide the ability to indicate which part(s)
> > to update.
> > For different types of indirect action objects, the pointer
> could
> > either be the same of rte_flow_action* struct - in order not to
> > break the current driver implementation, or some wrapper
> > structures with bits as masks to indicate which part to be
> > updated, depending on real needs of the corresponding direct
> > action. For different direct actions, the structures of
> indirect
> > action objects updating will be different.
> >
> > All the underlayer PMD callbacks will be moved to these new APIs.
> >
> > The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> > break the ABI. All the implementations are changed by using
> > RTE_FLOW_ACTION_TYPE_INDIRECT.
> When I read this somehow indirect did not feel right.
> But I don't have a strong suggestion either.
> Since it is a context of action or actions maybe we use
> action_context?
>
The original RFC use the naming proposal "action_context", then there were some comments that it was not as good as "shared action".
The "indirect action" may describe the behavior of the action better than "shared" to my understanding.
In the email from Thomas, the comments may explain it better than mine:
" The difference is that indirect action is not only for sharing.
It allows manipulating an action as an object.
Action object is inserted in flow rules through the indirect action.
Does it make it clearer?"
What do you think?
> >
> > Since the APIs are changed from "rte_flow_shared_action*" to the
> new
> > "rte_flow_action_handle*" and the "update" interface's 3rd input
> > parameter is changed to generic pointer, the mlx5 PMD that uses
> these
> > APIs needs to do the adaption to the new APIs as well.
> >
> > Signed-off-by: Bing Zhao <bingz@nvidia.com>
> > Acked-by: Andrey Vesnovaty <andreyv@nvidia.com>
BR. Bing
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation
2021-04-15 19:43 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
2021-04-15 19:43 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
@ 2021-04-16 6:39 4% ` Juraj Linkeš
1 sibling, 0 replies; 200+ results
From: Juraj Linkeš @ 2021-04-16 6:39 UTC (permalink / raw)
To: David Marchand, dev
Cc: thomas, mdr, Aaron Conole, Michael Santana, Honnappa Nagarahalli,
Bruce Richardson
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Thursday, April 15, 2021 9:43 PM
> To: dev@dpdk.org
> Cc: thomas@monjalon.net; mdr@ashroe.eu; Aaron Conole
> <aconole@redhat.com>; Michael Santana <maicolgabriel@hotmail.com>; Juraj
> Linkeš <juraj.linkes@pantheon.tech>; Honnappa Nagarahalli
> <honnappa.nagarahalli@arm.com>; Bruce Richardson
> <bruce.richardson@intel.com>
> Subject: [PATCH v2 1/2] ci: fix ABI reference generation
>
> The machine=generic is not understood by older version of dpdk.
> It is directly passed to gcc as -march=generic.
>
> Since DPDK requires SSE 4.2, this results in an error when configuring
> v21.02 sources for generating the reference ABI.
>
> From GHA [1] logs:
>
> """
> Compiler for C supports arguments -Wundef: YES Compiler for C supports
> arguments -Wwrite-strings: YES Compiler for C supports arguments -Wno-
> address-of-packed-member
> -Waddress-of-packed-member: NO
> Compiler for C supports arguments -Wno-packed-not-aligned
> -Wpacked-not-aligned: NO
> Compiler for C supports arguments -Wno-missing-field-initializers
> -Wmissing-field-initializers: YES
>
> config/x86/meson.build:14:6: ERROR: Could not get define '__SSE4_2__'
>
> A full log can be found at
> /home/runner/work/dpdk/dpdk-v21.02/build/meson-logs/meson-log.txt
> Error: Process completed with exit code 1.
> """
>
> 1: https://github.com/ovsrobot/dpdk/runs/2355005702
>
> Stick to a compatible configuration passing -Dmachine=default.
>
> Note: the breakage was not seen earlier this week as I guess the CI workers are
> using a cached ABI reference for v20.11.
>
> Fixes: 5b3a6ca6fd28 ("build: alias default build as generic")
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
Reviewed-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
Do we want to change this back to -Dmachine=generic after next release?
> ---
> .ci/linux-build.sh | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh index 3cbeb193a1..91e43a975b
> 100755
> --- a/.ci/linux-build.sh
> +++ b/.ci/linux-build.sh
> @@ -77,7 +77,7 @@ else
> OPTS="$OPTS -Dexamples=all"
> fi
>
> -OPTS="$OPTS -Dmachine=generic"
> +OPTS="$OPTS -Dmachine=default"
> OPTS="$OPTS --default-library=$DEF_LIB"
> OPTS="$OPTS --buildtype=debugoptimized"
> OPTS="$OPTS -Dcheck_includes=true"
> --
> 2.23.0
>
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [Linuxarm] Re: [PATCH V3] ethdev: add queue state when retrieve queue information
2021-04-15 12:45 0% ` Ferruh Yigit
2021-04-15 13:34 3% ` Thomas Monjalon
@ 2021-04-16 0:58 0% ` oulijun
1 sibling, 0 replies; 200+ results
From: oulijun @ 2021-04-16 0:58 UTC (permalink / raw)
To: linuxarm, dev, Ferruh Yigit
在 2021/4/15 20:45, Ferruh Yigit 写道:
> On 4/15/2021 1:36 PM, Thomas Monjalon wrote:
>> 15/04/2021 14:33, Ferruh Yigit:
>>> On 4/15/2021 3:40 AM, Lijun Ou wrote:
>>>> Currently, upper-layer application could get queue state only
>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>> this is not the recommended way to access it. So this patch
>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>> rte_eth_tx_queue_info_get API.
>>>>
>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>> it could be ABI compatible.
>>>>
>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>
>>> Looks good to me, but it is causing an ABI error as we already
>>> discussed before
>>> as that is false positive.
>>>
>>>
>>> Ray, David,
>>>
>>> Should we add any exception to libabigail.abignore for this?
>>
>> We do not tolerate any ABI warning.
>> If we are sure the ABI change is false positive,
>> it must be suppressed in libabigail.abignore in the same patch.
>>
>
> A new field is added to public structs, but struct size or the location
> of the existing fields are not changing (struct is cache aligned).
>
> Can you please support how this can be added to 'libabigail.abignore'?
>
> Lijun can you please send a new version with 'libabigail.abignore' update?
>
Yes, I can do that. But at the moment I don't know how to update
libabigil.abinore. I don't know where to modify
Is there any relevant documentation?
> Thanks,
> ferruh
> _______________________________________________
> Linuxarm mailing list -- linuxarm@openeuler.org
> To unsubscribe send an email to linuxarm-leave@openeuler.org
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version
2021-04-15 19:43 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
@ 2021-04-15 19:43 7% ` David Marchand
2021-04-16 6:39 4% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation Juraj Linkeš
1 sibling, 0 replies; 200+ results
From: David Marchand @ 2021-04-15 19:43 UTC (permalink / raw)
To: dev; +Cc: thomas, mdr, Aaron Conole, Michael Santana
When bumping DPDK version, we should have bumped the ABI reference too.
Fixes: 442155f70c6b ("version: 21.05-rc0")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
---
.github/workflows/build.yml | 2 +-
.travis.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9175ec43d3..d38feace69 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,7 +21,7 @@ jobs:
CC: ccache ${{ matrix.config.compiler }}
DEF_LIB: ${{ matrix.config.library }}
LIBABIGAIL_VERSION: libabigail-1.8
- REF_GIT_TAG: v20.11
+ REF_GIT_TAG: v21.02
RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
strategy:
diff --git a/.travis.yml b/.travis.yml
index 7ed982ac07..898cffd998 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,7 +41,7 @@ script: ./.ci/${TRAVIS_OS_NAME}-build.sh
env:
global:
- LIBABIGAIL_VERSION=libabigail-1.8
- - REF_GIT_TAG=v20.11
+ - REF_GIT_TAG=v21.02
jobs:
include:
--
2.23.0
^ permalink raw reply [relevance 7%]
* [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation
2021-04-15 16:32 7% [dpdk-dev] [PATCH] ci: bump ABI reference version David Marchand
` (2 preceding siblings ...)
2021-04-15 19:40 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
@ 2021-04-15 19:43 8% ` David Marchand
2021-04-15 19:43 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
2021-04-16 6:39 4% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation Juraj Linkeš
3 siblings, 2 replies; 200+ results
From: David Marchand @ 2021-04-15 19:43 UTC (permalink / raw)
To: dev
Cc: thomas, mdr, Aaron Conole, Michael Santana, Juraj Linkeš,
Honnappa Nagarahalli, Bruce Richardson
The machine=generic is not understood by older version of dpdk.
It is directly passed to gcc as -march=generic.
Since DPDK requires SSE 4.2, this results in an error when configuring
v21.02 sources for generating the reference ABI.
From GHA [1] logs:
"""
Compiler for C supports arguments -Wundef: YES
Compiler for C supports arguments -Wwrite-strings: YES
Compiler for C supports arguments -Wno-address-of-packed-member
-Waddress-of-packed-member: NO
Compiler for C supports arguments -Wno-packed-not-aligned
-Wpacked-not-aligned: NO
Compiler for C supports arguments -Wno-missing-field-initializers
-Wmissing-field-initializers: YES
config/x86/meson.build:14:6: ERROR: Could not get define '__SSE4_2__'
A full log can be found at
/home/runner/work/dpdk/dpdk-v21.02/build/meson-logs/meson-log.txt
Error: Process completed with exit code 1.
"""
1: https://github.com/ovsrobot/dpdk/runs/2355005702
Stick to a compatible configuration passing -Dmachine=default.
Note: the breakage was not seen earlier this week as I guess the CI
workers are using a cached ABI reference for v20.11.
Fixes: 5b3a6ca6fd28 ("build: alias default build as generic")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
.ci/linux-build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 3cbeb193a1..91e43a975b 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -77,7 +77,7 @@ else
OPTS="$OPTS -Dexamples=all"
fi
-OPTS="$OPTS -Dmachine=generic"
+OPTS="$OPTS -Dmachine=default"
OPTS="$OPTS --default-library=$DEF_LIB"
OPTS="$OPTS --buildtype=debugoptimized"
OPTS="$OPTS -Dcheck_includes=true"
--
2.23.0
^ permalink raw reply [relevance 8%]
* [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version
2021-04-15 16:32 7% [dpdk-dev] [PATCH] ci: bump ABI reference version David Marchand
2021-04-15 16:57 7% ` Thomas Monjalon
2021-04-15 19:38 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
@ 2021-04-15 19:40 7% ` David Marchand
2021-04-15 19:43 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
3 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-15 19:40 UTC (permalink / raw)
To: dev; +Cc: thomas, mdr, Aaron Conole, Michael Santana
When bumping DPDK version, we should have bumped the ABI reference too.
Fixes: 442155f70c6b ("version: 21.05-rc0")
Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
---
.github/workflows/build.yml | 2 +-
.travis.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9175ec43d3..d38feace69 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,7 +21,7 @@ jobs:
CC: ccache ${{ matrix.config.compiler }}
DEF_LIB: ${{ matrix.config.library }}
LIBABIGAIL_VERSION: libabigail-1.8
- REF_GIT_TAG: v20.11
+ REF_GIT_TAG: v21.02
RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
strategy:
diff --git a/.travis.yml b/.travis.yml
index 7ed982ac07..898cffd998 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,7 +41,7 @@ script: ./.ci/${TRAVIS_OS_NAME}-build.sh
env:
global:
- LIBABIGAIL_VERSION=libabigail-1.8
- - REF_GIT_TAG=v20.11
+ - REF_GIT_TAG=v21.02
jobs:
include:
--
2.23.0
^ permalink raw reply [relevance 7%]
* [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation
2021-04-15 16:32 7% [dpdk-dev] [PATCH] ci: bump ABI reference version David Marchand
2021-04-15 16:57 7% ` Thomas Monjalon
@ 2021-04-15 19:38 8% ` David Marchand
2021-04-15 19:40 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
2021-04-15 19:43 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
3 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-15 19:38 UTC (permalink / raw)
To: dev
Cc: thomas, mdr, Aaron Conole, Michael Santana, Juraj Linkeš,
Honnappa Nagarahalli, Bruce Richardson
The machine=generic is not understood by older version of dpdk.
It is directly passed to gcc as -march=generic.
Since DPDK requires SSE 4.2, this results in an error when configuring
v21.02 sources for generating the reference ABI.
From GHA [1] logs:
"""
Compiler for C supports arguments -Wundef: YES
Compiler for C supports arguments -Wwrite-strings: YES
Compiler for C supports arguments -Wno-address-of-packed-member
-Waddress-of-packed-member: NO
Compiler for C supports arguments -Wno-packed-not-aligned
-Wpacked-not-aligned: NO
Compiler for C supports arguments -Wno-missing-field-initializers
-Wmissing-field-initializers: YES
config/x86/meson.build:14:6: ERROR: Could not get define '__SSE4_2__'
A full log can be found at
/home/runner/work/dpdk/dpdk-v21.02/build/meson-logs/meson-log.txt
Error: Process completed with exit code 1.
"""
1: https://github.com/ovsrobot/dpdk/runs/2355005702
Stick to a compatible configuration passing -Dmachine=default.
Note: the breakage was not seen earlier this week as I guess the CI
workers are using a cached ABI reference for v20.11.
Fixes: 5b3a6ca6fd28 ("build: alias default build as generic")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
.ci/linux-build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 3cbeb193a1..91e43a975b 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -77,7 +77,7 @@ else
OPTS="$OPTS -Dexamples=all"
fi
-OPTS="$OPTS -Dmachine=generic"
+OPTS="$OPTS -Dmachine=default"
OPTS="$OPTS --default-library=$DEF_LIB"
OPTS="$OPTS --buildtype=debugoptimized"
OPTS="$OPTS -Dcheck_includes=true"
--
2.23.0
^ permalink raw reply [relevance 8%]
* Re: [dpdk-dev] [EXT] [PATCH v5] cryptodev: support multiple cipher data-units
2021-04-15 19:01 3% ` Akhil Goyal
@ 2021-04-15 19:31 0% ` David Marchand
0 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-15 19:31 UTC (permalink / raw)
To: Akhil Goyal
Cc: Thomas Monjalon, dev, matan, Ray Kinsella, Neil Horman,
Declan Doherty, Aaron Conole, Dodji Seketeli, Yigit, Ferruh
On Thu, Apr 15, 2021 at 9:01 PM Akhil Goyal <gakhil@marvell.com> wrote:
> This patch is causing ABI breakage at my end, but since CI is passing, I am applying this patch.
> I believe my libabigail version is older than what CI is using.
I discussed this earlier with Thomas.
This is likely the use of anonymous struct/union that was not
understood by libabigail until recently.
The public CI (Travis and GHA) uses libabigail 1.8.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ci: bump ABI reference version
2021-04-15 16:57 7% ` Thomas Monjalon
@ 2021-04-15 19:28 7% ` David Marchand
0 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-15 19:28 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev, Ray Kinsella, Aaron Conole, Michael Santana
On Thu, Apr 15, 2021 at 6:57 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 15/04/2021 18:32, David Marchand:
> > When bumping DPDK version, we should have bumped the ABI reference too.
> >
> > Fixes: 442155f70c6b ("version: 21.05-rc0")
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > ---
> > - REF_GIT_TAG: v20.11
> > + REF_GIT_TAG: v21.02
>
> Yes, checking against 21.02 may catch breakage of ABI
> added in 21.02.
>
> Acked-by: Thomas Monjalon <thomas@monjalon.net>
Unfortunately, we have a regression when (re)generating a ABI
reference in the CI script (compat issue with -Dmachine=generic that
is not understood by v21.02).
Testing the fix, will post later.
--
David Marchand
^ permalink raw reply [relevance 7%]
* Re: [dpdk-dev] [EXT] [PATCH v5] cryptodev: support multiple cipher data-units
2021-04-15 8:35 0% ` [dpdk-dev] [EXT] " Akhil Goyal
@ 2021-04-15 19:01 3% ` Akhil Goyal
2021-04-15 19:31 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-15 19:01 UTC (permalink / raw)
To: Akhil Goyal, Thomas Monjalon, dev, matan
Cc: Ray Kinsella, Neil Horman, Declan Doherty
> > From: Matan Azrad <matan@nvidia.com>
> >
> > In cryptography, a block cipher is a deterministic algorithm operating
> > on fixed-length groups of bits, called blocks.
> >
> > A block cipher consists of two paired algorithms, one for encryption
> > and the other for decryption. Both algorithms accept two inputs:
> > an input block of size n bits and a key of size k bits; and both yield
> > an n-bit output block. The decryption algorithm is defined to be the
> > inverse function of the encryption.
> >
> > For AES standard the block size is 16 bytes.
> > For AES in XTS mode, the data to be encrypted\decrypted does not have to
> > be multiple of 16B size, the unit of data is called data-unit.
> > The data-unit size can be any size in range [16B, 2^24B], so, in this
> > case, a data stream is divided into N amount of equal data-units and
> > must be encrypted\decrypted in the same data-unit resolution.
> >
> > For ABI compatibility reason, the size is limited to 64K (16-bit field).
> > The new field dataunit_len is inserted in a struct padding hole,
> > which is only 2 bytes long in 32-bit build.
> > It could be moved and extended later during an ABI-breakage window.
> >
> > The current cryptodev API doesn't allow the user to select a specific
> > data-unit length supported by the devices.
> > In addition, there is no definition how the IV is detected per data-unit
> > when single operation includes more than one data-unit.
> >
> > That causes applications to use single operation per data-unit even though
> > all the data is continuous in memory what reduces datapath performance.
> >
> > Add a new feature flag to support multiple data-unit sizes, called
> > RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
> > Add a new field in cipher capability, called dataunit_set,
> > where the devices can report the range of the supported data-unit sizes.
> > Add a new cipher transformation field, called dataunit_len, where the user
> > can select the data-unit length for all the operations.
> >
> > All the new fields do not change the size of their structures,
> > by filling some struct padding holes.
> > They are added as exceptions in the ABI check file libabigail.abignore.
> >
> > Using a bitmap to report the supported data-unit sizes capability allows
> > the devices to report a range simply as same as the user to read it
> > simply. also, thus sizes are usually common and probably will be shared
> > among different devices.
> >
> > Signed-off-by: Matan Azrad <matan@nvidia.com>
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> Acked-by: Akhil Goyal <gakhil@marvell.com>
Applied to dpdk-next-crypto
This patch is causing ABI breakage at my end, but since CI is passing, I am applying this patch.
I believe my libabigail version is older than what CI is using.
@thomas : Please pull crypto tree to main and send the dependent patches again so that CI can run on them.
Regards,
Akhil
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs
2021-04-15 15:51 1% ` [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs Bing Zhao
2021-04-15 15:56 0% ` Ori Kam
@ 2021-04-15 17:59 0% ` Ajit Khaparde
2021-04-16 6:58 0% ` Bing Zhao
2021-04-16 7:03 0% ` Thomas Monjalon
1 sibling, 2 replies; 200+ results
From: Ajit Khaparde @ 2021-04-15 17:59 UTC (permalink / raw)
To: Bing Zhao
Cc: Ori Kam, Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko,
Matan Azrad, Slava Ovsiienko, dpdk-dev, Gregory Etelson,
Andrey Vesnovaty
[-- Attachment #1: Type: text/plain, Size: 3892 bytes --]
On Thu, Apr 15, 2021 at 8:52 AM Bing Zhao <bingz@nvidia.com> wrote:
>
> Right now, rte_flow_shared_action_* APIs are used for some shared
> actions, like RSS, count. The shared action should be created before
> using it inside a flow. These shared actions sometimes are not
> really shared but just some indirect actions decoupled from a flow.
>
> The new functions rte_flow_action_handle_* are added to replace
> the current shared functions rte_flow_shared_action_*.
>
> There are two types of flow actions:
> 1. the direct (normal) actions that could be created and stored
> within a flow rule. Such action is tied to its flow rule and
> cannot be reused.
> 2. the indirect action, in the past, named shared_action. It is
> created from a direct actioni, like count or rss, and then used
> in the flow rules with an object handle. The PMD will take care
> of the retrieve from indirect action to the direct action
> when it is referenced.
>
> The indirect action is accessed (update / query) w/o any flow rule,
> just via the action object handle. For example, when querying or
> resetting a counter, it could be done out of any flow using this
> counter, but only the handle of the counter action object is
> required.
> The indirect action object could be shared by different flows or
> used by a single flow, depending on the direct action type and
> the real-life requirements.
> The handle of an indirect action object is opaque and defined in
> each driver and possibly different per direct action type.
>
> The old name "shared" is improper in a sense and should be replaced.
>
> Since the APIs are changed from "rte_flow_shared_action*" to the new
> "rte_flow_action_handle*", the testpmd application code and command
> line interfaces also need to be updated to do the adaption.
> The testpmd application user guide is also updated. All the "shared
> action" related parts are replaced with "indirect action" to have a
> correct explanation.
>
> The parameter of "update" interface is also changed. A general
> pointer will replace the rte_flow_action struct pointer due to the
> facts:
> 1. Some action may not support fields updating. In the example of a
> counter, the only "update" supported should be the reset. So
> passing a rte_flow_action struct pointer is meaningless and
> there is even no such corresponding action struct. What's more,
> if more than one operations should be supported, for some other
> action, such pointer parameter may not meet the need.
> 2. Some action may need conditional or partial update, the current
> parameter will not provide the ability to indicate which part(s)
> to update.
> For different types of indirect action objects, the pointer could
> either be the same of rte_flow_action* struct - in order not to
> break the current driver implementation, or some wrapper
> structures with bits as masks to indicate which part to be
> updated, depending on real needs of the corresponding direct
> action. For different direct actions, the structures of indirect
> action objects updating will be different.
>
> All the underlayer PMD callbacks will be moved to these new APIs.
>
> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break the ABI. All the implementations are changed by using
> RTE_FLOW_ACTION_TYPE_INDIRECT.
When I read this somehow indirect did not feel right.
But I don't have a strong suggestion either.
Since it is a context of action or actions maybe we use action_context?
>
> Since the APIs are changed from "rte_flow_shared_action*" to the new
> "rte_flow_action_handle*" and the "update" interface's 3rd input
> parameter is changed to generic pointer, the mlx5 PMD that uses these
> APIs needs to do the adaption to the new APIs as well.
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> Acked-by: Andrey Vesnovaty <andreyv@nvidia.com>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ci: bump ABI reference version
2021-04-15 16:32 7% [dpdk-dev] [PATCH] ci: bump ABI reference version David Marchand
@ 2021-04-15 16:57 7% ` Thomas Monjalon
2021-04-15 19:28 7% ` David Marchand
2021-04-15 19:38 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
` (2 subsequent siblings)
3 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-15 16:57 UTC (permalink / raw)
To: David Marchand; +Cc: dev, mdr, Aaron Conole, Michael Santana
15/04/2021 18:32, David Marchand:
> When bumping DPDK version, we should have bumped the ABI reference too.
>
> Fixes: 442155f70c6b ("version: 21.05-rc0")
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> - REF_GIT_TAG: v20.11
> + REF_GIT_TAG: v21.02
Yes, checking against 21.02 may catch breakage of ABI
added in 21.02.
Acked-by: Thomas Monjalon <thomas@monjalon.net>
^ permalink raw reply [relevance 7%]
* [dpdk-dev] [PATCH] ci: bump ABI reference version
@ 2021-04-15 16:32 7% David Marchand
2021-04-15 16:57 7% ` Thomas Monjalon
` (3 more replies)
0 siblings, 4 replies; 200+ results
From: David Marchand @ 2021-04-15 16:32 UTC (permalink / raw)
To: dev; +Cc: thomas, mdr, Aaron Conole, Michael Santana
When bumping DPDK version, we should have bumped the ABI reference too.
Fixes: 442155f70c6b ("version: 21.05-rc0")
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
.github/workflows/build.yml | 2 +-
.travis.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9175ec43d3..d38feace69 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,7 +21,7 @@ jobs:
CC: ccache ${{ matrix.config.compiler }}
DEF_LIB: ${{ matrix.config.library }}
LIBABIGAIL_VERSION: libabigail-1.8
- REF_GIT_TAG: v20.11
+ REF_GIT_TAG: v21.02
RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
strategy:
diff --git a/.travis.yml b/.travis.yml
index 7ed982ac07..898cffd998 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,7 +41,7 @@ script: ./.ci/${TRAVIS_OS_NAME}-build.sh
env:
global:
- LIBABIGAIL_VERSION=libabigail-1.8
- - REF_GIT_TAG=v20.11
+ - REF_GIT_TAG=v21.02
jobs:
include:
--
2.23.0
^ permalink raw reply [relevance 7%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-15 14:10 0% ` Thomas Monjalon
@ 2021-04-15 16:02 0% ` Andrew Rybchenko
0 siblings, 0 replies; 200+ results
From: Andrew Rybchenko @ 2021-04-15 16:02 UTC (permalink / raw)
To: Thomas Monjalon, Bing Zhao
Cc: orika, ferruh.yigit, matan, viacheslavo, dev, ajit.khaparde,
getelson, andreyv
On 4/15/21 5:10 PM, Thomas Monjalon wrote:
> 15/04/2021 15:55, Andrew Rybchenko:
>> On 4/10/21 5:03 PM, Bing Zhao wrote:
>>> Right now, rte_flow_shared_action_* APIs are used for some shared
>>> actions, like RSS, count. The shared action should be created before
>>> using it inside a flow. These shared actions sometimes are not
>>> really shared but just some indirect actions decoupled from a flow.
>>>
>>> The new functions rte_flow_action_handle_* are added to replace
>>> the current shared functions rte_flow_shared_action_*.
>>>
>>> There are two types of flow actions:
>>> 1. the direct (normal) actions that could be created and stored
>>> within a flow rule. Such action is tied to its flow rule and
>>> cannot be reused.
>>> 2. the indirect action, in the past, named shared_action. It is
>>> created from a direct actioni, like count or rss, and then used
>>> in the flow rules with an object handle. The PMD will take care
>>> of the retrieve from indirect action to the direct action
>>> when it is referenced.
>>>
>>> The indirect action is accessed (update / query) w/o any flow rule,
>>> just via the action object handle. For example, when querying or
>>> resetting a counter, it could be done out of any flow using this
>>> counter, but only the handle of the counter action object is
>>> required.
>>> The indirect action object could be shared by different flows or
>>> used by a single flow, depending on the direct action type and
>>> the real-life requirements.
>>> The handle of an indirect action object is opaque and defined in
>>> each driver and possibly different per direct action type.
>>>
>>> The old name "shared" is improper in a sense and should be replaced.
>>>
>>> All the command lines in testpmd application with "shared_action*"
>>> are replaced with "indirect_action*".
>>>
>>> The parameter of "update" interface is also changed. A general
>>> pointer will replace the rte_flow_action struct pointer due to the
>>> facts:
>>> 1. Some action may not support fields updating. In the example of a
>>> counter, the only "update" supported should be the reset. So
>>> passing a rte_flow_action struct pointer is meaningless and
>>> there is even no such corresponding action struct. What's more,
>>> if more than one operations should be supported, for some other
>>> action, such pointer parameter may not meet the need.
>>> 2. Some action may need conditional or partial update, the current
>>> parameter will not provide the ability to indicate which part(s)
>>> to update.
>>> For different types of indirect action objects, the pointer could
>>> either be the same of rte_flow_action* struct - in order not to
>>> break the current driver implementation, or some wrapper
>>> structures with bits as masks to indicate which part to be
>>> updated, depending on real needs of the corresponding direct
>>> action. For different direct actions, the structures of indirect
>>> action objects updating will be different.
>>>
>>> All the underlayer PMD callbacks will be moved to these new APIs.
>>>
>>> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
>>> break the ABI. All the implementations are changed by using
>>> RTE_FLOW_ACTION_TYPE_INDIRECT.
>>>
>>> Signed-off-by: Bing Zhao <bingz@nvidia.com>
>>
>> Just for the record. I still dislike renaming since "shared" highlights
>> purpose (what is definitely better), but "indirect" is just a technical
>> detail on how it is done.
>
> The difference is that indirect action is not only for sharing.
> It allows manipulating an action as an object.
> Action object is inserted in flow rules through the indirect action.
> Does it make it clearer?
>
Yes, I see thanks.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs
2021-04-15 15:51 1% ` [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs Bing Zhao
@ 2021-04-15 15:56 0% ` Ori Kam
2021-04-15 17:59 0% ` Ajit Khaparde
1 sibling, 0 replies; 200+ results
From: Ori Kam @ 2021-04-15 15:56 UTC (permalink / raw)
To: Bing Zhao, NBU-Contact-Thomas Monjalon, ferruh.yigit,
andrew.rybchenko, Matan Azrad, Slava Ovsiienko
Cc: dev, ajit.khaparde, Gregory Etelson, Andrey Vesnovaty
Hi Bing
> -----Original Message-----
> From: Bing Zhao <bingz@nvidia.com>
> Sent: Thursday, April 15, 2021 6:52 PM
> Subject: [PATCH v3 1/1] ethdev: introduce indirect action APIs
>
> Right now, rte_flow_shared_action_* APIs are used for some shared
> actions, like RSS, count. The shared action should be created before
> using it inside a flow. These shared actions sometimes are not
> really shared but just some indirect actions decoupled from a flow.
>
> The new functions rte_flow_action_handle_* are added to replace
> the current shared functions rte_flow_shared_action_*.
>
> There are two types of flow actions:
> 1. the direct (normal) actions that could be created and stored
> within a flow rule. Such action is tied to its flow rule and
> cannot be reused.
> 2. the indirect action, in the past, named shared_action. It is
> created from a direct actioni, like count or rss, and then used
> in the flow rules with an object handle. The PMD will take care
> of the retrieve from indirect action to the direct action
> when it is referenced.
>
> The indirect action is accessed (update / query) w/o any flow rule,
> just via the action object handle. For example, when querying or
> resetting a counter, it could be done out of any flow using this
> counter, but only the handle of the counter action object is
> required.
> The indirect action object could be shared by different flows or
> used by a single flow, depending on the direct action type and
> the real-life requirements.
> The handle of an indirect action object is opaque and defined in
> each driver and possibly different per direct action type.
>
> The old name "shared" is improper in a sense and should be replaced.
>
> Since the APIs are changed from "rte_flow_shared_action*" to the new
> "rte_flow_action_handle*", the testpmd application code and command
> line interfaces also need to be updated to do the adaption.
> The testpmd application user guide is also updated. All the "shared
> action" related parts are replaced with "indirect action" to have a
> correct explanation.
>
> The parameter of "update" interface is also changed. A general
> pointer will replace the rte_flow_action struct pointer due to the
> facts:
> 1. Some action may not support fields updating. In the example of a
> counter, the only "update" supported should be the reset. So
> passing a rte_flow_action struct pointer is meaningless and
> there is even no such corresponding action struct. What's more,
> if more than one operations should be supported, for some other
> action, such pointer parameter may not meet the need.
> 2. Some action may need conditional or partial update, the current
> parameter will not provide the ability to indicate which part(s)
> to update.
> For different types of indirect action objects, the pointer could
> either be the same of rte_flow_action* struct - in order not to
> break the current driver implementation, or some wrapper
> structures with bits as masks to indicate which part to be
> updated, depending on real needs of the corresponding direct
> action. For different direct actions, the structures of indirect
> action objects updating will be different.
>
> All the underlayer PMD callbacks will be moved to these new APIs.
>
> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break the ABI. All the implementations are changed by using
> RTE_FLOW_ACTION_TYPE_INDIRECT.
>
> Since the APIs are changed from "rte_flow_shared_action*" to the new
> "rte_flow_action_handle*" and the "update" interface's 3rd input
> parameter is changed to generic pointer, the mlx5 PMD that uses these
> APIs needs to do the adaption to the new APIs as well.
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> Acked-by: Andrey Vesnovaty <andreyv@nvidia.com>
> ---
Acked-by: Ori Kam <orika@nvidia.com>
Thanks,
Ori
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs
@ 2021-04-15 15:51 1% ` Bing Zhao
2021-04-15 15:56 0% ` Ori Kam
2021-04-15 17:59 0% ` Ajit Khaparde
0 siblings, 2 replies; 200+ results
From: Bing Zhao @ 2021-04-15 15:51 UTC (permalink / raw)
To: orika, thomas, ferruh.yigit, andrew.rybchenko, matan, viacheslavo
Cc: dev, ajit.khaparde, getelson, andreyv
Right now, rte_flow_shared_action_* APIs are used for some shared
actions, like RSS, count. The shared action should be created before
using it inside a flow. These shared actions sometimes are not
really shared but just some indirect actions decoupled from a flow.
The new functions rte_flow_action_handle_* are added to replace
the current shared functions rte_flow_shared_action_*.
There are two types of flow actions:
1. the direct (normal) actions that could be created and stored
within a flow rule. Such action is tied to its flow rule and
cannot be reused.
2. the indirect action, in the past, named shared_action. It is
created from a direct actioni, like count or rss, and then used
in the flow rules with an object handle. The PMD will take care
of the retrieve from indirect action to the direct action
when it is referenced.
The indirect action is accessed (update / query) w/o any flow rule,
just via the action object handle. For example, when querying or
resetting a counter, it could be done out of any flow using this
counter, but only the handle of the counter action object is
required.
The indirect action object could be shared by different flows or
used by a single flow, depending on the direct action type and
the real-life requirements.
The handle of an indirect action object is opaque and defined in
each driver and possibly different per direct action type.
The old name "shared" is improper in a sense and should be replaced.
Since the APIs are changed from "rte_flow_shared_action*" to the new
"rte_flow_action_handle*", the testpmd application code and command
line interfaces also need to be updated to do the adaption.
The testpmd application user guide is also updated. All the "shared
action" related parts are replaced with "indirect action" to have a
correct explanation.
The parameter of "update" interface is also changed. A general
pointer will replace the rte_flow_action struct pointer due to the
facts:
1. Some action may not support fields updating. In the example of a
counter, the only "update" supported should be the reset. So
passing a rte_flow_action struct pointer is meaningless and
there is even no such corresponding action struct. What's more,
if more than one operations should be supported, for some other
action, such pointer parameter may not meet the need.
2. Some action may need conditional or partial update, the current
parameter will not provide the ability to indicate which part(s)
to update.
For different types of indirect action objects, the pointer could
either be the same of rte_flow_action* struct - in order not to
break the current driver implementation, or some wrapper
structures with bits as masks to indicate which part to be
updated, depending on real needs of the corresponding direct
action. For different direct actions, the structures of indirect
action objects updating will be different.
All the underlayer PMD callbacks will be moved to these new APIs.
The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
break the ABI. All the implementations are changed by using
RTE_FLOW_ACTION_TYPE_INDIRECT.
Since the APIs are changed from "rte_flow_shared_action*" to the new
"rte_flow_action_handle*" and the "update" interface's 3rd input
parameter is changed to generic pointer, the mlx5 PMD that uses these
APIs needs to do the adaption to the new APIs as well.
Signed-off-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Andrey Vesnovaty <andreyv@nvidia.com>
---
app/test-pmd/cmdline.c | 24 +-
app/test-pmd/cmdline_flow.c | 252 ++++++++++----------
app/test-pmd/config.c | 160 ++++++-------
app/test-pmd/testpmd.h | 28 +--
doc/guides/prog_guide/rte_flow.rst | 27 ++-
doc/guides/rel_notes/release_21_05.rst | 3 +
doc/guides/testpmd_app_ug/testpmd_funcs.rst | 94 ++++----
drivers/net/mlx5/mlx5.c | 2 +-
drivers/net/mlx5/mlx5_defs.h | 4 +-
drivers/net/mlx5/mlx5_flow.c | 238 +++++++++---------
drivers/net/mlx5/mlx5_flow.h | 24 +-
drivers/net/mlx5/mlx5_flow_dv.c | 85 +++----
lib/librte_ethdev/rte_flow.c | 56 ++---
lib/librte_ethdev/rte_flow.h | 118 +++++----
lib/librte_ethdev/rte_flow_driver.h | 26 +-
lib/librte_ethdev/version.map | 8 +-
16 files changed, 588 insertions(+), 561 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 5bf1497f2b..4d9e038ce8 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1002,23 +1002,23 @@ static void cmd_help_long_parsed(void *parsed_result,
" List and destroy aged flows"
" flow rules\n\n"
- "flow shared_action {port_id} create"
- " [action_id {shared_action_id}]"
+ "flow indirect_action {port_id} create"
+ " [action_id {indirect_action_id}]"
" [ingress] [egress]"
" action {action} / end\n"
- " Create shared action.\n\n"
+ " Create indirect action.\n\n"
- "flow shared_action {port_id} update"
- " {shared_action_id} action {action} / end\n"
- " Update shared action.\n\n"
+ "flow indirect_action {port_id} update"
+ " {indirect_action_id} action {action} / end\n"
+ " Update indirect action.\n\n"
- "flow shared_action {port_id} destroy"
- " action_id {shared_action_id} [...]\n"
- " Destroy specific shared actions.\n\n"
+ "flow indirect_action {port_id} destroy"
+ " action_id {indirect_action_id} [...]\n"
+ " Destroy specific indirect actions.\n\n"
- "flow shared_action {port_id} query"
- " {shared_action_id}\n"
- " Query an existing shared action.\n\n"
+ "flow indirect_action {port_id} query"
+ " {indirect_action_id}\n"
+ " Query an existing indirect action.\n\n"
"set vxlan ip-version (ipv4|ipv6) vni (vni) udp-src"
" (udp-src) udp-dst (udp-dst) ip-src (ip-src) ip-dst"
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 0127d9e7d6..c5381c638b 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -54,7 +54,7 @@ enum index {
PORT_ID,
GROUP_ID,
PRIORITY_LEVEL,
- SHARED_ACTION_ID,
+ INDIRECT_ACTION_ID,
/* Top-level command. */
SET,
@@ -68,7 +68,7 @@ enum index {
/* Top-level command. */
FLOW,
/* Sub-level commands. */
- SHARED_ACTION,
+ INDIRECT_ACTION,
VALIDATE,
CREATE,
DESTROY,
@@ -112,21 +112,21 @@ enum index {
DUMP_ALL,
DUMP_ONE,
- /* Shared action arguments */
- SHARED_ACTION_CREATE,
- SHARED_ACTION_UPDATE,
- SHARED_ACTION_DESTROY,
- SHARED_ACTION_QUERY,
+ /* Indirect action arguments */
+ INDIRECT_ACTION_CREATE,
+ INDIRECT_ACTION_UPDATE,
+ INDIRECT_ACTION_DESTROY,
+ INDIRECT_ACTION_QUERY,
- /* Shared action create arguments */
- SHARED_ACTION_CREATE_ID,
- SHARED_ACTION_INGRESS,
- SHARED_ACTION_EGRESS,
- SHARED_ACTION_TRANSFER,
- SHARED_ACTION_SPEC,
+ /* Indirect action create arguments */
+ INDIRECT_ACTION_CREATE_ID,
+ INDIRECT_ACTION_INGRESS,
+ INDIRECT_ACTION_EGRESS,
+ INDIRECT_ACTION_TRANSFER,
+ INDIRECT_ACTION_SPEC,
- /* Shared action destroy arguments */
- SHARED_ACTION_DESTROY_ID,
+ /* Indirect action destroy arguments */
+ INDIRECT_ACTION_DESTROY_ID,
/* Validate/create pattern. */
PATTERN,
@@ -416,8 +416,8 @@ enum index {
ACTION_SAMPLE_RATIO,
ACTION_SAMPLE_INDEX,
ACTION_SAMPLE_INDEX_VALUE,
- ACTION_SHARED,
- SHARED_ACTION_ID2PTR,
+ ACTION_INDIRECT,
+ INDIRECT_ACTION_ID2PTR,
ACTION_MODIFY_FIELD,
ACTION_MODIFY_FIELD_OP,
ACTION_MODIFY_FIELD_OP_VALUE,
@@ -778,10 +778,10 @@ struct buffer {
struct {
uint32_t *action_id;
uint32_t action_id_n;
- } sa_destroy; /**< Shared action destroy arguments. */
+ } ia_destroy; /**< Indirect action destroy arguments. */
struct {
uint32_t action_id;
- } sa; /* Shared action query arguments */
+ } ia; /* Indirect action query arguments */
struct {
struct rte_flow_attr attr;
struct tunnel_ops tunnel_ops;
@@ -841,12 +841,12 @@ struct parse_action_priv {
.size = s, \
})
-static const enum index next_sa_create_attr[] = {
- SHARED_ACTION_CREATE_ID,
- SHARED_ACTION_INGRESS,
- SHARED_ACTION_EGRESS,
- SHARED_ACTION_TRANSFER,
- SHARED_ACTION_SPEC,
+static const enum index next_ia_create_attr[] = {
+ INDIRECT_ACTION_CREATE_ID,
+ INDIRECT_ACTION_INGRESS,
+ INDIRECT_ACTION_EGRESS,
+ INDIRECT_ACTION_TRANSFER,
+ INDIRECT_ACTION_SPEC,
ZERO,
};
@@ -856,11 +856,11 @@ static const enum index next_dump_subcmd[] = {
ZERO,
};
-static const enum index next_sa_subcmd[] = {
- SHARED_ACTION_CREATE,
- SHARED_ACTION_UPDATE,
- SHARED_ACTION_DESTROY,
- SHARED_ACTION_QUERY,
+static const enum index next_ia_subcmd[] = {
+ INDIRECT_ACTION_CREATE,
+ INDIRECT_ACTION_UPDATE,
+ INDIRECT_ACTION_DESTROY,
+ INDIRECT_ACTION_QUERY,
ZERO,
};
@@ -900,8 +900,8 @@ static const enum index next_aged_attr[] = {
ZERO,
};
-static const enum index next_sa_destroy_attr[] = {
- SHARED_ACTION_DESTROY_ID,
+static const enum index next_ia_destroy_attr[] = {
+ INDIRECT_ACTION_DESTROY_ID,
END,
ZERO,
};
@@ -1380,7 +1380,7 @@ static const enum index next_action[] = {
ACTION_SET_IPV6_DSCP,
ACTION_AGE,
ACTION_SAMPLE,
- ACTION_SHARED,
+ ACTION_INDIRECT,
ACTION_MODIFY_FIELD,
ZERO,
};
@@ -1797,13 +1797,13 @@ static int parse_ipv6_addr(struct context *, const struct token *,
static int parse_port(struct context *, const struct token *,
const char *, unsigned int,
void *, unsigned int);
-static int parse_sa(struct context *, const struct token *,
+static int parse_ia(struct context *, const struct token *,
const char *, unsigned int,
void *, unsigned int);
-static int parse_sa_destroy(struct context *ctx, const struct token *token,
+static int parse_ia_destroy(struct context *ctx, const struct token *token,
const char *str, unsigned int len,
void *buf, unsigned int size);
-static int parse_sa_id2ptr(struct context *ctx, const struct token *token,
+static int parse_ia_id2ptr(struct context *ctx, const struct token *token,
const char *str, unsigned int len, void *buf,
unsigned int size);
static int comp_none(struct context *, const struct token *,
@@ -1950,10 +1950,10 @@ static const struct token token_list[] = {
.call = parse_int,
.comp = comp_none,
},
- [SHARED_ACTION_ID] = {
- .name = "{shared_action_id}",
- .type = "SHARED_ACTION_ID",
- .help = "shared action id",
+ [INDIRECT_ACTION_ID] = {
+ .name = "{indirect_action_id}",
+ .type = "INDIRECT_ACTION_ID",
+ .help = "indirect action id",
.call = parse_int,
.comp = comp_none,
},
@@ -1963,7 +1963,7 @@ static const struct token token_list[] = {
.type = "{command} {port_id} [{arg} [...]]",
.help = "manage ingress/egress flow rules",
.next = NEXT(NEXT_ENTRY
- (SHARED_ACTION,
+ (INDIRECT_ACTION,
VALIDATE,
CREATE,
DESTROY,
@@ -1977,42 +1977,42 @@ static const struct token token_list[] = {
.call = parse_init,
},
/* Top-level command. */
- [SHARED_ACTION] = {
- .name = "shared_action",
+ [INDIRECT_ACTION] = {
+ .name = "indirect_action",
.type = "{command} {port_id} [{arg} [...]]",
- .help = "manage shared actions",
- .next = NEXT(next_sa_subcmd, NEXT_ENTRY(PORT_ID)),
+ .help = "manage indirect actions",
+ .next = NEXT(next_ia_subcmd, NEXT_ENTRY(PORT_ID)),
.args = ARGS(ARGS_ENTRY(struct buffer, port)),
- .call = parse_sa,
+ .call = parse_ia,
},
/* Sub-level commands. */
- [SHARED_ACTION_CREATE] = {
+ [INDIRECT_ACTION_CREATE] = {
.name = "create",
- .help = "create shared action",
- .next = NEXT(next_sa_create_attr),
- .call = parse_sa,
+ .help = "create indirect action",
+ .next = NEXT(next_ia_create_attr),
+ .call = parse_ia,
},
- [SHARED_ACTION_UPDATE] = {
+ [INDIRECT_ACTION_UPDATE] = {
.name = "update",
- .help = "update shared action",
- .next = NEXT(NEXT_ENTRY(SHARED_ACTION_SPEC),
- NEXT_ENTRY(SHARED_ACTION_ID)),
+ .help = "update indirect action",
+ .next = NEXT(NEXT_ENTRY(INDIRECT_ACTION_SPEC),
+ NEXT_ENTRY(INDIRECT_ACTION_ID)),
.args = ARGS(ARGS_ENTRY(struct buffer, args.vc.attr.group)),
- .call = parse_sa,
+ .call = parse_ia,
},
- [SHARED_ACTION_DESTROY] = {
+ [INDIRECT_ACTION_DESTROY] = {
.name = "destroy",
- .help = "destroy shared action",
- .next = NEXT(NEXT_ENTRY(SHARED_ACTION_DESTROY_ID)),
+ .help = "destroy indirect action",
+ .next = NEXT(NEXT_ENTRY(INDIRECT_ACTION_DESTROY_ID)),
.args = ARGS(ARGS_ENTRY(struct buffer, port)),
- .call = parse_sa_destroy,
+ .call = parse_ia_destroy,
},
- [SHARED_ACTION_QUERY] = {
+ [INDIRECT_ACTION_QUERY] = {
.name = "query",
- .help = "query shared action",
- .next = NEXT(NEXT_ENTRY(END), NEXT_ENTRY(SHARED_ACTION_ID)),
- .args = ARGS(ARGS_ENTRY(struct buffer, args.sa.action_id)),
- .call = parse_sa,
+ .help = "query indirect action",
+ .next = NEXT(NEXT_ENTRY(END), NEXT_ENTRY(INDIRECT_ACTION_ID)),
+ .args = ARGS(ARGS_ENTRY(struct buffer, args.ia.action_id)),
+ .call = parse_ia,
},
[VALIDATE] = {
.name = "validate",
@@ -4498,61 +4498,61 @@ static const struct token token_list[] = {
.call = parse_vc_action_sample_index,
.comp = comp_set_sample_index,
},
- /* Shared action destroy arguments. */
- [SHARED_ACTION_DESTROY_ID] = {
+ /* Indirect action destroy arguments. */
+ [INDIRECT_ACTION_DESTROY_ID] = {
.name = "action_id",
- .help = "specify a shared action id to destroy",
- .next = NEXT(next_sa_destroy_attr,
- NEXT_ENTRY(SHARED_ACTION_ID)),
+ .help = "specify a indirect action id to destroy",
+ .next = NEXT(next_ia_destroy_attr,
+ NEXT_ENTRY(INDIRECT_ACTION_ID)),
.args = ARGS(ARGS_ENTRY_PTR(struct buffer,
- args.sa_destroy.action_id)),
- .call = parse_sa_destroy,
+ args.ia_destroy.action_id)),
+ .call = parse_ia_destroy,
},
- /* Shared action create arguments. */
- [SHARED_ACTION_CREATE_ID] = {
+ /* Indirect action create arguments. */
+ [INDIRECT_ACTION_CREATE_ID] = {
.name = "action_id",
- .help = "specify a shared action id to create",
- .next = NEXT(next_sa_create_attr,
- NEXT_ENTRY(SHARED_ACTION_ID)),
+ .help = "specify a indirect action id to create",
+ .next = NEXT(next_ia_create_attr,
+ NEXT_ENTRY(INDIRECT_ACTION_ID)),
.args = ARGS(ARGS_ENTRY(struct buffer, args.vc.attr.group)),
},
- [ACTION_SHARED] = {
- .name = "shared",
- .help = "apply shared action by id",
- .priv = PRIV_ACTION(SHARED, 0),
- .next = NEXT(NEXT_ENTRY(SHARED_ACTION_ID2PTR)),
+ [ACTION_INDIRECT] = {
+ .name = "indirect",
+ .help = "apply indirect action by id",
+ .priv = PRIV_ACTION(INDIRECT, 0),
+ .next = NEXT(NEXT_ENTRY(INDIRECT_ACTION_ID2PTR)),
.args = ARGS(ARGS_ENTRY_ARB(0, sizeof(uint32_t))),
.call = parse_vc,
},
- [SHARED_ACTION_ID2PTR] = {
+ [INDIRECT_ACTION_ID2PTR] = {
.name = "{action_id}",
- .type = "SHARED_ACTION_ID",
- .help = "shared action id",
+ .type = "INDIRECT_ACTION_ID",
+ .help = "indirect action id",
.next = NEXT(NEXT_ENTRY(ACTION_NEXT)),
- .call = parse_sa_id2ptr,
+ .call = parse_ia_id2ptr,
.comp = comp_none,
},
- [SHARED_ACTION_INGRESS] = {
+ [INDIRECT_ACTION_INGRESS] = {
.name = "ingress",
.help = "affect rule to ingress",
- .next = NEXT(next_sa_create_attr),
- .call = parse_sa,
+ .next = NEXT(next_ia_create_attr),
+ .call = parse_ia,
},
- [SHARED_ACTION_EGRESS] = {
+ [INDIRECT_ACTION_EGRESS] = {
.name = "egress",
.help = "affect rule to egress",
- .next = NEXT(next_sa_create_attr),
- .call = parse_sa,
+ .next = NEXT(next_ia_create_attr),
+ .call = parse_ia,
},
- [SHARED_ACTION_TRANSFER] = {
+ [INDIRECT_ACTION_TRANSFER] = {
.name = "transfer",
.help = "affect rule to transfer",
- .next = NEXT(next_sa_create_attr),
- .call = parse_sa,
+ .next = NEXT(next_ia_create_attr),
+ .call = parse_ia,
},
- [SHARED_ACTION_SPEC] = {
+ [INDIRECT_ACTION_SPEC] = {
.name = "action",
- .help = "specify action to share",
+ .help = "specify action to create indirect handle",
.next = NEXT(next_action),
},
};
@@ -4739,9 +4739,9 @@ parse_init(struct context *ctx, const struct token *token,
return len;
}
-/** Parse tokens for shared action commands. */
+/** Parse tokens for indirect action commands. */
static int
-parse_sa(struct context *ctx, const struct token *token,
+parse_ia(struct context *ctx, const struct token *token,
const char *str, unsigned int len,
void *buf, unsigned int size)
{
@@ -4754,7 +4754,7 @@ parse_sa(struct context *ctx, const struct token *token,
if (!out)
return len;
if (!out->command) {
- if (ctx->curr != SHARED_ACTION)
+ if (ctx->curr != INDIRECT_ACTION)
return -1;
if (sizeof(*out) > size)
return -1;
@@ -4766,26 +4766,26 @@ parse_sa(struct context *ctx, const struct token *token,
return len;
}
switch (ctx->curr) {
- case SHARED_ACTION_CREATE:
- case SHARED_ACTION_UPDATE:
+ case INDIRECT_ACTION_CREATE:
+ case INDIRECT_ACTION_UPDATE:
out->args.vc.actions =
(void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1),
sizeof(double));
out->args.vc.attr.group = UINT32_MAX;
/* fallthrough */
- case SHARED_ACTION_QUERY:
+ case INDIRECT_ACTION_QUERY:
out->command = ctx->curr;
ctx->objdata = 0;
ctx->object = out;
ctx->objmask = NULL;
return len;
- case SHARED_ACTION_EGRESS:
+ case INDIRECT_ACTION_EGRESS:
out->args.vc.attr.egress = 1;
return len;
- case SHARED_ACTION_INGRESS:
+ case INDIRECT_ACTION_INGRESS:
out->args.vc.attr.ingress = 1;
return len;
- case SHARED_ACTION_TRANSFER:
+ case INDIRECT_ACTION_TRANSFER:
out->args.vc.attr.transfer = 1;
return len;
default:
@@ -4794,9 +4794,9 @@ parse_sa(struct context *ctx, const struct token *token,
}
-/** Parse tokens for shared action destroy command. */
+/** Parse tokens for indirect action destroy command. */
static int
-parse_sa_destroy(struct context *ctx, const struct token *token,
+parse_ia_destroy(struct context *ctx, const struct token *token,
const char *str, unsigned int len,
void *buf, unsigned int size)
{
@@ -4809,8 +4809,8 @@ parse_sa_destroy(struct context *ctx, const struct token *token,
/* Nothing else to do if there is no buffer. */
if (!out)
return len;
- if (!out->command || out->command == SHARED_ACTION) {
- if (ctx->curr != SHARED_ACTION_DESTROY)
+ if (!out->command || out->command == INDIRECT_ACTION) {
+ if (ctx->curr != INDIRECT_ACTION_DESTROY)
return -1;
if (sizeof(*out) > size)
return -1;
@@ -4818,13 +4818,13 @@ parse_sa_destroy(struct context *ctx, const struct token *token,
ctx->objdata = 0;
ctx->object = out;
ctx->objmask = NULL;
- out->args.sa_destroy.action_id =
+ out->args.ia_destroy.action_id =
(void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1),
sizeof(double));
return len;
}
- action_id = out->args.sa_destroy.action_id
- + out->args.sa_destroy.action_id_n++;
+ action_id = out->args.ia_destroy.action_id
+ + out->args.ia_destroy.action_id_n++;
if ((uint8_t *)action_id > (uint8_t *)out + size)
return -1;
ctx->objdata = 0;
@@ -7102,7 +7102,7 @@ parse_port(struct context *ctx, const struct token *token,
}
static int
-parse_sa_id2ptr(struct context *ctx, const struct token *token,
+parse_ia_id2ptr(struct context *ctx, const struct token *token,
const char *str, unsigned int len,
void *buf, unsigned int size)
{
@@ -7119,9 +7119,9 @@ parse_sa_id2ptr(struct context *ctx, const struct token *token,
ctx->object = action;
if (ret != (int)len)
return ret;
- /* set shared action */
+ /* set indirect action */
if (action) {
- action->conf = port_shared_action_get_by_id(ctx->port, id);
+ action->conf = port_action_handle_get_by_id(ctx->port, id);
ret = (action->conf) ? ret : -1;
}
return ret;
@@ -7659,27 +7659,27 @@ static void
cmd_flow_parsed(const struct buffer *in)
{
switch (in->command) {
- case SHARED_ACTION_CREATE:
- port_shared_action_create(
+ case INDIRECT_ACTION_CREATE:
+ port_action_handle_create(
in->port, in->args.vc.attr.group,
- &((const struct rte_flow_shared_action_conf) {
+ &((const struct rte_flow_indir_action_conf) {
.ingress = in->args.vc.attr.ingress,
.egress = in->args.vc.attr.egress,
.transfer = in->args.vc.attr.transfer,
}),
in->args.vc.actions);
break;
- case SHARED_ACTION_DESTROY:
- port_shared_action_destroy(in->port,
- in->args.sa_destroy.action_id_n,
- in->args.sa_destroy.action_id);
+ case INDIRECT_ACTION_DESTROY:
+ port_action_handle_destroy(in->port,
+ in->args.ia_destroy.action_id_n,
+ in->args.ia_destroy.action_id);
break;
- case SHARED_ACTION_UPDATE:
- port_shared_action_update(in->port, in->args.vc.attr.group,
+ case INDIRECT_ACTION_UPDATE:
+ port_action_handle_update(in->port, in->args.vc.attr.group,
in->args.vc.actions);
break;
- case SHARED_ACTION_QUERY:
- port_shared_action_query(in->port, in->args.sa.action_id);
+ case INDIRECT_ACTION_QUERY:
+ port_action_handle_query(in->port, in->args.ia.action_id);
break;
case VALIDATE:
port_flow_validate(in->port, &in->args.vc.attr,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 40b2b29725..c219ef25f7 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -1392,38 +1392,38 @@ rss_config_display(struct rte_flow_action_rss *rss_conf)
}
}
-static struct port_shared_action *
+static struct port_indirect_action *
action_get_by_id(portid_t port_id, uint32_t id)
{
struct rte_port *port;
- struct port_shared_action **ppsa;
- struct port_shared_action *psa = NULL;
+ struct port_indirect_action **ppia;
+ struct port_indirect_action *pia = NULL;
if (port_id_is_invalid(port_id, ENABLED_WARN) ||
port_id == (portid_t)RTE_PORT_ALL)
return NULL;
port = &ports[port_id];
- ppsa = &port->actions_list;
- while (*ppsa) {
- if ((*ppsa)->id == id) {
- psa = *ppsa;
+ ppia = &port->actions_list;
+ while (*ppia) {
+ if ((*ppia)->id == id) {
+ pia = *ppia;
break;
}
- ppsa = &(*ppsa)->next;
+ ppia = &(*ppia)->next;
}
- if (!psa)
- printf("Failed to find shared action #%u on port %u\n",
+ if (!pia)
+ printf("Failed to find indirect action #%u on port %u\n",
id, port_id);
- return psa;
+ return pia;
}
static int
action_alloc(portid_t port_id, uint32_t id,
- struct port_shared_action **action)
+ struct port_indirect_action **action)
{
struct rte_port *port;
- struct port_shared_action **ppsa;
- struct port_shared_action *psa = NULL;
+ struct port_indirect_action **ppia;
+ struct port_indirect_action *pia = NULL;
*action = NULL;
if (port_id_is_invalid(port_id, ENABLED_WARN) ||
@@ -1434,7 +1434,7 @@ action_alloc(portid_t port_id, uint32_t id,
/* taking first available ID */
if (port->actions_list) {
if (port->actions_list->id == UINT32_MAX - 1) {
- printf("Highest shared action ID is already"
+ printf("Highest indirect action ID is already"
" assigned, delete it first\n");
return -ENOMEM;
}
@@ -1443,70 +1443,70 @@ action_alloc(portid_t port_id, uint32_t id,
id = 0;
}
}
- psa = calloc(1, sizeof(*psa));
- if (!psa) {
- printf("Allocation of port %u shared action failed\n",
+ pia = calloc(1, sizeof(*pia));
+ if (!pia) {
+ printf("Allocation of port %u indirect action failed\n",
port_id);
return -ENOMEM;
}
- ppsa = &port->actions_list;
- while (*ppsa && (*ppsa)->id > id)
- ppsa = &(*ppsa)->next;
- if (*ppsa && (*ppsa)->id == id) {
- printf("Shared action #%u is already assigned,"
+ ppia = &port->actions_list;
+ while (*ppia && (*ppia)->id > id)
+ ppia = &(*ppia)->next;
+ if (*ppia && (*ppia)->id == id) {
+ printf("Indirect action #%u is already assigned,"
" delete it first\n", id);
- free(psa);
+ free(pia);
return -EINVAL;
}
- psa->next = *ppsa;
- psa->id = id;
- *ppsa = psa;
- *action = psa;
+ pia->next = *ppia;
+ pia->id = id;
+ *ppia = pia;
+ *action = pia;
return 0;
}
-/** Create shared action */
+/** Create indirect action */
int
-port_shared_action_create(portid_t port_id, uint32_t id,
- const struct rte_flow_shared_action_conf *conf,
+port_action_handle_create(portid_t port_id, uint32_t id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action)
{
- struct port_shared_action *psa;
+ struct port_indirect_action *pia;
int ret;
struct rte_flow_error error;
- ret = action_alloc(port_id, id, &psa);
+ ret = action_alloc(port_id, id, &pia);
if (ret)
return ret;
if (action->type == RTE_FLOW_ACTION_TYPE_AGE) {
struct rte_flow_action_age *age =
(struct rte_flow_action_age *)(uintptr_t)(action->conf);
- psa->age_type = ACTION_AGE_CONTEXT_TYPE_SHARED_ACTION;
- age->context = &psa->age_type;
+ pia->age_type = ACTION_AGE_CONTEXT_TYPE_INDIRECT_ACTION;
+ age->context = &pia->age_type;
}
/* Poisoning to make sure PMDs update it in case of error. */
memset(&error, 0x22, sizeof(error));
- psa->action = rte_flow_shared_action_create(port_id, conf, action,
+ pia->handle = rte_flow_action_handle_create(port_id, conf, action,
&error);
- if (!psa->action) {
- uint32_t destroy_id = psa->id;
- port_shared_action_destroy(port_id, 1, &destroy_id);
+ if (!pia->handle) {
+ uint32_t destroy_id = pia->id;
+ port_action_handle_destroy(port_id, 1, &destroy_id);
return port_flow_complain(&error);
}
- psa->type = action->type;
- printf("Shared action #%u created\n", psa->id);
+ pia->type = action->type;
+ printf("Indirect action #%u created\n", pia->id);
return 0;
}
-/** Destroy shared action */
+/** Destroy indirect action */
int
-port_shared_action_destroy(portid_t port_id,
+port_action_handle_destroy(portid_t port_id,
uint32_t n,
const uint32_t *actions)
{
struct rte_port *port;
- struct port_shared_action **tmp;
+ struct port_indirect_action **tmp;
uint32_t c = 0;
int ret = 0;
@@ -1520,9 +1520,9 @@ port_shared_action_destroy(portid_t port_id,
for (i = 0; i != n; ++i) {
struct rte_flow_error error;
- struct port_shared_action *psa = *tmp;
+ struct port_indirect_action *pia = *tmp;
- if (actions[i] != psa->id)
+ if (actions[i] != pia->id)
continue;
/*
* Poisoning to make sure PMDs update it in case
@@ -1530,14 +1530,14 @@ port_shared_action_destroy(portid_t port_id,
*/
memset(&error, 0x33, sizeof(error));
- if (psa->action && rte_flow_shared_action_destroy(
- port_id, psa->action, &error)) {
+ if (pia->handle && rte_flow_action_handle_destroy(
+ port_id, pia->handle, &error)) {
ret = port_flow_complain(&error);
continue;
}
- *tmp = psa->next;
- printf("Shared action #%u destroyed\n", psa->id);
- free(psa);
+ *tmp = pia->next;
+ printf("Indirect action #%u destroyed\n", pia->id);
+ free(pia);
break;
}
if (i == n)
@@ -1548,60 +1548,60 @@ port_shared_action_destroy(portid_t port_id,
}
-/** Get shared action by port + id */
-struct rte_flow_shared_action *
-port_shared_action_get_by_id(portid_t port_id, uint32_t id)
+/** Get indirect action by port + id */
+struct rte_flow_action_handle *
+port_action_handle_get_by_id(portid_t port_id, uint32_t id)
{
- struct port_shared_action *psa = action_get_by_id(port_id, id);
+ struct port_indirect_action *pia = action_get_by_id(port_id, id);
- return (psa) ? psa->action : NULL;
+ return (pia) ? pia->handle : NULL;
}
-/** Update shared action */
+/** Update indirect action */
int
-port_shared_action_update(portid_t port_id, uint32_t id,
+port_action_handle_update(portid_t port_id, uint32_t id,
const struct rte_flow_action *action)
{
struct rte_flow_error error;
- struct rte_flow_shared_action *shared_action;
+ struct rte_flow_action_handle *action_handle;
- shared_action = port_shared_action_get_by_id(port_id, id);
- if (!shared_action)
+ action_handle = port_action_handle_get_by_id(port_id, id);
+ if (!action_handle)
return -EINVAL;
- if (rte_flow_shared_action_update(port_id, shared_action, action,
+ if (rte_flow_action_handle_update(port_id, action_handle, action,
&error)) {
return port_flow_complain(&error);
}
- printf("Shared action #%u updated\n", id);
+ printf("Indirect action #%u updated\n", id);
return 0;
}
int
-port_shared_action_query(portid_t port_id, uint32_t id)
+port_action_handle_query(portid_t port_id, uint32_t id)
{
struct rte_flow_error error;
- struct port_shared_action *psa;
+ struct port_indirect_action *pia;
uint64_t default_data;
void *data = NULL;
int ret = 0;
- psa = action_get_by_id(port_id, id);
- if (!psa)
+ pia = action_get_by_id(port_id, id);
+ if (!pia)
return -EINVAL;
- switch (psa->type) {
+ switch (pia->type) {
case RTE_FLOW_ACTION_TYPE_RSS:
case RTE_FLOW_ACTION_TYPE_AGE:
data = &default_data;
break;
default:
- printf("Shared action %u (type: %d) on port %u doesn't support"
- " query\n", id, psa->type, port_id);
+ printf("Indirect action %u (type: %d) on port %u doesn't"
+ " support query\n", id, pia->type, port_id);
return -1;
}
- if (rte_flow_shared_action_query(port_id, psa->action, data, &error))
+ if (rte_flow_action_handle_query(port_id, pia->handle, data, &error))
ret = port_flow_complain(&error);
- switch (psa->type) {
+ switch (pia->type) {
case RTE_FLOW_ACTION_TYPE_RSS:
if (!ret)
printf("Shared RSS action:\n\trefs:%u\n",
@@ -1623,8 +1623,8 @@ port_shared_action_query(portid_t port_id, uint32_t id)
data = NULL;
break;
default:
- printf("Shared action %u (type: %d) on port %u doesn't support"
- " query\n", id, psa->type, port_id);
+ printf("Indirect action %u (type: %d) on port %u doesn't"
+ " support query\n", id, pia->type, port_id);
ret = -1;
}
return ret;
@@ -2066,7 +2066,7 @@ port_flow_aged(portid_t port_id, uint8_t destroy)
enum age_action_context_type *type;
union {
struct port_flow *pf;
- struct port_shared_action *psa;
+ struct port_indirect_action *pia;
} ctx;
if (port_id_is_invalid(port_id, ENABLED_WARN) ||
@@ -2116,11 +2116,11 @@ port_flow_aged(portid_t port_id, uint8_t destroy)
&ctx.pf->id))
total++;
break;
- case ACTION_AGE_CONTEXT_TYPE_SHARED_ACTION:
- ctx.psa = container_of(type, struct port_shared_action,
- age_type);
- printf("%-20s\t%" PRIu32 "\n", "Shared action",
- ctx.psa->id);
+ case ACTION_AGE_CONTEXT_TYPE_INDIRECT_ACTION:
+ ctx.pia = container_of(type,
+ struct port_indirect_action, age_type);
+ printf("%-20s\t%" PRIu32 "\n", "Indirect action",
+ ctx.pia->id);
break;
default:
printf("Error: invalid context type %u\n", port_id);
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 36d8535d0c..c314b30f2e 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -151,7 +151,7 @@ struct fwd_stream {
*/
enum age_action_context_type {
ACTION_AGE_CONTEXT_TYPE_FLOW,
- ACTION_AGE_CONTEXT_TYPE_SHARED_ACTION,
+ ACTION_AGE_CONTEXT_TYPE_INDIRECT_ACTION,
};
/** Descriptor for a single flow. */
@@ -165,12 +165,12 @@ struct port_flow {
uint8_t data[]; /**< Storage for flow rule description */
};
-/* Descriptor for shared action */
-struct port_shared_action {
- struct port_shared_action *next; /**< Next flow in list. */
- uint32_t id; /**< Shared action ID. */
+/* Descriptor for indirect action */
+struct port_indirect_action {
+ struct port_indirect_action *next; /**< Next flow in list. */
+ uint32_t id; /**< Indirect action ID. */
enum rte_flow_action_type type; /**< Action type. */
- struct rte_flow_shared_action *action; /**< Shared action handle. */
+ struct rte_flow_action_handle *handle; /**< Indirect action handle. */
enum age_action_context_type age_type; /**< Age action context type. */
};
@@ -222,8 +222,8 @@ struct rte_port {
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
uint8_t slave_flag; /**< bonding slave port */
struct port_flow *flow_list; /**< Associated flows. */
- struct port_shared_action *actions_list;
- /**< Associated shared actions. */
+ struct port_indirect_action *actions_list;
+ /**< Associated indirect actions. */
LIST_HEAD(, port_flow_tunnel) flow_tunnel_list;
const struct rte_eth_rxtx_callback *rx_dump_cb[RTE_MAX_QUEUES_PER_PORT+1];
const struct rte_eth_rxtx_callback *tx_dump_cb[RTE_MAX_QUEUES_PER_PORT+1];
@@ -801,14 +801,14 @@ void port_reg_bit_field_set(portid_t port_id, uint32_t reg_off,
uint8_t bit1_pos, uint8_t bit2_pos, uint32_t value);
void port_reg_display(portid_t port_id, uint32_t reg_off);
void port_reg_set(portid_t port_id, uint32_t reg_off, uint32_t value);
-int port_shared_action_create(portid_t port_id, uint32_t id,
- const struct rte_flow_shared_action_conf *conf,
+int port_action_handle_create(portid_t port_id, uint32_t id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action);
-int port_shared_action_destroy(portid_t port_id,
+int port_action_handle_destroy(portid_t port_id,
uint32_t n, const uint32_t *action);
-struct rte_flow_shared_action *port_shared_action_get_by_id(portid_t port_id,
+struct rte_flow_action_handle *port_action_handle_get_by_id(portid_t port_id,
uint32_t id);
-int port_shared_action_update(portid_t port_id, uint32_t id,
+int port_action_handle_update(portid_t port_id, uint32_t id,
const struct rte_flow_action *action);
int port_flow_validate(portid_t port_id,
const struct rte_flow_attr *attr,
@@ -820,7 +820,7 @@ int port_flow_create(portid_t port_id,
const struct rte_flow_item *pattern,
const struct rte_flow_action *actions,
const struct tunnel_ops *tunnel_ops);
-int port_shared_action_query(portid_t port_id, uint32_t id);
+int port_action_handle_query(portid_t port_id, uint32_t id);
void update_age_action_context(const struct rte_flow_action *actions,
struct port_flow *pf);
int port_flow_destroy(portid_t port_id, uint32_t n, const uint32_t *rule);
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index e1b93ecedf..2ecc48cfff 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -1719,7 +1719,7 @@ that counter.
For ports within the same switch domain then the counter id namespace extends
to all ports within that switch domain.
-The shared flag is DEPRECATED and ``SHARED`` ``COUNT`` action should be used
+The shared flag is DEPRECATED and ``INDIRECT`` ``COUNT`` action should be used
to make shared counters.
.. _table_rte_flow_action_count:
@@ -2742,25 +2742,26 @@ packets, and must have a fate action.
| ``actions`` | sub-action list for sampling |
+--------------+---------------------------------+
-Action: ``SHARED``
+Action: ``INDIRECT``
^^^^^^^^^^^^^^^^^^
-Flow utilize shared action by handle as returned from
-``rte_flow_shared_action_create()``.
+Flow utilize indirect action by handle as returned from
+``rte_flow_action_handle_create()``.
-The behaviour of the shared action defined by ``action`` argument of type
-``struct rte_flow_action`` passed to ``rte_flow_shared_action_create()``.
+The behaviour of the indirect action defined by ``action`` argument of type
+``struct rte_flow_action`` passed to ``rte_flow_action_handle_create()``.
-Multiple flows can use the same shared action.
-The shared action can be in-place updated by ``rte_flow_shared_action_update()``
-without destroying flow and creating flow again.
+The indirect action can be used by a single flow or shared among multiple flows.
+The indirect action can be in-place updated by ``rte_flow_action_handle_update()``
+without destroying flow and creating flow again. The fields that could be
+updated depend on the type of the ``action`` and different for every type.
-The shared action specified data (e.g. counter) can be queried by
-``rte_flow_shared_action_query()``.
+The indirect action specified data (e.g. counter) can be queried by
+``rte_flow_action_handle_query()``.
-.. _table_rte_flow_shared_action:
+.. _table_rte_flow_action_handle:
-.. table:: SHARED
+.. table:: INDIRECT
+---------------+
| Field |
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 82ee71152f..e6f99350af 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -234,6 +234,9 @@ API Changes
* pci: The value ``PCI_ANY_ID`` is marked as deprecated
and can be replaced with ``RTE_PCI_ANY_ID``.
+* ethdev: The experimental shared action APIs in ``rte_flow.h`` has been
+ replaced from ``rte_flow_shared_action_*`` to indirect action APIs named
+ ``rte_flow_action_handle_*``.
ABI Changes
-----------
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index e3bfed566d..1fa6e2000e 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -4057,10 +4057,10 @@ This section lists supported actions and their attributes, if any.
- ``dscp_value {unsigned}``: The new DSCP value to be set
-- ``shared``: Use shared action created via
- ``flow shared_action {port_id} create``
+- ``indirect``: Use indirect action created via
+ ``flow indirect_action {port_id} create``
- - ``shared_action_id {unsigned}``: Shared action ID to use
+ - ``indirect_action_id {unsigned}``: Indirect action ID to use
Destroying flow rules
~~~~~~~~~~~~~~~~~~~~~
@@ -4351,113 +4351,113 @@ If attach ``destroy`` parameter, the command will destroy all the list aged flow
testpmd> flow aged 0
Port 0 total aged flows: 0
-Creating shared actions
+Creating indirect actions
~~~~~~~~~~~~~~~~~~~~~~~
-``flow shared_action {port_id} create`` creates shared action with optional
-shared action ID. It is bound to ``rte_flow_shared_action_create()``::
+``flow indirect_action {port_id} create`` creates indirect action with optional
+indirect action ID. It is bound to ``rte_flow_action_handle_create()``::
- flow shared_action {port_id} create [action_id {shared_action_id}]
+ flow indirect_action {port_id} create [action_id {indirect_action_id}]
[ingress] [egress] [transfer] action {action} / end
If successful, it will show::
- Shared action #[...] created
+ Indirect action #[...] created
-Otherwise, it will complain either that shared action already exists or that
+Otherwise, it will complain either that indirect action already exists or that
some error occurred::
- Shared action #[...] is already assigned, delete it first
+ Indirect action #[...] is already assigned, delete it first
::
Caught error type [...] ([...]): [...]
-Create shared rss action with id 100 to queues 1 and 2 on port 0::
+Create indirect rss action with id 100 to queues 1 and 2 on port 0::
- testpmd> flow shared_action 0 create action_id 100 \
+ testpmd> flow indirect_action 0 create action_id 100 \
ingress action rss queues 1 2 end / end
-Create shared rss action with id assigned by testpmd to queues 1 and 2 on
+Create indirect rss action with id assigned by testpmd to queues 1 and 2 on
port 0::
- testpmd> flow shared_action 0 create action_id \
+ testpmd> flow indirect_action 0 create action_id \
ingress action rss queues 0 1 end / end
-Updating shared actions
+Updating indirect actions
~~~~~~~~~~~~~~~~~~~~~~~
-``flow shared_action {port_id} update`` updates configuration of the shared
-action from its shared action ID (as returned by
-``flow shared_action {port_id} create``). It is bound to
-``rte_flow_shared_action_update()``::
+``flow indirect_action {port_id} update`` updates configuration of the indirect
+action from its indirect action ID (as returned by
+``flow indirect_action {port_id} create``). It is bound to
+``rte_flow_action_handle_update()``::
- flow shared_action {port_id} update {shared_action_id}
+ flow indirect_action {port_id} update {indirect_action_id}
action {action} / end
If successful, it will show::
- Shared action #[...] updated
+ Indirect action #[...] updated
-Otherwise, it will complain either that shared action not found or that some
+Otherwise, it will complain either that indirect action not found or that some
error occurred::
- Failed to find shared action #[...] on port [...]
+ Failed to find indirect action #[...] on port [...]
::
Caught error type [...] ([...]): [...]
-Update shared rss action having id 100 on port 0 with rss to queues 0 and 3
+Update indirect rss action having id 100 on port 0 with rss to queues 0 and 3
(in create example above rss queues were 1 and 2)::
- testpmd> flow shared_action 0 update 100 action rss queues 0 3 end / end
+ testpmd> flow indirect_action 0 update 100 action rss queues 0 3 end / end
-Destroying shared actions
+Destroying indirect actions
~~~~~~~~~~~~~~~~~~~~~~~~~
-``flow shared_action {port_id} update`` destroys one or more shared actions
-from their shared action IDs (as returned by
-``flow shared_action {port_id} create``). It is bound to
-``rte_flow_shared_action_destroy()``::
+``flow indirect_action {port_id} destroy`` destroys one or more indirect actions
+from their indirect action IDs (as returned by
+``flow indirect_action {port_id} create``). It is bound to
+``rte_flow_action_handle_destroy()``::
- flow shared_action {port_id} destroy action_id {shared_action_id} [...]
+ flow indirect_action {port_id} destroy action_id {indirect_action_id} [...]
If successful, it will show::
- Shared action #[...] destroyed
+ Indirect action #[...] destroyed
-It does not report anything for shared action IDs that do not exist.
-The usual error message is shown when a shared action cannot be destroyed::
+It does not report anything for indirect action IDs that do not exist.
+The usual error message is shown when a indirect action cannot be destroyed::
Caught error type [...] ([...]): [...]
-Destroy shared actions having id 100 & 101::
+Destroy indirect actions having id 100 & 101::
- testpmd> flow shared_action 0 destroy action_id 100 action_id 101
+ testpmd> flow indirect_action 0 destroy action_id 100 action_id 101
-Query shared actions
+Query indirect actions
~~~~~~~~~~~~~~~~~~~~
-``flow shared_action {port_id} query`` queries the shared action from its
-shared action ID (as returned by ``flow shared_action {port_id} create``).
-It is bound to ``rte_flow_shared_action_query()``::
+``flow indirect_action {port_id} query`` queries the indirect action from its
+indirect action ID (as returned by ``flow indirect_action {port_id} create``).
+It is bound to ``rte_flow_action_handle_query()``::
- flow shared_action {port_id} query {shared_action_id}
+ flow indirect_action {port_id} query {indirect_action_id}
-Currently only rss shared action supported. If successful, it will show::
+Currently only rss indirect action supported. If successful, it will show::
- Shared RSS action:
+ Indirect RSS action:
refs:[...]
-Otherwise, it will complain either that shared action not found or that some
+Otherwise, it will complain either that indirect action not found or that some
error occurred::
- Failed to find shared action #[...] on port [...]
+ Failed to find indirect action #[...] on port [...]
::
Caught error type [...] ([...]): [...]
-Query shared action having id 100::
+Query indirect action having id 100::
- testpmd> flow shared_action 0 query 100
+ testpmd> flow indirect_action 0 query 100
Sample QinQ flow rules
~~~~~~~~~~~~~~~~~~~~~~
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 02cc2c781e..3bf224c559 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1341,7 +1341,7 @@ mlx5_dev_close(struct rte_eth_dev *dev)
* then this will return directly without any action.
*/
mlx5_flow_list_flush(dev, &priv->flows, true);
- mlx5_shared_action_flush(dev);
+ mlx5_action_handle_flush(dev);
mlx5_flow_meter_flush(dev, NULL);
/* Prevent crashes when queues are still in use. */
dev->rx_pkt_burst = removed_rx_burst;
diff --git a/drivers/net/mlx5/mlx5_defs.h b/drivers/net/mlx5/mlx5_defs.h
index 8f2807dcd9..6e9c4b9cdd 100644
--- a/drivers/net/mlx5/mlx5_defs.h
+++ b/drivers/net/mlx5/mlx5_defs.h
@@ -192,8 +192,8 @@
#define MLX5_HAIRPIN_QUEUE_STRIDE 6
#define MLX5_HAIRPIN_JUMBO_LOG_SIZE (14 + 2)
-/* Maximum number of shared actions supported by rte_flow */
-#define MLX5_MAX_SHARED_ACTIONS 2
+/* Maximum number of indirect actions supported by rte_flow */
+#define MLX5_MAX_INDIRECT_ACTIONS 2
/*
* Linux definition of static_assert is found in /usr/include/assert.h.
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 84463074a5..68e1ffda9c 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -568,23 +568,23 @@ static const struct mlx5_flow_expand_node mlx5_support_expansion[] = {
},
};
-static struct rte_flow_shared_action *
-mlx5_shared_action_create(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+static struct rte_flow_action_handle *
+mlx5_action_handle_create(struct rte_eth_dev *dev,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
-static int mlx5_shared_action_destroy
+static int mlx5_action_handle_destroy
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
-static int mlx5_shared_action_update
+static int mlx5_action_handle_update
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *action,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
-static int mlx5_shared_action_query
+static int mlx5_action_handle_query
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *action,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error);
static int
@@ -623,10 +623,10 @@ static const struct rte_flow_ops mlx5_flow_ops = {
.query = mlx5_flow_query,
.dev_dump = mlx5_flow_dev_dump,
.get_aged_flows = mlx5_flow_get_aged_flows,
- .shared_action_create = mlx5_shared_action_create,
- .shared_action_destroy = mlx5_shared_action_destroy,
- .shared_action_update = mlx5_shared_action_update,
- .shared_action_query = mlx5_shared_action_query,
+ .action_handle_create = mlx5_action_handle_create,
+ .action_handle_destroy = mlx5_action_handle_destroy,
+ .action_handle_update = mlx5_action_handle_update,
+ .action_handle_query = mlx5_action_handle_query,
.tunnel_decap_set = mlx5_flow_tunnel_decap_set,
.tunnel_match = mlx5_flow_tunnel_match,
.tunnel_action_decap_release = mlx5_flow_tunnel_action_release,
@@ -3402,31 +3402,31 @@ flow_aso_age_get_by_idx(struct rte_eth_dev *dev, uint32_t age_idx)
return &pool->actions[offset - 1];
}
-/* maps shared action to translated non shared in some actions array */
-struct mlx5_translated_shared_action {
- struct rte_flow_shared_action *action; /**< Shared action */
- int index; /**< Index in related array of rte_flow_action */
+/* maps indirect action to translated direct in some actions array */
+struct mlx5_translated_action_handle {
+ struct rte_flow_action_handle *action; /**< Indirect action handle. */
+ int index; /**< Index in related array of rte_flow_action. */
};
/**
- * Translates actions of type RTE_FLOW_ACTION_TYPE_SHARED to related
- * non shared action if translation possible.
- * This functionality used to run same execution path for both shared & non
- * shared actions on flow create. All necessary preparations for shared
- * action handling should be preformed on *shared* actions list returned
+ * Translates actions of type RTE_FLOW_ACTION_TYPE_INDIRECT to related
+ * direct action if translation possible.
+ * This functionality used to run same execution path for both direct and
+ * indirect actions on flow create. All necessary preparations for indirect
+ * action handling should be performed on *handle* actions list returned
* from this call.
*
* @param[in] dev
* Pointer to Ethernet device.
* @param[in] actions
* List of actions to translate.
- * @param[out] shared
- * List to store translated shared actions.
- * @param[in, out] shared_n
- * Size of *shared* array. On return should be updated with number of shared
- * actions retrieved from the *actions* list.
+ * @param[out] handle
+ * List to store translated indirect action object handles.
+ * @param[in, out] indir_n
+ * Size of *handle* array. On return should be updated with number of
+ * indirect actions retrieved from the *actions* list.
* @param[out] translated_actions
- * List of actions where all shared actions were translated to non shared
+ * List of actions where all indirect actions were translated to direct
* if possible. NULL if no translation took place.
* @param[out] error
* Pointer to the error structure.
@@ -3435,10 +3435,10 @@ struct mlx5_translated_shared_action {
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
static int
-flow_shared_actions_translate(struct rte_eth_dev *dev,
+flow_action_handles_translate(struct rte_eth_dev *dev,
const struct rte_flow_action actions[],
- struct mlx5_translated_shared_action *shared,
- int *shared_n,
+ struct mlx5_translated_action_handle *handle,
+ int *indir_n,
struct rte_flow_action **translated_actions,
struct rte_flow_error *error)
{
@@ -3447,23 +3447,23 @@ flow_shared_actions_translate(struct rte_eth_dev *dev,
size_t actions_size;
int n;
int copied_n = 0;
- struct mlx5_translated_shared_action *shared_end = NULL;
+ struct mlx5_translated_action_handle *handle_end = NULL;
for (n = 0; actions[n].type != RTE_FLOW_ACTION_TYPE_END; n++) {
- if (actions[n].type != RTE_FLOW_ACTION_TYPE_SHARED)
+ if (actions[n].type != RTE_FLOW_ACTION_TYPE_INDIRECT)
continue;
- if (copied_n == *shared_n) {
+ if (copied_n == *indir_n) {
return rte_flow_error_set
(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION_NUM,
NULL, "too many shared actions");
}
- rte_memcpy(&shared[copied_n].action, &actions[n].conf,
+ rte_memcpy(&handle[copied_n].action, &actions[n].conf,
sizeof(actions[n].conf));
- shared[copied_n].index = n;
+ handle[copied_n].index = n;
copied_n++;
}
n++;
- *shared_n = copied_n;
+ *indir_n = copied_n;
if (!copied_n)
return 0;
actions_size = sizeof(struct rte_flow_action) * n;
@@ -3473,28 +3473,28 @@ flow_shared_actions_translate(struct rte_eth_dev *dev,
return -ENOMEM;
}
memcpy(translated, actions, actions_size);
- for (shared_end = shared + copied_n; shared < shared_end; shared++) {
+ for (handle_end = handle + copied_n; handle < handle_end; handle++) {
struct mlx5_shared_action_rss *shared_rss;
- uint32_t act_idx = (uint32_t)(uintptr_t)shared->action;
- uint32_t type = act_idx >> MLX5_SHARED_ACTION_TYPE_OFFSET;
- uint32_t idx = act_idx & ((1u << MLX5_SHARED_ACTION_TYPE_OFFSET)
- - 1);
+ uint32_t act_idx = (uint32_t)(uintptr_t)handle->action;
+ uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
+ uint32_t idx = act_idx &
+ ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
switch (type) {
- case MLX5_SHARED_ACTION_TYPE_RSS:
+ case MLX5_INDIRECT_ACTION_TYPE_RSS:
shared_rss = mlx5_ipool_get
(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS], idx);
- translated[shared->index].type =
+ translated[handle->index].type =
RTE_FLOW_ACTION_TYPE_RSS;
- translated[shared->index].conf =
+ translated[handle->index].conf =
&shared_rss->origin;
break;
- case MLX5_SHARED_ACTION_TYPE_AGE:
+ case MLX5_INDIRECT_ACTION_TYPE_AGE:
if (priv->sh->flow_hit_aso_en) {
- translated[shared->index].type =
+ translated[handle->index].type =
(enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_AGE;
- translated[shared->index].conf =
+ translated[handle->index].conf =
(void *)(uintptr_t)idx;
break;
}
@@ -3503,7 +3503,7 @@ flow_shared_actions_translate(struct rte_eth_dev *dev,
mlx5_free(translated);
return rte_flow_error_set
(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION,
- NULL, "invalid shared action type");
+ NULL, "invalid indirect action type");
}
}
*translated_actions = translated;
@@ -3525,21 +3525,21 @@ flow_shared_actions_translate(struct rte_eth_dev *dev,
*/
static uint32_t
flow_get_shared_rss_action(struct rte_eth_dev *dev,
- struct mlx5_translated_shared_action *shared,
+ struct mlx5_translated_action_handle *handle,
int shared_n)
{
- struct mlx5_translated_shared_action *shared_end;
+ struct mlx5_translated_action_handle *handle_end;
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_shared_action_rss *shared_rss;
- for (shared_end = shared + shared_n; shared < shared_end; shared++) {
- uint32_t act_idx = (uint32_t)(uintptr_t)shared->action;
- uint32_t type = act_idx >> MLX5_SHARED_ACTION_TYPE_OFFSET;
+ for (handle_end = handle + shared_n; handle < handle_end; handle++) {
+ uint32_t act_idx = (uint32_t)(uintptr_t)handle->action;
+ uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
uint32_t idx = act_idx &
- ((1u << MLX5_SHARED_ACTION_TYPE_OFFSET) - 1);
+ ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
switch (type) {
- case MLX5_SHARED_ACTION_TYPE_RSS:
+ case MLX5_INDIRECT_ACTION_TYPE_RSS:
shared_rss = mlx5_ipool_get
(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],
idx);
@@ -5549,9 +5549,9 @@ flow_list_create(struct rte_eth_dev *dev, uint32_t *list,
struct rte_flow *flow = NULL;
struct mlx5_flow *dev_flow;
const struct rte_flow_action_rss *rss = NULL;
- struct mlx5_translated_shared_action
- shared_actions[MLX5_MAX_SHARED_ACTIONS];
- int shared_actions_n = MLX5_MAX_SHARED_ACTIONS;
+ struct mlx5_translated_action_handle
+ indir_actions[MLX5_MAX_INDIRECT_ACTIONS];
+ int indir_actions_n = MLX5_MAX_INDIRECT_ACTIONS;
union {
struct mlx5_flow_expand_rss buf;
uint8_t buffer[2048];
@@ -5591,9 +5591,9 @@ flow_list_create(struct rte_eth_dev *dev, uint32_t *list,
MLX5_ASSERT(wks);
rss_desc = &wks->rss_desc;
- ret = flow_shared_actions_translate(dev, original_actions,
- shared_actions,
- &shared_actions_n,
+ ret = flow_action_handles_translate(dev, original_actions,
+ indir_actions,
+ &indir_actions_n,
&translated_actions, error);
if (ret < 0) {
MLX5_ASSERT(translated_actions == NULL);
@@ -5654,8 +5654,8 @@ flow_list_create(struct rte_eth_dev *dev, uint32_t *list,
buf->entries = 1;
buf->entry[0].pattern = (void *)(uintptr_t)items;
}
- rss_desc->shared_rss = flow_get_shared_rss_action(dev, shared_actions,
- shared_actions_n);
+ rss_desc->shared_rss = flow_get_shared_rss_action(dev, indir_actions,
+ indir_actions_n);
for (i = 0; i < buf->entries; ++i) {
/* Initialize flow split data. */
flow_split_info.prefix_layers = 0;
@@ -5834,14 +5834,14 @@ mlx5_flow_validate(struct rte_eth_dev *dev,
struct rte_flow_error *error)
{
int hairpin_flow;
- struct mlx5_translated_shared_action
- shared_actions[MLX5_MAX_SHARED_ACTIONS];
- int shared_actions_n = MLX5_MAX_SHARED_ACTIONS;
+ struct mlx5_translated_action_handle
+ indir_actions[MLX5_MAX_INDIRECT_ACTIONS];
+ int indir_actions_n = MLX5_MAX_INDIRECT_ACTIONS;
const struct rte_flow_action *actions;
struct rte_flow_action *translated_actions = NULL;
- int ret = flow_shared_actions_translate(dev, original_actions,
- shared_actions,
- &shared_actions_n,
+ int ret = flow_action_handles_translate(dev, original_actions,
+ indir_actions,
+ &indir_actions_n,
&translated_actions, error);
if (ret)
@@ -7214,12 +7214,12 @@ mlx5_flow_get_aged_flows(struct rte_eth_dev *dev, void **contexts,
/* Wrapper for driver action_validate op callback */
static int
flow_drv_action_validate(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
const struct mlx5_flow_driver_ops *fops,
struct rte_flow_error *error)
{
- static const char err_msg[] = "shared action validation unsupported";
+ static const char err_msg[] = "indirect action validation unsupported";
if (!fops->action_validate) {
DRV_LOG(ERR, "port %u %s.", dev->data->port_id, err_msg);
@@ -7235,8 +7235,8 @@ flow_drv_action_validate(struct rte_eth_dev *dev,
*
* @param dev
* Pointer to Ethernet device structure.
- * @param[in] action
- * Handle for the shared action to be destroyed.
+ * @param[in] handle
+ * Handle for the indirect action object to be destroyed.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -7247,11 +7247,11 @@ flow_drv_action_validate(struct rte_eth_dev *dev,
* @note: wrapper for driver action_create op callback.
*/
static int
-mlx5_shared_action_destroy(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
+mlx5_action_handle_destroy(struct rte_eth_dev *dev,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error)
{
- static const char err_msg[] = "shared action destruction unsupported";
+ static const char err_msg[] = "indirect action destruction unsupported";
struct rte_flow_attr attr = { .transfer = 0 };
const struct mlx5_flow_driver_ops *fops =
flow_get_drv_ops(flow_get_drv_type(dev, &attr));
@@ -7262,18 +7262,18 @@ mlx5_shared_action_destroy(struct rte_eth_dev *dev,
NULL, err_msg);
return -rte_errno;
}
- return fops->action_destroy(dev, action, error);
+ return fops->action_destroy(dev, handle, error);
}
/* Wrapper for driver action_destroy op callback */
static int
flow_drv_action_update(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
- const void *action_conf,
+ struct rte_flow_action_handle *handle,
+ const void *update,
const struct mlx5_flow_driver_ops *fops,
struct rte_flow_error *error)
{
- static const char err_msg[] = "shared action update unsupported";
+ static const char err_msg[] = "indirect action update unsupported";
if (!fops->action_update) {
DRV_LOG(ERR, "port %u %s.", dev->data->port_id, err_msg);
@@ -7281,18 +7281,18 @@ flow_drv_action_update(struct rte_eth_dev *dev,
NULL, err_msg);
return -rte_errno;
}
- return fops->action_update(dev, action, action_conf, error);
+ return fops->action_update(dev, handle, update, error);
}
/* Wrapper for driver action_destroy op callback */
static int
flow_drv_action_query(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *action,
+ const struct rte_flow_action_handle *handle,
void *data,
const struct mlx5_flow_driver_ops *fops,
struct rte_flow_error *error)
{
- static const char err_msg[] = "shared action query unsupported";
+ static const char err_msg[] = "indirect action query unsupported";
if (!fops->action_query) {
DRV_LOG(ERR, "port %u %s.", dev->data->port_id, err_msg);
@@ -7300,29 +7300,31 @@ flow_drv_action_query(struct rte_eth_dev *dev,
NULL, err_msg);
return -rte_errno;
}
- return fops->action_query(dev, action, data, error);
+ return fops->action_query(dev, handle, data, error);
}
/**
- * Create shared action for reuse in multiple flow rules.
+ * Create indirect action for reuse in multiple flow rules.
*
* @param dev
* Pointer to Ethernet device structure.
+ * @param conf
+ * Pointer to indirect action object configuration.
* @param[in] action
- * Action configuration for shared action creation.
+ * Action configuration for indirect action object creation.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
* @return
* A valid handle in case of success, NULL otherwise and rte_errno is set.
*/
-static struct rte_flow_shared_action *
-mlx5_shared_action_create(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+static struct rte_flow_action_handle *
+mlx5_action_handle_create(struct rte_eth_dev *dev,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error)
{
- static const char err_msg[] = "shared action creation unsupported";
+ static const char err_msg[] = "indirect action creation unsupported";
struct rte_flow_attr attr = { .transfer = 0 };
const struct mlx5_flow_driver_ops *fops =
flow_get_drv_ops(flow_get_drv_type(dev, &attr));
@@ -7339,19 +7341,20 @@ mlx5_shared_action_create(struct rte_eth_dev *dev,
}
/**
- * Updates inplace the shared action configuration pointed by *action* handle
- * with the configuration provided as *action* argument.
- * The update of the shared action configuration effects all flow rules reusing
- * the action via handle.
+ * Updates inplace the indirect action configuration pointed by *handle*
+ * with the configuration provided as *update* argument.
+ * The update of the indirect action configuration effects all flow rules
+ * reusing the action via handle.
*
* @param dev
* Pointer to Ethernet device structure.
- * @param[in] shared_action
- * Handle for the shared action to be updated.
- * @param[in] action
+ * @param[in] handle
+ * Handle for the indirect action to be updated.
+ * @param[in] update
* Action specification used to modify the action pointed by handle.
- * *action* should be of same type with the action pointed by the *action*
- * handle argument, otherwise considered as invalid.
+ * *update* could be of same type with the action pointed by the *handle*
+ * handle argument, or some other structures like a wrapper, depending on
+ * the indirect action type.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -7360,9 +7363,9 @@ mlx5_shared_action_create(struct rte_eth_dev *dev,
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
static int
-mlx5_shared_action_update(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *action,
+mlx5_action_handle_update(struct rte_eth_dev *dev,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error)
{
struct rte_flow_attr attr = { .transfer = 0 };
@@ -7370,26 +7373,27 @@ mlx5_shared_action_update(struct rte_eth_dev *dev,
flow_get_drv_ops(flow_get_drv_type(dev, &attr));
int ret;
- ret = flow_drv_action_validate(dev, NULL, action, fops, error);
+ ret = flow_drv_action_validate(dev, NULL,
+ (const struct rte_flow_action *)update, fops, error);
if (ret)
return ret;
- return flow_drv_action_update(dev, shared_action, action->conf, fops,
+ return flow_drv_action_update(dev, handle, update, fops,
error);
}
/**
- * Query the shared action by handle.
+ * Query the indirect action by handle.
*
* This function allows retrieving action-specific data such as counters.
* Data is gathered by special action which may be present/referenced in
* more than one flow rule definition.
*
- * \see RTE_FLOW_ACTION_TYPE_COUNT
+ * see @RTE_FLOW_ACTION_TYPE_COUNT
*
* @param dev
* Pointer to Ethernet device structure.
- * @param[in] action
- * Handle for the shared action to query.
+ * @param[in] handle
+ * Handle for the indirect action to query.
* @param[in, out] data
* Pointer to storage for the associated query data type.
* @param[out] error
@@ -7400,8 +7404,8 @@ mlx5_shared_action_update(struct rte_eth_dev *dev,
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
static int
-mlx5_shared_action_query(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *action,
+mlx5_action_handle_query(struct rte_eth_dev *dev,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error)
{
@@ -7409,11 +7413,11 @@ mlx5_shared_action_query(struct rte_eth_dev *dev,
const struct mlx5_flow_driver_ops *fops =
flow_get_drv_ops(flow_get_drv_type(dev, &attr));
- return flow_drv_action_query(dev, action, data, fops, error);
+ return flow_drv_action_query(dev, handle, data, fops, error);
}
/**
- * Destroy all shared actions.
+ * Destroy all indirect actions (shared RSS).
*
* @param dev
* Pointer to Ethernet device.
@@ -7422,7 +7426,7 @@ mlx5_shared_action_query(struct rte_eth_dev *dev,
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
int
-mlx5_shared_action_flush(struct rte_eth_dev *dev)
+mlx5_action_handle_flush(struct rte_eth_dev *dev)
{
struct rte_flow_error error;
struct mlx5_priv *priv = dev->data->dev_private;
@@ -7432,8 +7436,8 @@ mlx5_shared_action_flush(struct rte_eth_dev *dev)
ILIST_FOREACH(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],
priv->rss_shared_actions, idx, shared_rss, next) {
- ret |= mlx5_shared_action_destroy(dev,
- (struct rte_flow_shared_action *)(uintptr_t)idx, &error);
+ ret |= mlx5_action_handle_destroy(dev,
+ (struct rte_flow_action_handle *)(uintptr_t)idx, &error);
}
return ret;
}
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index ec673c29ab..56674eb0d2 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -39,11 +39,11 @@ enum mlx5_rte_flow_action_type {
MLX5_RTE_FLOW_ACTION_TYPE_AGE,
};
-#define MLX5_SHARED_ACTION_TYPE_OFFSET 30
+#define MLX5_INDIRECT_ACTION_TYPE_OFFSET 30
enum {
- MLX5_SHARED_ACTION_TYPE_RSS,
- MLX5_SHARED_ACTION_TYPE_AGE,
+ MLX5_INDIRECT_ACTION_TYPE_RSS,
+ MLX5_INDIRECT_ACTION_TYPE_AGE,
};
/* Matches on selected register. */
@@ -1152,7 +1152,7 @@ struct mlx5_shared_action_rss {
rte_spinlock_t action_rss_sl; /**< Shared RSS action spinlock. */
};
-struct rte_flow_shared_action {
+struct rte_flow_action_handle {
uint32_t id;
};
@@ -1233,26 +1233,26 @@ typedef int (*mlx5_flow_get_aged_flows_t)
struct rte_flow_error *error);
typedef int (*mlx5_flow_action_validate_t)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
-typedef struct rte_flow_shared_action *(*mlx5_flow_action_create_t)
+typedef struct rte_flow_action_handle *(*mlx5_flow_action_create_t)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
typedef int (*mlx5_flow_action_destroy_t)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
+ struct rte_flow_action_handle *action,
struct rte_flow_error *error);
typedef int (*mlx5_flow_action_update_t)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
- const void *action_conf,
+ struct rte_flow_action_handle *action,
+ const void *update,
struct rte_flow_error *error);
typedef int (*mlx5_flow_action_query_t)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *action,
+ const struct rte_flow_action_handle *action,
void *data,
struct rte_flow_error *error);
typedef int (*mlx5_flow_sync_domain_t)
@@ -1483,7 +1483,7 @@ int mlx5_flow_destroy_policer_rules(struct rte_eth_dev *dev,
int mlx5_flow_meter_flush(struct rte_eth_dev *dev,
struct rte_mtr_error *error);
int mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev);
-int mlx5_shared_action_flush(struct rte_eth_dev *dev);
+int mlx5_action_handle_flush(struct rte_eth_dev *dev);
void mlx5_release_tunnel_hub(struct mlx5_dev_ctx_shared *sh, uint16_t port_id);
int mlx5_alloc_tunnel_hub(struct mlx5_dev_ctx_shared *sh);
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index e65cc13bd6..d02e97b3f4 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -12870,7 +12870,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,
*/
static uint32_t
__flow_dv_action_rss_create(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action_rss *rss,
struct rte_flow_error *error)
{
@@ -12893,7 +12893,7 @@ __flow_dv_action_rss_create(struct rte_eth_dev *dev,
"cannot allocate resource memory");
goto error_rss_init;
}
- if (idx > (1u << MLX5_SHARED_ACTION_TYPE_OFFSET)) {
+ if (idx > (1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET)) {
rte_flow_error_set(error, E2BIG,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
"rss action number out of range");
@@ -13006,7 +13006,7 @@ __flow_dv_action_rss_release(struct rte_eth_dev *dev, uint32_t idx,
}
/**
- * Create shared action, lock free,
+ * Create indirect action, lock free,
* (mutex should be acquired by caller).
* Dispatcher for action type specific call.
*
@@ -13015,7 +13015,7 @@ __flow_dv_action_rss_release(struct rte_eth_dev *dev, uint32_t idx,
* @param[in] conf
* Shared action configuration.
* @param[in] action
- * Action specification used to create shared action.
+ * Action specification used to create indirect action.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -13024,9 +13024,9 @@ __flow_dv_action_rss_release(struct rte_eth_dev *dev, uint32_t idx,
* A valid shared action handle in case of success, NULL otherwise and
* rte_errno is set.
*/
-static struct rte_flow_shared_action *
+static struct rte_flow_action_handle *
flow_dv_action_create(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *err)
{
@@ -13036,13 +13036,13 @@ flow_dv_action_create(struct rte_eth_dev *dev,
switch (action->type) {
case RTE_FLOW_ACTION_TYPE_RSS:
ret = __flow_dv_action_rss_create(dev, conf, action->conf, err);
- idx = (MLX5_SHARED_ACTION_TYPE_RSS <<
- MLX5_SHARED_ACTION_TYPE_OFFSET) | ret;
+ idx = (MLX5_INDIRECT_ACTION_TYPE_RSS <<
+ MLX5_INDIRECT_ACTION_TYPE_OFFSET) | ret;
break;
case RTE_FLOW_ACTION_TYPE_AGE:
ret = flow_dv_translate_create_aso_age(dev, action->conf, err);
- idx = (MLX5_SHARED_ACTION_TYPE_AGE <<
- MLX5_SHARED_ACTION_TYPE_OFFSET) | ret;
+ idx = (MLX5_INDIRECT_ACTION_TYPE_AGE <<
+ MLX5_INDIRECT_ACTION_TYPE_OFFSET) | ret;
if (ret) {
struct mlx5_aso_age_action *aso_age =
flow_aso_age_get_by_idx(dev, ret);
@@ -13057,19 +13057,19 @@ flow_dv_action_create(struct rte_eth_dev *dev,
NULL, "action type not supported");
break;
}
- return ret ? (struct rte_flow_shared_action *)(uintptr_t)idx : NULL;
+ return ret ? (struct rte_flow_action_handle *)(uintptr_t)idx : NULL;
}
/**
- * Destroy the shared action.
+ * Destroy the indirect action.
* Release action related resources on the NIC and the memory.
* Lock free, (mutex should be acquired by caller).
* Dispatcher for action type specific call.
*
* @param[in] dev
* Pointer to the Ethernet device structure.
- * @param[in] action
- * The shared action object to be removed.
+ * @param[in] handle
+ * The indirect action object handle to be removed.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -13079,25 +13079,25 @@ flow_dv_action_create(struct rte_eth_dev *dev,
*/
static int
flow_dv_action_destroy(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error)
{
- uint32_t act_idx = (uint32_t)(uintptr_t)action;
- uint32_t type = act_idx >> MLX5_SHARED_ACTION_TYPE_OFFSET;
- uint32_t idx = act_idx & ((1u << MLX5_SHARED_ACTION_TYPE_OFFSET) - 1);
+ uint32_t act_idx = (uint32_t)(uintptr_t)handle;
+ uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
+ uint32_t idx = act_idx & ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
int ret;
switch (type) {
- case MLX5_SHARED_ACTION_TYPE_RSS:
+ case MLX5_INDIRECT_ACTION_TYPE_RSS:
return __flow_dv_action_rss_release(dev, idx, error);
- case MLX5_SHARED_ACTION_TYPE_AGE:
+ case MLX5_INDIRECT_ACTION_TYPE_AGE:
ret = flow_dv_aso_age_release(dev, idx);
if (ret)
/*
* In this case, the last flow has a reference will
* actually release the age action.
*/
- DRV_LOG(DEBUG, "Shared age action %" PRIu32 " was"
+ DRV_LOG(DEBUG, "Indirect age action %" PRIu32 " was"
" released with references %d.", idx, ret);
return 0;
default:
@@ -13180,12 +13180,13 @@ __flow_dv_action_rss_update(struct rte_eth_dev *dev, uint32_t idx,
*
* @param[in] dev
* Pointer to the Ethernet device structure.
- * @param[in] action
- * The shared action object to be updated.
- * @param[in] action_conf
- * Action specification used to modify *action*.
- * *action_conf* should be of type correlating with type of the *action*,
- * otherwise considered as invalid.
+ * @param[in] handle
+ * The indirect action object handle to be updated.
+ * @param[in] update
+ * Action specification used to modify the action pointed by *handle*.
+ * *update* could be of same type with the action pointed by the *handle*
+ * handle argument, or some other structures like a wrapper, depending on
+ * the indirect action type.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -13195,16 +13196,18 @@ __flow_dv_action_rss_update(struct rte_eth_dev *dev, uint32_t idx,
*/
static int
flow_dv_action_update(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *action,
- const void *action_conf,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *err)
{
- uint32_t act_idx = (uint32_t)(uintptr_t)action;
- uint32_t type = act_idx >> MLX5_SHARED_ACTION_TYPE_OFFSET;
- uint32_t idx = act_idx & ((1u << MLX5_SHARED_ACTION_TYPE_OFFSET) - 1);
+ uint32_t act_idx = (uint32_t)(uintptr_t)handle;
+ uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
+ uint32_t idx = act_idx & ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
+ const void *action_conf;
switch (type) {
- case MLX5_SHARED_ACTION_TYPE_RSS:
+ case MLX5_INDIRECT_ACTION_TYPE_RSS:
+ action_conf = ((const struct rte_flow_action *)update)->conf;
return __flow_dv_action_rss_update(dev, idx, action_conf, err);
default:
return rte_flow_error_set(err, ENOTSUP,
@@ -13216,17 +13219,17 @@ flow_dv_action_update(struct rte_eth_dev *dev,
static int
flow_dv_action_query(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *action, void *data,
+ const struct rte_flow_action_handle *handle, void *data,
struct rte_flow_error *error)
{
struct mlx5_age_param *age_param;
struct rte_flow_query_age *resp;
- uint32_t act_idx = (uint32_t)(uintptr_t)action;
- uint32_t type = act_idx >> MLX5_SHARED_ACTION_TYPE_OFFSET;
- uint32_t idx = act_idx & ((1u << MLX5_SHARED_ACTION_TYPE_OFFSET) - 1);
+ uint32_t act_idx = (uint32_t)(uintptr_t)handle;
+ uint32_t type = act_idx >> MLX5_INDIRECT_ACTION_TYPE_OFFSET;
+ uint32_t idx = act_idx & ((1u << MLX5_INDIRECT_ACTION_TYPE_OFFSET) - 1);
switch (type) {
- case MLX5_SHARED_ACTION_TYPE_AGE:
+ case MLX5_INDIRECT_ACTION_TYPE_AGE:
age_param = &flow_aso_age_get_by_idx(dev, idx)->age_params;
resp = data;
resp->aged = __atomic_load_n(&age_param->state,
@@ -14002,7 +14005,7 @@ flow_dv_counter_allocate(struct rte_eth_dev *dev)
}
/**
- * Validate shared action.
+ * Validate indirect action.
* Dispatcher for action type specific validation.
*
* @param[in] dev
@@ -14010,7 +14013,7 @@ flow_dv_counter_allocate(struct rte_eth_dev *dev)
* @param[in] conf
* Shared action configuration.
* @param[in] action
- * The shared action object to validate.
+ * The indirect action object to validate.
* @param[out] error
* Perform verbose error reporting if not NULL. Initialized in case of
* error only.
@@ -14020,7 +14023,7 @@ flow_dv_counter_allocate(struct rte_eth_dev *dev)
*/
static int
flow_dv_action_validate(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *err)
{
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 7241f00353..0d2610b7c4 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -180,12 +180,12 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = {
MK_FLOW_ACTION(MODIFY_FIELD,
sizeof(struct rte_flow_action_modify_field)),
/**
- * Shared action represented as handle of type
- * (struct rte_flow_shared action *) stored in conf field (see
+ * Indirect action represented as handle of type
+ * (struct rte_flow_action_handle *) stored in conf field (see
* struct rte_flow_action); no need for additional structure to * store
- * shared action handle.
+ * indirect action handle.
*/
- MK_FLOW_ACTION(SHARED, 0),
+ MK_FLOW_ACTION(INDIRECT, 0),
};
int
@@ -1068,53 +1068,53 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
NULL, rte_strerror(ENOTSUP));
}
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error)
{
- struct rte_flow_shared_action *shared_action;
+ struct rte_flow_action_handle *handle;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return NULL;
- if (unlikely(!ops->shared_action_create)) {
+ if (unlikely(!ops->action_handle_create)) {
rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
rte_strerror(ENOSYS));
return NULL;
}
- shared_action = ops->shared_action_create(&rte_eth_devices[port_id],
- conf, action, error);
- if (shared_action == NULL)
+ handle = ops->action_handle_create(&rte_eth_devices[port_id],
+ conf, action, error);
+ if (handle == NULL)
flow_err(port_id, -rte_errno, error);
- return shared_action;
+ return handle;
}
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
- struct rte_flow_error *error)
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ struct rte_flow_error *error)
{
int ret;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_destroy))
+ if (unlikely(!ops->action_handle_destroy))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_destroy(&rte_eth_devices[port_id], action,
- error);
+ ret = ops->action_handle_destroy(&rte_eth_devices[port_id],
+ handle, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error)
{
int ret;
@@ -1122,18 +1122,18 @@ rte_flow_shared_action_update(uint16_t port_id,
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_update))
+ if (unlikely(!ops->action_handle_update))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_update(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_update(&rte_eth_devices[port_id], handle,
update, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error)
{
@@ -1142,11 +1142,11 @@ rte_flow_shared_action_query(uint16_t port_id,
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_query))
+ if (unlikely(!ops->action_handle_query))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_query(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_query(&rte_eth_devices[port_id], handle,
data, error);
return flow_err(port_id, ret, error);
}
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 203c4cde9a..324d00abdc 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -1821,7 +1821,7 @@ enum rte_flow_action_type {
* Enables counters for this flow rule.
*
* These counters can be retrieved and reset through rte_flow_query() or
- * rte_flow_shared_action_query() if the action provided via handle,
+ * rte_flow_action_handle_query() if the action provided via handle,
* see struct rte_flow_query_count.
*
* See struct rte_flow_action_count.
@@ -2267,6 +2267,16 @@ enum rte_flow_action_type {
* See struct rte_flow_action_modify_field.
*/
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
+
+ /**
+ * Describe indirect action that could be used by a single flow rule
+ * or multiple flow rules.
+ *
+ * Allow flow rule(s) reference the same action by the indirect action
+ * handle (see struct rte_flow_action_handle), rules could be on the
+ * same port or across different ports.
+ */
+ RTE_FLOW_ACTION_TYPE_INDIRECT,
};
/**
@@ -2357,7 +2367,7 @@ struct rte_flow_query_age {
* ``struct rte_flow_query_count``.
*
* @deprecated Shared attribute is deprecated, use generic
- * RTE_FLOW_ACTION_TYPE_SHARED action.
+ * RTE_FLOW_ACTION_TYPE_INDIRECT action.
*
* The shared flag indicates whether the counter is unique to the flow rule the
* action is specified with, or whether it is a shared counter.
@@ -2847,17 +2857,23 @@ struct rte_flow_action_set_dscp {
};
/**
- * RTE_FLOW_ACTION_TYPE_SHARED
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_INDIRECT
*
- * Opaque type returned after successfully creating a shared action.
+ * Opaque type returned after successfully creating an indirect action object.
+ * The definition of the object handle will be different per driver or
+ * per immediate action type.
*
- * This handle can be used to manage and query the related action:
- * - share it across multiple flow rules
- * - update action configuration
- * - query action data
- * - destroy action
+ * This handle can be used to manage and query the related immediate action:
+ * - referenced in single flow rule or across multiple flow rules
+ * over multiple ports
+ * - update action object configuration
+ * - query action object data
+ * - destroy action object
*/
-struct rte_flow_shared_action;
+struct rte_flow_action_handle;
/**
* Field IDs for MODIFY_FIELD action.
@@ -3631,25 +3647,22 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error);
/**
- * Specify shared action configuration
+ * Specify indirect action object configuration
*/
-struct rte_flow_shared_action_conf {
+struct rte_flow_indir_action_conf {
/**
- * Flow direction for shared action configuration.
+ * Flow direction for the indirect action configuration.
*
- * Shared action should be valid at least for one flow direction,
+ * Action should be valid at least for one flow direction,
* otherwise it is invalid for both ingress and egress rules.
*/
uint32_t ingress:1;
/**< Action valid for rules applied to ingress traffic. */
uint32_t egress:1;
/**< Action valid for rules applied to egress traffic. */
-
/**
* When set to 1, indicates that the action is valid for
* transfer traffic; otherwise, for non-transfer traffic.
- *
- * See struct rte_flow_attr.
*/
uint32_t transfer:1;
};
@@ -3658,16 +3671,17 @@ struct rte_flow_shared_action_conf {
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Create shared action for reuse in multiple flow rules.
- * The created shared action has single state and configuration
- * across all flow rules using it.
+ * Create an indirect action object that can be used by flow create, and
+ * could also be shared by different flows.
+ * The created object handle has single state and configuration
+ * across all the flow rules using it.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] conf
- * Shared action configuration.
+ * Action configuration for the indirect action object creation.
* @param[in] action
- * Action configuration for shared action creation.
+ * Specific configuration of the indirect action object.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3681,9 +3695,9 @@ struct rte_flow_shared_action_conf {
* - (ENOTSUP) if *action* valid but unsupported.
*/
__rte_experimental
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
@@ -3691,12 +3705,12 @@ rte_flow_shared_action_create(uint16_t port_id,
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Destroy the shared action by handle.
+ * Destroy indirect action by handle.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be destroyed.
+ * @param[in] handle
+ * Handle for the indirect action object to be destroyed.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3711,27 +3725,30 @@ rte_flow_shared_action_create(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Update in-place the shared action configuration pointed by *action* handle
- * with the configuration provided as *update* argument.
- * The update of the shared action configuration effects all flow rules reusing
- * the action via handle.
+ * Update in-place the action configuration and / or state pointed
+ * by action *handle* with the configuration provided as *update* argument.
+ * The update of the action configuration effects all flow rules reusing
+ * the action via *handle*.
+ * The update general pointer provides the ability of partial updating.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be updated.
+ * @param[in] handle
+ * Handle for the indirect action object to be updated.
* @param[in] update
- * Action specification used to modify the action pointed by handle.
- * *update* should be of same type with the action pointed by the *action*
- * handle argument, otherwise considered as invalid.
+ * Update profile specification used to modify the action pointed by handle.
+ * *update* could be with the same type of the immediate action corresponding
+ * to the *handle* argument when creating, or a wrapper structure includes
+ * action configuration to be updated and bit fields to indicate the member
+ * of fields inside the action to update.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3742,32 +3759,32 @@ rte_flow_shared_action_destroy(uint16_t port_id,
* - (-EIO) if underlying device is removed.
* - (-EINVAL) if *update* invalid.
* - (-ENOTSUP) if *update* valid but unsupported.
- * - (-ENOENT) if action pointed by *ctx* was not found.
+ * - (-ENOENT) if indirect action object pointed by *handle* was not found.
* rte_errno is also set.
*/
__rte_experimental
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Query the shared action by handle.
+ * Query the direct action by corresponding indirect action object handle.
*
* Retrieve action-specific data such as counters.
* Data is gathered by special action which may be present/referenced in
* more than one flow rule definition.
*
- * \see RTE_FLOW_ACTION_TYPE_COUNT
+ * @see RTE_FLOW_ACTION_TYPE_COUNT
*
* @param port_id
* Port identifier of Ethernet device.
- * @param[in] action
- * Handle for the shared action to query.
+ * @param[in] handle
+ * Handle for the action object to query.
* @param[in, out] data
* Pointer to storage for the associated query data type.
* @param[out] error
@@ -3779,10 +3796,9 @@ rte_flow_shared_action_update(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
- void *data,
- struct rte_flow_error *error);
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
+ void *data, struct rte_flow_error *error);
/* Tunnel has a type and the key information. */
struct rte_flow_tunnel {
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index 6ae1f8c264..46f62c2ec2 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -84,27 +84,27 @@ struct rte_flow_ops {
void **context,
uint32_t nb_contexts,
struct rte_flow_error *err);
- /** See rte_flow_shared_action_create() */
- struct rte_flow_shared_action *(*shared_action_create)
+ /** See rte_flow_action_handle_create() */
+ struct rte_flow_action_handle *(*action_handle_create)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_destroy() */
- int (*shared_action_destroy)
+ /** See rte_flow_action_handle_destroy() */
+ int (*action_handle_destroy)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_update() */
- int (*shared_action_update)
+ /** See rte_flow_action_handle_update() */
+ int (*action_handle_update)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *update,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_query() */
- int (*shared_action_query)
+ /** See rte_flow_action_handle_query() */
+ int (*action_handle_query)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *shared_action,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error);
/** See rte_flow_tunnel_decap_set() */
diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map
index 93ad388e96..4eb561a89a 100644
--- a/lib/librte_ethdev/version.map
+++ b/lib/librte_ethdev/version.map
@@ -231,10 +231,6 @@ EXPERIMENTAL {
rte_eth_fec_get_capability;
rte_eth_fec_get;
rte_eth_fec_set;
- rte_flow_shared_action_create;
- rte_flow_shared_action_destroy;
- rte_flow_shared_action_query;
- rte_flow_shared_action_update;
rte_flow_tunnel_decap_set;
rte_flow_tunnel_match;
rte_flow_get_restore_info;
@@ -246,6 +242,10 @@ EXPERIMENTAL {
# added in 21.05
rte_eth_representor_info_get;
+ rte_flow_action_handle_create;
+ rte_flow_action_handle_destroy;
+ rte_flow_action_handle_update;
+ rte_flow_action_handle_query;
};
INTERNAL {
--
2.19.0.windows.1
^ permalink raw reply [relevance 1%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-15 13:55 0% ` Andrew Rybchenko
@ 2021-04-15 14:10 0% ` Thomas Monjalon
2021-04-15 16:02 0% ` Andrew Rybchenko
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-15 14:10 UTC (permalink / raw)
To: Bing Zhao, Andrew Rybchenko
Cc: orika, ferruh.yigit, matan, viacheslavo, dev, ajit.khaparde,
getelson, andreyv
15/04/2021 15:55, Andrew Rybchenko:
> On 4/10/21 5:03 PM, Bing Zhao wrote:
> > Right now, rte_flow_shared_action_* APIs are used for some shared
> > actions, like RSS, count. The shared action should be created before
> > using it inside a flow. These shared actions sometimes are not
> > really shared but just some indirect actions decoupled from a flow.
> >
> > The new functions rte_flow_action_handle_* are added to replace
> > the current shared functions rte_flow_shared_action_*.
> >
> > There are two types of flow actions:
> > 1. the direct (normal) actions that could be created and stored
> > within a flow rule. Such action is tied to its flow rule and
> > cannot be reused.
> > 2. the indirect action, in the past, named shared_action. It is
> > created from a direct actioni, like count or rss, and then used
> > in the flow rules with an object handle. The PMD will take care
> > of the retrieve from indirect action to the direct action
> > when it is referenced.
> >
> > The indirect action is accessed (update / query) w/o any flow rule,
> > just via the action object handle. For example, when querying or
> > resetting a counter, it could be done out of any flow using this
> > counter, but only the handle of the counter action object is
> > required.
> > The indirect action object could be shared by different flows or
> > used by a single flow, depending on the direct action type and
> > the real-life requirements.
> > The handle of an indirect action object is opaque and defined in
> > each driver and possibly different per direct action type.
> >
> > The old name "shared" is improper in a sense and should be replaced.
> >
> > All the command lines in testpmd application with "shared_action*"
> > are replaced with "indirect_action*".
> >
> > The parameter of "update" interface is also changed. A general
> > pointer will replace the rte_flow_action struct pointer due to the
> > facts:
> > 1. Some action may not support fields updating. In the example of a
> > counter, the only "update" supported should be the reset. So
> > passing a rte_flow_action struct pointer is meaningless and
> > there is even no such corresponding action struct. What's more,
> > if more than one operations should be supported, for some other
> > action, such pointer parameter may not meet the need.
> > 2. Some action may need conditional or partial update, the current
> > parameter will not provide the ability to indicate which part(s)
> > to update.
> > For different types of indirect action objects, the pointer could
> > either be the same of rte_flow_action* struct - in order not to
> > break the current driver implementation, or some wrapper
> > structures with bits as masks to indicate which part to be
> > updated, depending on real needs of the corresponding direct
> > action. For different direct actions, the structures of indirect
> > action objects updating will be different.
> >
> > All the underlayer PMD callbacks will be moved to these new APIs.
> >
> > The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> > break the ABI. All the implementations are changed by using
> > RTE_FLOW_ACTION_TYPE_INDIRECT.
> >
> > Signed-off-by: Bing Zhao <bingz@nvidia.com>
>
> Just for the record. I still dislike renaming since "shared" highlights
> purpose (what is definitely better), but "indirect" is just a technical
> detail on how it is done.
The difference is that indirect action is not only for sharing.
It allows manipulating an action as an object.
Action object is inserted in flow rules through the indirect action.
Does it make it clearer?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-10 14:03 4% ` [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs Bing Zhao
2021-04-12 19:42 0% ` Ferruh Yigit
2021-04-13 12:36 0% ` Andrey Vesnovaty
@ 2021-04-15 13:55 0% ` Andrew Rybchenko
2021-04-15 14:10 0% ` Thomas Monjalon
2 siblings, 1 reply; 200+ results
From: Andrew Rybchenko @ 2021-04-15 13:55 UTC (permalink / raw)
To: Bing Zhao, orika, thomas, ferruh.yigit, matan, viacheslavo
Cc: dev, ajit.khaparde, getelson, andreyv
On 4/10/21 5:03 PM, Bing Zhao wrote:
> Right now, rte_flow_shared_action_* APIs are used for some shared
> actions, like RSS, count. The shared action should be created before
> using it inside a flow. These shared actions sometimes are not
> really shared but just some indirect actions decoupled from a flow.
>
> The new functions rte_flow_action_handle_* are added to replace
> the current shared functions rte_flow_shared_action_*.
>
> There are two types of flow actions:
> 1. the direct (normal) actions that could be created and stored
> within a flow rule. Such action is tied to its flow rule and
> cannot be reused.
> 2. the indirect action, in the past, named shared_action. It is
> created from a direct actioni, like count or rss, and then used
> in the flow rules with an object handle. The PMD will take care
> of the retrieve from indirect action to the direct action
> when it is referenced.
>
> The indirect action is accessed (update / query) w/o any flow rule,
> just via the action object handle. For example, when querying or
> resetting a counter, it could be done out of any flow using this
> counter, but only the handle of the counter action object is
> required.
> The indirect action object could be shared by different flows or
> used by a single flow, depending on the direct action type and
> the real-life requirements.
> The handle of an indirect action object is opaque and defined in
> each driver and possibly different per direct action type.
>
> The old name "shared" is improper in a sense and should be replaced.
>
> All the command lines in testpmd application with "shared_action*"
> are replaced with "indirect_action*".
>
> The parameter of "update" interface is also changed. A general
> pointer will replace the rte_flow_action struct pointer due to the
> facts:
> 1. Some action may not support fields updating. In the example of a
> counter, the only "update" supported should be the reset. So
> passing a rte_flow_action struct pointer is meaningless and
> there is even no such corresponding action struct. What's more,
> if more than one operations should be supported, for some other
> action, such pointer parameter may not meet the need.
> 2. Some action may need conditional or partial update, the current
> parameter will not provide the ability to indicate which part(s)
> to update.
> For different types of indirect action objects, the pointer could
> either be the same of rte_flow_action* struct - in order not to
> break the current driver implementation, or some wrapper
> structures with bits as masks to indicate which part to be
> updated, depending on real needs of the corresponding direct
> action. For different direct actions, the structures of indirect
> action objects updating will be different.
>
> All the underlayer PMD callbacks will be moved to these new APIs.
>
> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break the ABI. All the implementations are changed by using
> RTE_FLOW_ACTION_TYPE_INDIRECT.
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
Just for the record. I still dislike renaming since "shared" highlights
purpose (what is definitely better), but "indirect" is just a technical
detail on how it is done.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH V3] ethdev: add queue state when retrieve queue information
2021-04-15 12:45 0% ` Ferruh Yigit
@ 2021-04-15 13:34 3% ` Thomas Monjalon
2021-04-16 0:58 0% ` [dpdk-dev] [Linuxarm] " oulijun
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-15 13:34 UTC (permalink / raw)
To: Lijun Ou, Ferruh Yigit
Cc: Ray Kinsella, David Marchand, dev, linuxarm, Andrew Rybchenko
15/04/2021 14:45, Ferruh Yigit:
> On 4/15/2021 1:36 PM, Thomas Monjalon wrote:
> > 15/04/2021 14:33, Ferruh Yigit:
> >> On 4/15/2021 3:40 AM, Lijun Ou wrote:
> >>> Currently, upper-layer application could get queue state only
> >>> through pointers such as dev->data->tx_queue_state[queue_id],
> >>> this is not the recommended way to access it. So this patch
> >>> add get queue state when call rte_eth_rx_queue_info_get and
> >>> rte_eth_tx_queue_info_get API.
> >>>
> >>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >>> it could be ABI compatible.
> >>>
> >>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >>
> >> Looks good to me, but it is causing an ABI error as we already discussed before
> >> as that is false positive.
> >>
> >> Ray, David,
> >>
> >> Should we add any exception to libabigail.abignore for this?
> >
> > We do not tolerate any ABI warning.
> > If we are sure the ABI change is false positive,
> > it must be suppressed in libabigail.abignore in the same patch.
>
> A new field is added to public structs, but struct size or the location of the
> existing fields are not changing (struct is cache aligned).
>
> Can you please support how this can be added to 'libabigail.abignore'?
This is how you can check the struct sizes (in 32 and 64-bit builds):
for lib in ethdev ; do for struct in rte_eth_{r,t}xq_info ; do for build in dpdk-build/build-{32b,x86-generic} ; do basename $build ; pahole -sC $struct $build/lib/librte_$lib.a ; done ; done ; done
I confirm the additions are not changing the ABI.
And because they are provided as output infos,
there is no issue like using potentially unitialized holes.
It must be explicited in libabigail with this syntax:
https://sourceware.org/libabigail/manual/libabigail-concepts.html#suppress-type
; Ignore fields inserted in alignment hole of rte_eth_rxq_info
[suppress_type]
name = rte_eth_rxq_info
has_data_member_inserted_at = offset_after(scattered_rx)
; Ignore fields inserted in cacheline boundary of rte_eth_txq_info
[suppress_type]
name = rte_eth_txq_info
has_data_member_inserted_between = {offset_after(nb_desc), end}
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH V3] ethdev: add queue state when retrieve queue information
2021-04-15 12:36 4% ` Thomas Monjalon
@ 2021-04-15 12:45 0% ` Ferruh Yigit
2021-04-15 13:34 3% ` Thomas Monjalon
2021-04-16 0:58 0% ` [dpdk-dev] [Linuxarm] " oulijun
0 siblings, 2 replies; 200+ results
From: Ferruh Yigit @ 2021-04-15 12:45 UTC (permalink / raw)
To: Thomas Monjalon
Cc: Lijun Ou, Ray Kinsella, David Marchand, dev, linuxarm, Andrew Rybchenko
On 4/15/2021 1:36 PM, Thomas Monjalon wrote:
> 15/04/2021 14:33, Ferruh Yigit:
>> On 4/15/2021 3:40 AM, Lijun Ou wrote:
>>> Currently, upper-layer application could get queue state only
>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>> this is not the recommended way to access it. So this patch
>>> add get queue state when call rte_eth_rx_queue_info_get and
>>> rte_eth_tx_queue_info_get API.
>>>
>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>> it could be ABI compatible.
>>>
>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>
>> Looks good to me, but it is causing an ABI error as we already discussed before
>> as that is false positive.
>>
>>
>> Ray, David,
>>
>> Should we add any exception to libabigail.abignore for this?
>
> We do not tolerate any ABI warning.
> If we are sure the ABI change is false positive,
> it must be suppressed in libabigail.abignore in the same patch.
>
A new field is added to public structs, but struct size or the location of the
existing fields are not changing (struct is cache aligned).
Can you please support how this can be added to 'libabigail.abignore'?
Lijun can you please send a new version with 'libabigail.abignore' update?
Thanks,
ferruh
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH V3] ethdev: add queue state when retrieve queue information
2021-04-15 12:33 3% ` Ferruh Yigit
@ 2021-04-15 12:36 4% ` Thomas Monjalon
2021-04-15 12:45 0% ` Ferruh Yigit
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-15 12:36 UTC (permalink / raw)
To: Ferruh Yigit
Cc: Lijun Ou, Ray Kinsella, David Marchand, dev, linuxarm, Andrew Rybchenko
15/04/2021 14:33, Ferruh Yigit:
> On 4/15/2021 3:40 AM, Lijun Ou wrote:
> > Currently, upper-layer application could get queue state only
> > through pointers such as dev->data->tx_queue_state[queue_id],
> > this is not the recommended way to access it. So this patch
> > add get queue state when call rte_eth_rx_queue_info_get and
> > rte_eth_tx_queue_info_get API.
> >
> > Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> > remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> > it could be ABI compatible.
> >
> > Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> > Signed-off-by: Lijun Ou <oulijun@huawei.com>
>
> Looks good to me, but it is causing an ABI error as we already discussed before
> as that is false positive.
>
>
> Ray, David,
>
> Should we add any exception to libabigail.abignore for this?
We do not tolerate any ABI warning.
If we are sure the ABI change is false positive,
it must be suppressed in libabigail.abignore in the same patch.
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH V3] ethdev: add queue state when retrieve queue information
2021-04-15 2:40 8% ` [dpdk-dev] [PATCH V3] " Lijun Ou
@ 2021-04-15 12:33 3% ` Ferruh Yigit
2021-04-15 12:36 4% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2021-04-15 12:33 UTC (permalink / raw)
To: Lijun Ou, thomas, Ray Kinsella, David Marchand
Cc: dev, linuxarm, Andrew Rybchenko
On 4/15/2021 3:40 AM, Lijun Ou wrote:
> Currently, upper-layer application could get queue state only
> through pointers such as dev->data->tx_queue_state[queue_id],
> this is not the recommended way to access it. So this patch
> add get queue state when call rte_eth_rx_queue_info_get and
> rte_eth_tx_queue_info_get API.
>
> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> it could be ABI compatible.
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
Looks good to me, but it is causing an ABI error as we already discussed before
as that is false positive.
Ray, David,
Should we add any exception to libabigail.abignore for this?
^ permalink raw reply [relevance 3%]
* [dpdk-dev] DPDK Release Status Meeting 15/04/2021
@ 2021-04-15 11:34 3% Ferruh Yigit
0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2021-04-15 11:34 UTC (permalink / raw)
To: dev; +Cc: Thomas Monjalon
Release status meeting minutes {Date}
=====================================
:Date: 15 April 2021
:toc:
.Agenda:
* Release Dates
* Subtrees
* LTS
* Opens
.Participants:
* Arm
* Broadcom
* Canonical
* Debian/Microsoft
* Intel
* Marvell
* Nvidia
* OKTET Labs
* Red Hat
Release Dates
-------------
* `v21.05` dates
- -rc1 pushed to *Wednesday, 21 April*
- -rc2: Wednesday, 5 May
- Release: Friday, 14 May
* 1-5 May is Labor Day holiday in PRC.
Subtrees
--------
* main
- ioat driver updates, may be postponed to -rc2
- meson update
** Better to have in this release, but not urgent, can be postponed
- Arm meson updates
** Bruce ack'ed the common code, Arm specific part needs ack
** There are config file changes, Hisilicon and CNXK depends on it
- Reported a vhost TSO problem, work is going on
- mbuf eCPRI will be reviewed, there is no enough review
- Merged most of Thomas' series
- Predictable RSS feature
** Comment on missing documentation and example
*** Working on the documentation update
*** Too short time for the example, it can be done gradually in next
release
- FIB lookup method to l3fwd, can be merged today
- Some fix patch can be merged after -rc1
* next-net
- Not big backlog, ~50 patches, but there are multiple ethdev ones
** 4 ethdev flow API changes, reviews progressed but not finalised yet
*** Relying Ori's review for them
*** conntrack one has no review, it will be postponed if there is no
review before -rc1
** 1 ethdev meter API change, Cristian reviewed, new version expected
** 2 other ethdev changes, queue state and sanity checks ones
*** New version received for queue state one, can be merged soon
**** There is a testpmd patch depends on this
*** Andrew reviewed sanity checks one, minor change request
**** It does not look critical for the release but prefer to get it
if it is ready
- new PMD `ngbe` form Wangxun, new version requested
- pulled from vendor trees yesterday
- There are testpmd multi-process and Windows enablement patches
** For multi-process one waiting for new version because of minor issues
*** There is a long term testing concern, should DTS updated to verify
testpmd multi-process support?
** Windows enablement patch can be postponed to next release
* next-crypto
- 2/3 patches from mlx, will apply soon
- Ciara's patch can be merged later
- "raw data path dequeue API" by Fan waiting for reply
- Two PMDs for -rc2
** mlx5 crypto PMD
** NXP baseband PMD
- "lookaside IPsec UDP encapsulation and transport mode" patch
** Can Konstantin ack again, if so can go into -rc1
* next-eventdev
- Intel dlb2, reviews going on
** Rename to dlb2 -> dlb is ABI break, needs approval
*** Also this may cause issue on LTS, dlb in LTS will be different than
dlb in latest release
*** May hold rename until next LTS
- Marvell CNXK postponed to -rc2
** Because of common code dependency
- "eventdev crypto adapter" support, Abhinandan is reviewing
** There is an ABI discussion going on
* next-virtio
- There is a hotfix for -rc1, a trivial issue
** Will go in directly to next-net
- Remaining patches will be considered for -rc2
- A vdpa patch rejected while pulling to main repo, since it breaks the build
for Alpine Linux
** Need to communicate with Matan for it
* next-net-brcm
- 2/3 fixes to send, but they are not critical, may wait -rc2
* next-net-intel
- Progressing
* next-net-mlx
- Progressing
* next-net-mrvl
- CNXK net driver review is going on, may go into -rc2
LTS
---
* `v19.11.8-rc1` is out, please test
- http://inbox.dpdk.org/dev/20210409074357.2499008-1-christian.ehrhardt@canonical.com/
- The -rc is specifically to address meson build error
* `v20.11` (next version is `v20.11.2`)
- Not much update at this stage
Opens
-----
* Alpine Linux and musl libc should be tested by maintainers
- We should add this to the CI but it is not there yet
* Latest DPDK fails to build on Fedora 34 (which will be released soon)
- Kevin submitted Bugzilla defects for it
- Possibly because of new gcc version
- It is good idea to test with Fedora Rawhide
* fast test suit is failing for PPC without root access
- There is a patch to fix it but there is no review
* There is a new security team member, working on security issues can continue
after he ramped up
* Regular coverity scans are going on, and there are some coverity fixes
already hit the mail list, please review/merge them
.DPDK Release Status Meetings
*****
The DPDK Release Status Meeting is intended for DPDK Committers to discuss the
status of the master tree and sub-trees, and for project managers to track
progress or milestone dates.
The meeting occurs on every Thursdays at 8:30 UTC. on https://meet.jit.si/DPDK
If you wish to attend just send an email to
"John McNamara <john.mcnamara@intel.com>" for the invite.
*****
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH] doc: announce modification in eventdev structure
@ 2021-04-15 9:08 3% gakhil
0 siblings, 0 replies; 200+ results
From: gakhil @ 2021-04-15 9:08 UTC (permalink / raw)
To: jerinj, thomas, dev, mdr, david.marchand
Cc: abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
anoobj, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, pbhagavatula, harry.van.haaren, sthotton,
Akhil Goyal
From: Akhil Goyal <gakhil@marvell.com>
A new field ``ca_enqueue`` is added in ``rte_eventdev``
in the end to maintain ABI. It needs to be moved above
in the structure to align with other enqueue callbacks.
Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
doc/guides/rel_notes/deprecation.rst | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index 2afc84c39..a973de4a9 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -127,6 +127,10 @@ Deprecation Notices
values to the function ``rte_event_eth_rx_adapter_queue_add`` using
the structure ``rte_event_eth_rx_adapter_queue_add``.
+* eventdev: The function pointer ``ca_enqueue`` in structure ``rte_eventdev``
+ will be moved after ``txa_enqueue`` so that all enqueue/dequeue
+ function pointers are adjacent to each other.
+
* sched: To allow more traffic classes, flexible mapping of pipe queues to
traffic classes, and subport level configuration of pipes and queues
changes will be made to macros, data structures and API functions defined
--
2.25.1
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [EXT] [PATCH v5] cryptodev: support multiple cipher data-units
2021-04-14 20:21 10% ` [dpdk-dev] [PATCH v5] " Thomas Monjalon
@ 2021-04-15 8:35 0% ` Akhil Goyal
2021-04-15 19:01 3% ` Akhil Goyal
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-15 8:35 UTC (permalink / raw)
To: Thomas Monjalon, dev; +Cc: matan, Ray Kinsella, Neil Horman, Declan Doherty
> From: Matan Azrad <matan@nvidia.com>
>
> In cryptography, a block cipher is a deterministic algorithm operating
> on fixed-length groups of bits, called blocks.
>
> A block cipher consists of two paired algorithms, one for encryption
> and the other for decryption. Both algorithms accept two inputs:
> an input block of size n bits and a key of size k bits; and both yield
> an n-bit output block. The decryption algorithm is defined to be the
> inverse function of the encryption.
>
> For AES standard the block size is 16 bytes.
> For AES in XTS mode, the data to be encrypted\decrypted does not have to
> be multiple of 16B size, the unit of data is called data-unit.
> The data-unit size can be any size in range [16B, 2^24B], so, in this
> case, a data stream is divided into N amount of equal data-units and
> must be encrypted\decrypted in the same data-unit resolution.
>
> For ABI compatibility reason, the size is limited to 64K (16-bit field).
> The new field dataunit_len is inserted in a struct padding hole,
> which is only 2 bytes long in 32-bit build.
> It could be moved and extended later during an ABI-breakage window.
>
> The current cryptodev API doesn't allow the user to select a specific
> data-unit length supported by the devices.
> In addition, there is no definition how the IV is detected per data-unit
> when single operation includes more than one data-unit.
>
> That causes applications to use single operation per data-unit even though
> all the data is continuous in memory what reduces datapath performance.
>
> Add a new feature flag to support multiple data-unit sizes, called
> RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
> Add a new field in cipher capability, called dataunit_set,
> where the devices can report the range of the supported data-unit sizes.
> Add a new cipher transformation field, called dataunit_len, where the user
> can select the data-unit length for all the operations.
>
> All the new fields do not change the size of their structures,
> by filling some struct padding holes.
> They are added as exceptions in the ABI check file libabigail.abignore.
>
> Using a bitmap to report the supported data-unit sizes capability allows
> the devices to report a range simply as same as the user to read it
> simply. also, thus sizes are usually common and probably will be shared
> among different devices.
>
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
Acked-by: Akhil Goyal <gakhil@marvell.com>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v10 1/4] devtools: add exception for reserved fields
2021-04-15 7:26 0% ` David Marchand
@ 2021-04-15 8:25 0% ` Bruce Richardson
0 siblings, 0 replies; 200+ results
From: Bruce Richardson @ 2021-04-15 8:25 UTC (permalink / raw)
To: David Marchand
Cc: Akhil Goyal, Jerin Jacob Kollanukkaran, Thomas Monjalon, dev,
Ray Kinsella, Abhinandan Gujjar, Hemant Agrawal, Nipun Gupta,
Sachin Saxena, Anoob Joseph, Matan Azrad, Fan Zhang,
Gagandeep Singh, Erik Gabriel Carrillo, Jayatheerthan, Jay,
Pavan Nikhilesh Bhagavatula, Van Haaren Harry, Shijith Thotton,
Dodji Seketeli
On Thu, Apr 15, 2021 at 09:26:38AM +0200, David Marchand wrote:
> On Thu, Apr 15, 2021 at 7:33 AM Akhil Goyal <gakhil@marvell.com> wrote:
> >
> > Hi David,
> > > > Certain structures are added with reserved fields
> > > > to address any future enhancements to retain ABI
> > > > compatibility.
> > > > However, ABI script will still report error as it
> > > > is not aware of reserved fields. Hence, adding a
> > > > generic exception for reserved fields.
> > > >
> > > > Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> > > > ---
> > > > devtools/libabigail.abignore | 6 +++++-
> > > > 1 file changed, 5 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> > > > index 6c0b38984..654755314 100644
> > > > --- a/devtools/libabigail.abignore
> > > > +++ b/devtools/libabigail.abignore
> > > > @@ -19,4 +19,8 @@
> > > > ; Ignore fields inserted in cacheline boundary of rte_cryptodev
> > > > [suppress_type]
> > > > name = rte_cryptodev
> > > > - has_data_member_inserted_between = {offset_after(attached), end}
> > > > \ No newline at end of file
> > > > + has_data_member_inserted_between = {offset_after(attached), end}
> > > > +
> > > > +; Ignore changes in reserved fields
> > > > +[suppress_variable]
> > > > + name_regexp = reserved
> > > Mm, this rule is a bit scary, as it matches anything with "reserved" in it.
> >
> > Why do you feel it is scary? Reserved is something which may change at any time
> > Just like experimental. Hence creating a generic exception rule for it make sense
> > And it is done intentionally in this patch.
>
> The reserved regexp on the name of a variable / struct field is too lax.
> Anything could be named with reserved in it.
> If we have clear patterns, they must be preferred, like (untested)
> name_regexp = ^reserved_(64|ptr)s$
>
+1 to have a clear name. I would suggest using a "__reserved" prefix, since
no real field name should ever start with that prefix.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
2021-04-15 7:48 0% ` Thomas Monjalon
@ 2021-04-15 7:56 0% ` Jerin Jacob
0 siblings, 0 replies; 200+ results
From: Jerin Jacob @ 2021-04-15 7:56 UTC (permalink / raw)
To: Thomas Monjalon, techboard
Cc: Timothy McDaniel, Jerin Jacob, dpdk-dev, Erik Gabriel Carrillo,
Gage Eads, Van Haaren, Harry, David Marchand
On Thu, Apr 15, 2021 at 1:18 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 15/04/2021 07:47, Jerin Jacob:
> > On Thu, Apr 15, 2021 at 2:03 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > > 14/04/2021 21:44, Jerin Jacob:
> > > > On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> > > > <timothy.mcdaniel@intel.com> wrote:
> > > > >
> > > > > Updated eventdev device name to be dlb_event instead of
> > > > > dlb2_event. The new name will be used for all versions
> > > > > of the DLB hardware. This change required corresponding changes
> > > > > to the directory name that contains the PMD, as well
> > > > > as the documentation files, build infrastructure, and PMD
> > > > > specific APIs.
> > > > >
> > > > > Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
> > > > > --- a/doc/guides/rel_notes/release_21_05.rst
> > > > > +++ b/doc/guides/rel_notes/release_21_05.rst
> > > > > +* **Updated DLB driver.**
> > > > > +
> > > > > + * Added support for v2.5 hardware.
> > > > > + * Renamed DLB2 to DLB, which supports all HW versions v2.0 and v2.5.
> > > >
> > > > @Thomas Monjalon , Do we need to update the "Removed Items" section?
> > >
> > > I did not follow the exact change.
> > > Is it changing the driver library name?
> > > If yes, it is one more ABI issue.
> >
> > It is yes. It needs to be fixed in abiignore.
> >
> > My original question was, Since we are renaming dlb2->dlb one,
> > driver/dlb2 directory will not be present after this change,
> > Do we need to update the "Removed Items" section in release notes,
> > Saying dlb2 driver removed?
>
> Yes we need, but it should have been discussed in techboard first.
+ Techboard
Cc: @McDaniel, Timothy
OK. I will hold this patch and wait for the techboard's approval.
>
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
2021-04-15 5:47 0% ` Jerin Jacob
@ 2021-04-15 7:48 0% ` Thomas Monjalon
2021-04-15 7:56 0% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-15 7:48 UTC (permalink / raw)
To: Jerin Jacob
Cc: Timothy McDaniel, Jerin Jacob, dpdk-dev, Erik Gabriel Carrillo,
Gage Eads, Van Haaren, Harry, David Marchand
15/04/2021 07:47, Jerin Jacob:
> On Thu, Apr 15, 2021 at 2:03 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > 14/04/2021 21:44, Jerin Jacob:
> > > On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> > > <timothy.mcdaniel@intel.com> wrote:
> > > >
> > > > Updated eventdev device name to be dlb_event instead of
> > > > dlb2_event. The new name will be used for all versions
> > > > of the DLB hardware. This change required corresponding changes
> > > > to the directory name that contains the PMD, as well
> > > > as the documentation files, build infrastructure, and PMD
> > > > specific APIs.
> > > >
> > > > Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
> > > > --- a/doc/guides/rel_notes/release_21_05.rst
> > > > +++ b/doc/guides/rel_notes/release_21_05.rst
> > > > +* **Updated DLB driver.**
> > > > +
> > > > + * Added support for v2.5 hardware.
> > > > + * Renamed DLB2 to DLB, which supports all HW versions v2.0 and v2.5.
> > >
> > > @Thomas Monjalon , Do we need to update the "Removed Items" section?
> >
> > I did not follow the exact change.
> > Is it changing the driver library name?
> > If yes, it is one more ABI issue.
>
> It is yes. It needs to be fixed in abiignore.
>
> My original question was, Since we are renaming dlb2->dlb one,
> driver/dlb2 directory will not be present after this change,
> Do we need to update the "Removed Items" section in release notes,
> Saying dlb2 driver removed?
Yes we need, but it should have been discussed in techboard first.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v10 1/4] devtools: add exception for reserved fields
2021-04-15 5:32 0% ` [dpdk-dev] [EXT] " Akhil Goyal
@ 2021-04-15 7:26 0% ` David Marchand
2021-04-15 8:25 0% ` Bruce Richardson
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-04-15 7:26 UTC (permalink / raw)
To: Akhil Goyal
Cc: Jerin Jacob Kollanukkaran, Thomas Monjalon, dev, Ray Kinsella,
Abhinandan Gujjar, Hemant Agrawal, Nipun Gupta, Sachin Saxena,
Anoob Joseph, Matan Azrad, Fan Zhang, Gagandeep Singh,
Erik Gabriel Carrillo, Jayatheerthan, Jay,
Pavan Nikhilesh Bhagavatula, Van Haaren Harry, Shijith Thotton,
Dodji Seketeli
On Thu, Apr 15, 2021 at 7:33 AM Akhil Goyal <gakhil@marvell.com> wrote:
>
> Hi David,
> > > Certain structures are added with reserved fields
> > > to address any future enhancements to retain ABI
> > > compatibility.
> > > However, ABI script will still report error as it
> > > is not aware of reserved fields. Hence, adding a
> > > generic exception for reserved fields.
> > >
> > > Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> > > ---
> > > devtools/libabigail.abignore | 6 +++++-
> > > 1 file changed, 5 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> > > index 6c0b38984..654755314 100644
> > > --- a/devtools/libabigail.abignore
> > > +++ b/devtools/libabigail.abignore
> > > @@ -19,4 +19,8 @@
> > > ; Ignore fields inserted in cacheline boundary of rte_cryptodev
> > > [suppress_type]
> > > name = rte_cryptodev
> > > - has_data_member_inserted_between = {offset_after(attached), end}
> > > \ No newline at end of file
> > > + has_data_member_inserted_between = {offset_after(attached), end}
> > > +
> > > +; Ignore changes in reserved fields
> > > +[suppress_variable]
> > > + name_regexp = reserved
> > Mm, this rule is a bit scary, as it matches anything with "reserved" in it.
>
> Why do you feel it is scary? Reserved is something which may change at any time
> Just like experimental. Hence creating a generic exception rule for it make sense
> And it is done intentionally in this patch.
The reserved regexp on the name of a variable / struct field is too lax.
Anything could be named with reserved in it.
If we have clear patterns, they must be preferred, like (untested)
name_regexp = ^reserved_(64|ptr)s$
Experimental is different.
This is a symbol version tag, which has a clear meaning and can't be
used for anything else.
>
> >
> > You need an exception anyway to insert the new fields (like in patch 2).
> > Can you test your series dropping this patch 1 ?
> It will not work, as there are 2 changes,
> 1. addition of ca_enqueue after attached. This is taken care by the exception set in patch 2
> 2. change in the reserved_ptr[4] -> reserved_ptr[3]. For this change we need exception for reserved.
In the eventdev struct, reserved fields are all in the range between
the attached field and the end of the struct.
I pushed your series without patch 1 to a branch of mine, and it
passes the check fine:
https://github.com/david-marchand/dpdk/commits/crypto_fwd_mode_v10
https://github.com/david-marchand/dpdk/runs/2350324578?check_suite_focus=true#step:15:8549
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
2021-04-14 20:33 3% ` Thomas Monjalon
2021-04-15 3:22 0% ` McDaniel, Timothy
@ 2021-04-15 5:47 0% ` Jerin Jacob
2021-04-15 7:48 0% ` Thomas Monjalon
1 sibling, 1 reply; 200+ results
From: Jerin Jacob @ 2021-04-15 5:47 UTC (permalink / raw)
To: Thomas Monjalon
Cc: Timothy McDaniel, Jerin Jacob, dpdk-dev, Erik Gabriel Carrillo,
Gage Eads, Van Haaren, Harry, David Marchand
On Thu, Apr 15, 2021 at 2:03 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 14/04/2021 21:44, Jerin Jacob:
> > On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> > <timothy.mcdaniel@intel.com> wrote:
> > >
> > > Updated eventdev device name to be dlb_event instead of
> > > dlb2_event. The new name will be used for all versions
> > > of the DLB hardware. This change required corresponding changes
> > > to the directory name that contains the PMD, as well
> > > as the documentation files, build infrastructure, and PMD
> > > specific APIs.
> > >
> > > Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
> > > --- a/doc/guides/rel_notes/release_21_05.rst
> > > +++ b/doc/guides/rel_notes/release_21_05.rst
> > > +* **Updated DLB driver.**
> > > +
> > > + * Added support for v2.5 hardware.
> > > + * Renamed DLB2 to DLB, which supports all HW versions v2.0 and v2.5.
> >
> > @Thomas Monjalon , Do we need to update the "Removed Items" section?
>
> I did not follow the exact change.
> Is it changing the driver library name?
> If yes, it is one more ABI issue.
It is yes. It needs to be fixed in abiignore.
My original question was, Since we are renaming dlb2->dlb one,
driver/dlb2 directory will not be present after this change,
Do we need to update the "Removed Items" section in release notes,
Saying dlb2 driver removed?
> If not, I don't see what to update in the release notes.
>
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v10 1/4] devtools: add exception for reserved fields
2021-04-14 20:57 0% ` David Marchand
@ 2021-04-15 5:32 0% ` Akhil Goyal
2021-04-15 7:26 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-15 5:32 UTC (permalink / raw)
To: David Marchand
Cc: Jerin Jacob Kollanukkaran, Thomas Monjalon, dev, Ray Kinsella,
Abhinandan Gujjar, Hemant Agrawal, Nipun Gupta, Sachin Saxena,
Anoob Joseph, Matan Azrad, Fan Zhang, Gagandeep Singh,
Erik Gabriel Carrillo, Jayatheerthan, Jay,
Pavan Nikhilesh Bhagavatula, Van Haaren Harry, Shijith Thotton,
Dodji Seketeli
Hi David,
> > Certain structures are added with reserved fields
> > to address any future enhancements to retain ABI
> > compatibility.
> > However, ABI script will still report error as it
> > is not aware of reserved fields. Hence, adding a
> > generic exception for reserved fields.
> >
> > Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> > ---
> > devtools/libabigail.abignore | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> > index 6c0b38984..654755314 100644
> > --- a/devtools/libabigail.abignore
> > +++ b/devtools/libabigail.abignore
> > @@ -19,4 +19,8 @@
> > ; Ignore fields inserted in cacheline boundary of rte_cryptodev
> > [suppress_type]
> > name = rte_cryptodev
> > - has_data_member_inserted_between = {offset_after(attached), end}
> > \ No newline at end of file
> > + has_data_member_inserted_between = {offset_after(attached), end}
> > +
> > +; Ignore changes in reserved fields
> > +[suppress_variable]
> > + name_regexp = reserved
> Mm, this rule is a bit scary, as it matches anything with "reserved" in it.
Why do you feel it is scary? Reserved is something which may change at any time
Just like experimental. Hence creating a generic exception rule for it make sense
And it is done intentionally in this patch.
>
> You need an exception anyway to insert the new fields (like in patch 2).
> Can you test your series dropping this patch 1 ?
It will not work, as there are 2 changes,
1. addition of ca_enqueue after attached. This is taken care by the exception set in patch 2
2. change in the reserved_ptr[4] -> reserved_ptr[3]. For this change we need exception for reserved.
Regards,
Akhil
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
2021-04-14 20:33 3% ` Thomas Monjalon
@ 2021-04-15 3:22 0% ` McDaniel, Timothy
2021-04-15 5:47 0% ` Jerin Jacob
1 sibling, 0 replies; 200+ results
From: McDaniel, Timothy @ 2021-04-15 3:22 UTC (permalink / raw)
To: Thomas Monjalon, Jerin Jacob
Cc: Jerin Jacob, dpdk-dev, Carrillo, Erik G, Gage Eads, Van Haaren,
Harry, david.marchand
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Wednesday, April 14, 2021 3:33 PM
> To: McDaniel, Timothy <timothy.mcdaniel@intel.com>; Jerin Jacob
> <jerinj@marvell.com>
> Cc: Jerin Jacob <jerinjacobk@gmail.com>; dpdk-dev <dev@dpdk.org>; Carrillo,
> Erik G <erik.g.carrillo@intel.com>; Gage Eads <gage.eads@intel.com>; Van
> Haaren, Harry <harry.van.haaren@intel.com>; david.marchand@redhat.com
> Subject: Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from
> device name
>
> 14/04/2021 21:44, Jerin Jacob:
> > On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> > <mailto:timothy.mcdaniel@intel.com> wrote:
> > >
> > > Updated eventdev device name to be dlb_event instead of
> > > dlb2_event. The new name will be used for all versions
> > > of the DLB hardware. This change required corresponding changes
> > > to the directory name that contains the PMD, as well
> > > as the documentation files, build infrastructure, and PMD
> > > specific APIs.
> > >
> > > Signed-off-by: Timothy McDaniel <mailto:timothy.mcdaniel@intel.com>
> > > --- a/doc/guides/rel_notes/release_21_05.rst
> > > +++ b/doc/guides/rel_notes/release_21_05.rst
> > > +* **Updated DLB driver.**
> > > +
> > > + * Added support for v2.5 hardware.
> > > + * Renamed DLB2 to DLB, which supports all HW versions v2.0 and v2.5.
> >
> > @Thomas Monjalon , Do we need to update the "Removed Items" section?
>
> I did not follow the exact change.
> Is it changing the driver library name?
> If yes, it is one more ABI issue.
> If not, I don't see what to update in the release notes.
>
I'm not sure if this is related, but my latest patch series build fails due to a problem with the docs build. The odd thing is that I updated the name in doxy-api-index.md and changed the file name to rte_pmd_dlb.h, so I don't know where it is picking up what I assume is the previous version of the doxy-api-index.md file while building the last patch in the series. I made this name change in the same commit where I change over from dlb2 to dlb, which is patch 26 in this series. The build is failing on patch 27, and at that point the text string "rte_pmd_dlb2 is not found anywhere in the repo that I can find.
/root/UB2004-64_K5.8.0_GCC10.2.0/x86_64-native-linuxapp-doc/d9404773e5eb425882b0b26bde1e7467/dpdk/doc/api/generate_doxygen.sh doc/api/doxy-api.conf doc/api/html /root/UB2004-64_K5.8.0_GCC10.2.0/x86_64-native-linuxapp-doc/d9404773e5eb425882b0b26bde1e7467/dpdk/doc/api/doxy-html-custom.sh
warning: tag INPUT: input source '/root/UB2004-64_K5.8.0_GCC10.2.0/x86_64-native-linuxapp-doc/d9404773e5eb425882b0b26bde1e7467/dpdk/drivers/event/dlb2' does not exist
error: source /root/UB2004-64_K5.8.0_GCC10.2.0/x86_64-native-linuxapp-doc/d9404773e5eb425882b0b26bde1e7467/dpdk/drivers/event/dlb2 is not a readable file or directory... skipping.
/root/UB2004-64_K5.8.0_GCC10.2.0/x86_64-native-linuxapp-doc/d9404773e5eb425882b0b26bde1e7467/dpdk/doc/api/doxy-api-index.md:56: error: unable to resolve reference to 'rte_pmd_dlb2.h' for \ref command (warning treated as error, aborting now)
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH V3] ethdev: add queue state when retrieve queue information
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
2021-04-06 0:49 0% ` oulijun
2021-04-06 14:02 0% ` Ananyev, Konstantin
@ 2021-04-15 2:40 8% ` Lijun Ou
2021-04-15 12:33 3% ` Ferruh Yigit
2 siblings, 1 reply; 200+ results
From: Lijun Ou @ 2021-04-15 2:40 UTC (permalink / raw)
To: thomas, ferruh.yigit; +Cc: dev, linuxarm
Currently, upper-layer application could get queue state only
through pointers such as dev->data->tx_queue_state[queue_id],
this is not the recommended way to access it. So this patch
add get queue state when call rte_eth_rx_queue_info_get and
rte_eth_tx_queue_info_get API.
Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
it could be ABI compatible.
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Lijun Ou <oulijun@huawei.com>
---
V2->V3:
- rewrite the commit log and delete the part Note
- rewrite tht comments for queue state
- move the queue_state definition locations
V1->V2:
- move queue state defines to public file
---
doc/guides/rel_notes/release_21_05.rst | 6 ++++++
lib/librte_ethdev/ethdev_driver.h | 7 -------
lib/librte_ethdev/rte_ethdev.c | 3 +++
lib/librte_ethdev/rte_ethdev.h | 9 +++++++++
4 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 3bd7757..c6e45e2 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -251,6 +251,12 @@ ABI Changes
function was already marked as internal in the API documentation for it,
and was not for use by external applications.
+* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
+ to provide indicated rxq queue state.
+
+* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
+ to provide indicated txq queue state.
+
Known Issues
------------
diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
index 113129d..40e474a 100644
--- a/lib/librte_ethdev/ethdev_driver.h
+++ b/lib/librte_ethdev/ethdev_driver.h
@@ -952,13 +952,6 @@ struct eth_dev_ops {
};
/**
- * RX/TX queue states
- */
-#define RTE_ETH_QUEUE_STATE_STOPPED 0
-#define RTE_ETH_QUEUE_STATE_STARTED 1
-#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
-
-/**
* @internal
* Check if the selected Rx queue is hairpin queue.
*
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 6b5cfd6..ab188ec 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->rx_queue_state[queue_id];
+
return 0;
}
@@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->tx_queue_state[queue_id];
return 0;
}
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 3b773b6..a0d01d2 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1588,6 +1588,13 @@ struct rte_eth_dev_info {
};
/**
+ * RX/TX queue states
+ */
+#define RTE_ETH_QUEUE_STATE_STOPPED 0
+#define RTE_ETH_QUEUE_STATE_STARTED 1
+#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
+
+/**
* Ethernet device RX queue information structure.
* Used to retrieve information about configured queue.
*/
@@ -1595,6 +1602,7 @@ struct rte_eth_rxq_info {
struct rte_mempool *mp; /**< mempool used by that queue. */
struct rte_eth_rxconf conf; /**< queue config parameters. */
uint8_t scattered_rx; /**< scattered packets RX supported. */
+ uint8_t queue_state; /**< one of RTE_ETH_QUEUE_STATE_*. */
uint16_t nb_desc; /**< configured number of RXDs. */
uint16_t rx_buf_size; /**< hardware receive buffer size. */
} __rte_cache_min_aligned;
@@ -1606,6 +1614,7 @@ struct rte_eth_rxq_info {
struct rte_eth_txq_info {
struct rte_eth_txconf conf; /**< queue config parameters. */
uint16_t nb_desc; /**< configured number of TXDs. */
+ uint8_t queue_state; /**< one of RTE_ETH_QUEUE_STATE_*. */
} __rte_cache_min_aligned;
/* Generic Burst mode flag definition, values can be ORed. */
--
2.7.4
^ permalink raw reply [relevance 8%]
* Re: [dpdk-dev] [PATCH v10 1/4] devtools: add exception for reserved fields
2021-04-14 18:04 4% ` [dpdk-dev] [PATCH v10 1/4] devtools: add exception for reserved fields gakhil
@ 2021-04-14 20:57 0% ` David Marchand
2021-04-15 5:32 0% ` [dpdk-dev] [EXT] " Akhil Goyal
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-04-14 20:57 UTC (permalink / raw)
To: Akhil Goyal
Cc: Jerin Jacob Kollanukkaran, Thomas Monjalon, dev, Ray Kinsella,
Abhinandan Gujjar, Hemant Agrawal, Nipun Gupta, Sachin Saxena,
Anoob Joseph, Matan Azrad, Fan Zhang, Gagandeep Singh,
Erik Gabriel Carrillo, Jayatheerthan, Jay, Pavan Nikhilesh,
Van Haaren Harry, Shijith Thotton, Dodji Seketeli
On Wed, Apr 14, 2021 at 8:04 PM <gakhil@marvell.com> wrote:
>
> From: Akhil Goyal <gakhil@marvell.com>
>
> Certain structures are added with reserved fields
> to address any future enhancements to retain ABI
> compatibility.
> However, ABI script will still report error as it
> is not aware of reserved fields. Hence, adding a
> generic exception for reserved fields.
>
> Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> ---
> devtools/libabigail.abignore | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index 6c0b38984..654755314 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -19,4 +19,8 @@
> ; Ignore fields inserted in cacheline boundary of rte_cryptodev
> [suppress_type]
> name = rte_cryptodev
> - has_data_member_inserted_between = {offset_after(attached), end}
> \ No newline at end of file
> + has_data_member_inserted_between = {offset_after(attached), end}
> +
> +; Ignore changes in reserved fields
> +[suppress_variable]
> + name_regexp = reserved
> --
> 2.25.1
>
Mm, this rule is a bit scary, as it matches anything with "reserved" in it.
You need an exception anyway to insert the new fields (like in patch 2).
Can you test your series dropping this patch 1 ?
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
@ 2021-04-14 20:33 3% ` Thomas Monjalon
2021-04-15 3:22 0% ` McDaniel, Timothy
2021-04-15 5:47 0% ` Jerin Jacob
0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2021-04-14 20:33 UTC (permalink / raw)
To: Timothy McDaniel, Jerin Jacob
Cc: Jerin Jacob, dpdk-dev, Erik Gabriel Carrillo, Gage Eads,
Van Haaren, Harry, david.marchand
14/04/2021 21:44, Jerin Jacob:
> On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> <timothy.mcdaniel@intel.com> wrote:
> >
> > Updated eventdev device name to be dlb_event instead of
> > dlb2_event. The new name will be used for all versions
> > of the DLB hardware. This change required corresponding changes
> > to the directory name that contains the PMD, as well
> > as the documentation files, build infrastructure, and PMD
> > specific APIs.
> >
> > Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
> > --- a/doc/guides/rel_notes/release_21_05.rst
> > +++ b/doc/guides/rel_notes/release_21_05.rst
> > +* **Updated DLB driver.**
> > +
> > + * Added support for v2.5 hardware.
> > + * Renamed DLB2 to DLB, which supports all HW versions v2.0 and v2.5.
>
> @Thomas Monjalon , Do we need to update the "Removed Items" section?
I did not follow the exact change.
Is it changing the driver library name?
If yes, it is one more ABI issue.
If not, I don't see what to update in the release notes.
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH v5] cryptodev: support multiple cipher data-units
2021-04-13 18:19 4% ` [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units Thomas Monjalon
2021-04-13 20:42 10% ` [dpdk-dev] [PATCH v4] " Thomas Monjalon
@ 2021-04-14 20:21 10% ` Thomas Monjalon
2021-04-15 8:35 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-14 20:21 UTC (permalink / raw)
To: dev; +Cc: akhil.goyal, matan, Ray Kinsella, Neil Horman, Declan Doherty
From: Matan Azrad <matan@nvidia.com>
In cryptography, a block cipher is a deterministic algorithm operating
on fixed-length groups of bits, called blocks.
A block cipher consists of two paired algorithms, one for encryption
and the other for decryption. Both algorithms accept two inputs:
an input block of size n bits and a key of size k bits; and both yield
an n-bit output block. The decryption algorithm is defined to be the
inverse function of the encryption.
For AES standard the block size is 16 bytes.
For AES in XTS mode, the data to be encrypted\decrypted does not have to
be multiple of 16B size, the unit of data is called data-unit.
The data-unit size can be any size in range [16B, 2^24B], so, in this
case, a data stream is divided into N amount of equal data-units and
must be encrypted\decrypted in the same data-unit resolution.
For ABI compatibility reason, the size is limited to 64K (16-bit field).
The new field dataunit_len is inserted in a struct padding hole,
which is only 2 bytes long in 32-bit build.
It could be moved and extended later during an ABI-breakage window.
The current cryptodev API doesn't allow the user to select a specific
data-unit length supported by the devices.
In addition, there is no definition how the IV is detected per data-unit
when single operation includes more than one data-unit.
That causes applications to use single operation per data-unit even though
all the data is continuous in memory what reduces datapath performance.
Add a new feature flag to support multiple data-unit sizes, called
RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
Add a new field in cipher capability, called dataunit_set,
where the devices can report the range of the supported data-unit sizes.
Add a new cipher transformation field, called dataunit_len, where the user
can select the data-unit length for all the operations.
All the new fields do not change the size of their structures,
by filling some struct padding holes.
They are added as exceptions in the ABI check file libabigail.abignore.
Using a bitmap to report the supported data-unit sizes capability allows
the devices to report a range simply as same as the user to read it
simply. also, thus sizes are usually common and probably will be shared
among different devices.
Signed-off-by: Matan Azrad <matan@nvidia.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
v1:
- Use data-unit term instead of block.
- Update cipher length description in OP.
- Improve descriptions on xform and capability.
- Improve commit log.
v2:
- Fix typo: MULITPLE->MULTIPLE.
- Remain only planned supported sizes for data-unit capability.
v3:
- Improve some comments.
- Fix ABI breakage.
v4:
- Remove RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1M_BYTES
- Fix dataunit_len placement in padding hole
v5:
- Improve comments
- Use RTE_BIT32
deprecation notice:
https://patches.dpdk.org/project/dpdk/patch/20210414201544.1063413-1-thomas@monjalon.net/
---
devtools/libabigail.abignore | 12 ++++++++-
doc/guides/cryptodevs/features/default.ini | 1 +
doc/guides/cryptodevs/overview.rst | 3 +++
doc/guides/rel_notes/release_21_05.rst | 6 +++++
lib/librte_cryptodev/rte_crypto_sym.h | 29 ++++++++++++++++++++--
lib/librte_cryptodev/rte_cryptodev.c | 2 ++
lib/librte_cryptodev/rte_cryptodev.h | 16 ++++++++++++
7 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 6c0b38984e..bce940f2df 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -19,4 +19,14 @@
; Ignore fields inserted in cacheline boundary of rte_cryptodev
[suppress_type]
name = rte_cryptodev
- has_data_member_inserted_between = {offset_after(attached), end}
\ No newline at end of file
+ has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore fields inserted in union boundary of rte_cryptodev_symmetric_capability
+[suppress_type]
+ name = rte_cryptodev_symmetric_capability
+ has_data_member_inserted_between = {offset_after(cipher.iv_size), end}
+
+; Ignore fields inserted in middle padding of rte_crypto_cipher_xform
+[suppress_type]
+ name = rte_crypto_cipher_xform
+ has_data_member_inserted_between = {offset_after(key), offset_of(iv)}
diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini
index 17b177fc45..978bb30cc1 100644
--- a/doc/guides/cryptodevs/features/default.ini
+++ b/doc/guides/cryptodevs/features/default.ini
@@ -31,6 +31,7 @@ CPU crypto =
Symmetric sessionless =
Non-Byte aligned data =
Sym raw data path API =
+Cipher multiple data units =
;
; Supported crypto algorithms of a default crypto driver.
diff --git a/doc/guides/cryptodevs/overview.rst b/doc/guides/cryptodevs/overview.rst
index e2a1e08ec1..e24e3e1993 100644
--- a/doc/guides/cryptodevs/overview.rst
+++ b/doc/guides/cryptodevs/overview.rst
@@ -46,6 +46,9 @@ Supported Feature Flags
- "Digest encrypted" feature flag means PMD support hash-cipher cases,
where generated digest is appended to and encrypted with the data.
+ - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support operations
+ on multiple data-units message.
+
Supported Cipher Algorithms
---------------------------
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 2e3bf5c95a..57b2744d1d 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -150,6 +150,12 @@ New Features
* Added support for preferred busy polling.
+* **Added support of multiple data-units in cryptodev API.**
+
+ The cryptodev library has been enhanced to allow operations on multiple
+ data-units for AES-XTS algorithm, the data-unit length should be set in the
+ transformation. A capability for it was added too.
+
* **Updated Mellanox RegEx PMD.**
* Added support for multi-segments mbuf.
diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h
index 9d572ec057..4e365b1eab 100644
--- a/lib/librte_cryptodev/rte_crypto_sym.h
+++ b/lib/librte_cryptodev/rte_crypto_sym.h
@@ -195,6 +195,9 @@ struct rte_crypto_cipher_xform {
enum rte_crypto_cipher_algorithm algo;
/**< Cipher algorithm */
+ RTE_STD_C11
+ union { /* temporary anonymous union for ABI compatibility */
+
struct {
const uint8_t *data; /**< pointer to key data */
uint16_t length; /**< key length in bytes */
@@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
* - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
* - Both keys must have the same size.
**/
+
+ RTE_STD_C11
+ struct { /* temporary anonymous struct for ABI compatibility */
+ const uint8_t *_key_data; /* reserved for key.data union */
+ uint16_t _key_length; /* reserved for key.length union */
+ /* next field can fill the padding hole */
+
+ uint16_t dataunit_len;
+ /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is enabled,
+ * this is the data-unit length of the algorithm,
+ * otherwise or when the value is 0, use the operation length.
+ * The value should be in the range defined by the dataunit_set field
+ * in the cipher capability.
+ *
+ * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
+ * For-each data-unit in the operation, the tweak (IV) value is
+ * assigned consecutively starting from the operation assigned IV.
+ */
+
+ }; }; /* temporary struct nested in union for ABI compatibility */
+
struct {
uint16_t offset;
/**< Starting point for Initialisation Vector or Counter,
@@ -701,9 +725,10 @@ struct rte_crypto_sym_op {
/**< The message length, in bytes, of the
* source buffer on which the cryptographic
* operation will be computed.
+ * This is also the same as the result length.
* This must be a multiple of the block size
- * if a block cipher is being used. This is
- * also the same as the result length.
+ * or a multiple of data-unit length
+ * as described in xform.
*
* @note
* For SNOW 3G @ RTE_CRYPTO_AUTH_SNOW3G_UEA2,
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 40f55a3cd0..e02e001325 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -617,6 +617,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
return "SYM_SESSIONLESS";
case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
return "NON_BYTE_ALIGNED_DATA";
+ case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS:
+ return "CIPHER_MULTIPLE_DATA_UNITS";
default:
return NULL;
}
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index ae34f33f69..7e80f4be26 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -95,6 +95,14 @@ struct rte_crypto_param_range {
*/
};
+/**
+ * Data-unit supported lengths of cipher algorithms.
+ * A bit can represent any set of data-unit sizes
+ * (single size, multiple size, range, etc).
+ */
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES RTE_BIT32(0)
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES RTE_BIT32(1)
+
/**
* Symmetric Crypto Capability
*/
@@ -127,6 +135,12 @@ struct rte_cryptodev_symmetric_capability {
/**< cipher key size range */
struct rte_crypto_param_range iv_size;
/**< Initialisation vector data size range */
+ uint32_t dataunit_set;
+ /**<
+ * Supported data-unit lengths:
+ * RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_* bits
+ * or 0 for lengths defined in the algorithm standard.
+ */
} cipher;
/**< Symmetric Cipher transform capabilities */
struct {
@@ -461,6 +475,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
/**< Support operations on data which is not byte aligned */
#define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24)
/**< Support accelerator specific symmetric raw data-path APIs */
+#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25)
+/**< Support operations on multiple data-units message */
/**
* Get the name of a crypto device feature flag
--
2.31.1
^ permalink raw reply [relevance 10%]
* Re: [dpdk-dev] [EXT] [PATCH v4] cryptodev: support multiple cipher data-units
2021-04-14 19:43 0% ` Akhil Goyal
@ 2021-04-14 20:17 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-14 20:17 UTC (permalink / raw)
To: Akhil Goyal
Cc: dev, arkadiuszx.kusztal, Anoob Joseph, Matan Azrad, Ray Kinsella,
Declan Doherty
14/04/2021 21:43, Akhil Goyal:
> > 14/04/2021 20:37, Akhil Goyal:
> > > Hi Thomas,
> > >
> > > > + RTE_STD_C11
> > > > + union { /* temporary anonymous union for ABI compatibility */
> > > > +
> > > > struct {
> > > > const uint8_t *data; /**< pointer to key data */
> > > > uint16_t length; /**< key length in bytes */
> > > > @@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
> > > > * - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
> > > > * - Both keys must have the same size.
> > > > **/
> > > > +
> > > > + RTE_STD_C11
> > > > + struct { /* temporary anonymous struct for ABI compatibility */
> > > > + const uint8_t *_key_data; /* reserved for key.data union */
> > > > + uint16_t _key_length; /* reserved for key.length union */
> > > > + /* next field can fill the padding hole */
> > > > +
> > > > + uint16_t dataunit_len;
> > > > + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is
> > > > enabled,
> > > > + * this is the data-unit length of the algorithm,
> > > > + * otherwise or when the value is 0, use the operation length.
> > > > + * The value should be in the range defined by the dataunit_set field
> > > > + * in the cipher capability.
> > > > + *
> > > > + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
> > > > + * For-each data-unit in the operation, the tweak (IV) value is
> > > > + * assigned consecutively starting from the operation assigned IV.
> > > > + */
> > > > +
> > > > + }; }; /* temporary struct nested in union for ABI compatibility */
> > > > +
> > > Can we add a deprecation notice also in this patch to remove these
> > temporary
> > > Struct and union, so that we remember to remove them in 21.11
> >
> > I thought about it, but a deprecation notice may involve
> > new design considerations and requires 3 approvals.
> > I think it is better to send it separately.
>
> In that case you can send it as a separate patch now only.
> Just wanted to make sure that it is not forgotten.
Yes, sent:
https://patches.dpdk.org/project/dpdk/patch/20210414201544.1063413-1-thomas@monjalon.net/
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v5 0/5] eal: enable global device syntax by default
@ 2021-04-14 19:49 3% ` Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-14 19:49 UTC (permalink / raw)
To: Xueming Li; +Cc: Gaetan Rivet, dev, Asaf Penso, mdr, david.marchand
13/04/2021 05:14, Xueming Li:
> Xueming Li (5):
> devargs: unify scratch buffer storage
> devargs: fix memory leak on parsing error
> kvargs: add get by key function
> bus: add device arguments name parsing API
> devargs: parse global device syntax
The patch 4 adds a new callback in rte_bus.
I thought about it during the whole day and I don't see any good way
to merge it without breaking the ABI compatibility.
Only first 3 patches are applied for now, thanks.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [EXT] [PATCH v4] cryptodev: support multiple cipher data-units
2021-04-14 19:38 0% ` Thomas Monjalon
@ 2021-04-14 19:43 0% ` Akhil Goyal
2021-04-14 20:17 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-14 19:43 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, arkadiuszx.kusztal, Anoob Joseph, Matan Azrad, Ray Kinsella,
Neil Horman, Declan Doherty
>
> 14/04/2021 20:37, Akhil Goyal:
> > Hi Thomas,
> >
> > > + RTE_STD_C11
> > > + union { /* temporary anonymous union for ABI compatibility */
> > > +
> > > struct {
> > > const uint8_t *data; /**< pointer to key data */
> > > uint16_t length; /**< key length in bytes */
> > > @@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
> > > * - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
> > > * - Both keys must have the same size.
> > > **/
> > > +
> > > + RTE_STD_C11
> > > + struct { /* temporary anonymous struct for ABI compatibility */
> > > + const uint8_t *_key_data; /* reserved for key.data union */
> > > + uint16_t _key_length; /* reserved for key.length union */
> > > + /* next field can fill the padding hole */
> > > +
> > > + uint16_t dataunit_len;
> > > + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is
> > > enabled,
> > > + * this is the data-unit length of the algorithm,
> > > + * otherwise or when the value is 0, use the operation length.
> > > + * The value should be in the range defined by the dataunit_set field
> > > + * in the cipher capability.
> > > + *
> > > + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
> > > + * For-each data-unit in the operation, the tweak (IV) value is
> > > + * assigned consecutively starting from the operation assigned IV.
> > > + */
> > > +
> > > + }; }; /* temporary struct nested in union for ABI compatibility */
> > > +
> > Can we add a deprecation notice also in this patch to remove these
> temporary
> > Struct and union, so that we remember to remove them in 21.11
>
> I thought about it, but a deprecation notice may involve
> new design considerations and requires 3 approvals.
> I think it is better to send it separately.
In that case you can send it as a separate patch now only.
Just wanted to make sure that it is not forgotten.
>
> > > @@ -127,6 +135,11 @@ struct rte_cryptodev_symmetric_capability {
> > > /**< cipher key size range */
> > > struct rte_crypto_param_range iv_size;
> > > /**< Initialisation vector data size range */
> > > + uint32_t dataunit_set;
> > > + /**<
> > > + * A bitmap for a set of the supported data-unit
> > > lengths.
> >
> > Add reference to the newly created macros here
> >
> > > + * 0 for any length defined in the algorithm standard.
> > > + */
>
> Yes, I've seen this miss after sending.
> I'll reword like this:
> * Supported data-unit lengths:
> * RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_* bits
> * or 0 for lengths defined in the algorithm standard.
OK
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
2021-04-14 19:31 4% ` Jerin Jacob
@ 2021-04-14 19:42 0% ` McDaniel, Timothy
0 siblings, 0 replies; 200+ results
From: McDaniel, Timothy @ 2021-04-14 19:42 UTC (permalink / raw)
To: Jerin Jacob, David Marchand, Ray Kinsella
Cc: dpdk-dev, Carrillo, Erik G, Gage Eads, Van Haaren, Harry,
Jerin Jacob, Thomas Monjalon
> -----Original Message-----
> From: Jerin Jacob <jerinjacobk@gmail.com>
> Sent: Wednesday, April 14, 2021 2:32 PM
> To: McDaniel, Timothy <timothy.mcdaniel@intel.com>; David Marchand
> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>
> Cc: dpdk-dev <dev@dpdk.org>; Carrillo, Erik G <erik.g.carrillo@intel.com>; Gage
> Eads <gage.eads@intel.com>; Van Haaren, Harry
> <harry.van.haaren@intel.com>; Jerin Jacob <jerinj@marvell.com>; Thomas
> Monjalon <thomas@monjalon.net>
> Subject: Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from
> device name
>
> On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
> <timothy.mcdaniel@intel.com> wrote:
> >
> > Updated eventdev device name to be dlb_event instead of
> > dlb2_event. The new name will be used for all versions
> > of the DLB hardware. This change required corresponding changes
> > to the directory name that contains the PMD, as well
> > as the documentation files, build infrastructure, and PMD
> > specific APIs.
> >
> > Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
>
> Please change the subject to "event/dlb: rename dlb2 driver", or so.
>
> Also,See the below patch and change the abiignore to dlb2 now.
>
> ------------------
>
> commit 4113ddd45293d7b26ff4033bfd86cef03d29124f
> Author: Thomas Monjalon <thomas@monjalon.net>
> Date: Tue Apr 13 10:29:37 2021 +0200
>
> devtools: skip removed DLB driver in ABI check
>
> The eventdev driver DLB was removed in DPDK 21.05,
> breaking the ABI check.
> The exception was agreed so we just need to skip this check.
>
> Note: complete removal of a driver cannot be ignored
> in devtools/libabigail.abignore, so the script must be patched.
>
> Fixes: 698fa829415d ("event/dlb: remove driver")
>
> Reported-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: David Marchand <david.marchand@redhat.com>
>
> ---------------------
>
> > ---
> > MAINTAINERS | 6 +-
> > app/test/test_eventdev.c | 6 +-
> > config/rte_config.h | 11 ++-
> > doc/api/doxy-api-index.md | 2 +-
> > doc/api/doxy-api.conf.in | 2 +-
> > doc/guides/eventdevs/{dlb2.rst => dlb.rst} | 88 +++++++++----------
> > doc/guides/eventdevs/index.rst | 2 +-
> > doc/guides/rel_notes/release_21_05.rst | 5 ++
> > drivers/event/{dlb2 => dlb}/dlb2.c | 25 +++---
> > drivers/event/{dlb2 => dlb}/dlb2_iface.c | 0
> > drivers/event/{dlb2 => dlb}/dlb2_iface.h | 0
> > drivers/event/{dlb2 => dlb}/dlb2_inline_fns.h | 0
> > drivers/event/{dlb2 => dlb}/dlb2_log.h | 0
> > drivers/event/{dlb2 => dlb}/dlb2_priv.h | 7 +-
> > drivers/event/{dlb2 => dlb}/dlb2_selftest.c | 8 +-
> > drivers/event/{dlb2 => dlb}/dlb2_user.h | 0
> > drivers/event/{dlb2 => dlb}/dlb2_xstats.c | 0
> > drivers/event/{dlb2 => dlb}/meson.build | 4 +-
> > .../{dlb2 => dlb}/pf/base/dlb2_hw_types.h | 0
> > .../event/{dlb2 => dlb}/pf/base/dlb2_osdep.h | 0
> > .../{dlb2 => dlb}/pf/base/dlb2_osdep_bitmap.h | 0
> > .../{dlb2 => dlb}/pf/base/dlb2_osdep_list.h | 0
> > .../{dlb2 => dlb}/pf/base/dlb2_osdep_types.h | 0
> > .../event/{dlb2 => dlb}/pf/base/dlb2_regs.h | 0
> > .../{dlb2 => dlb}/pf/base/dlb2_resource.c | 0
> > .../{dlb2 => dlb}/pf/base/dlb2_resource.h | 0
> > drivers/event/{dlb2 => dlb}/pf/dlb2_main.c | 0
> > drivers/event/{dlb2 => dlb}/pf/dlb2_main.h | 0
> > drivers/event/{dlb2 => dlb}/pf/dlb2_pf.c | 0
> > .../rte_pmd_dlb2.c => dlb/rte_pmd_dlb.c} | 6 +-
> > .../rte_pmd_dlb2.h => dlb/rte_pmd_dlb.h} | 12 +--
> > drivers/event/{dlb2 => dlb}/version.map | 2 +-
> > drivers/event/meson.build | 2 +-
> > 33 files changed, 94 insertions(+), 94 deletions(-)
> > rename doc/guides/eventdevs/{dlb2.rst => dlb.rst} (84%)
> > rename drivers/event/{dlb2 => dlb}/dlb2.c (99%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_iface.c (100%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_iface.h (100%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_inline_fns.h (100%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_log.h (100%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_priv.h (99%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_selftest.c (99%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_user.h (100%)
> > rename drivers/event/{dlb2 => dlb}/dlb2_xstats.c (100%)
> > rename drivers/event/{dlb2 => dlb}/meson.build (89%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_hw_types.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_bitmap.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_list.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_types.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_regs.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_resource.c (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_resource.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/dlb2_main.c (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/dlb2_main.h (100%)
> > rename drivers/event/{dlb2 => dlb}/pf/dlb2_pf.c (100%)
> > rename drivers/event/{dlb2/rte_pmd_dlb2.c => dlb/rte_pmd_dlb.c} (88%)
> > rename drivers/event/{dlb2/rte_pmd_dlb2.h => dlb/rte_pmd_dlb.h} (88%)
> > rename drivers/event/{dlb2 => dlb}/version.map (60%)
Okay
Thanks,
Tim
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] [PATCH v4] cryptodev: support multiple cipher data-units
2021-04-14 18:37 0% ` [dpdk-dev] [EXT] " Akhil Goyal
@ 2021-04-14 19:38 0% ` Thomas Monjalon
2021-04-14 19:43 0% ` Akhil Goyal
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-14 19:38 UTC (permalink / raw)
To: Akhil Goyal
Cc: dev, arkadiuszx.kusztal, Anoob Joseph, Matan Azrad, Ray Kinsella,
Neil Horman, Declan Doherty
14/04/2021 20:37, Akhil Goyal:
> Hi Thomas,
>
> > + RTE_STD_C11
> > + union { /* temporary anonymous union for ABI compatibility */
> > +
> > struct {
> > const uint8_t *data; /**< pointer to key data */
> > uint16_t length; /**< key length in bytes */
> > @@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
> > * - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
> > * - Both keys must have the same size.
> > **/
> > +
> > + RTE_STD_C11
> > + struct { /* temporary anonymous struct for ABI compatibility */
> > + const uint8_t *_key_data; /* reserved for key.data union */
> > + uint16_t _key_length; /* reserved for key.length union */
> > + /* next field can fill the padding hole */
> > +
> > + uint16_t dataunit_len;
> > + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is
> > enabled,
> > + * this is the data-unit length of the algorithm,
> > + * otherwise or when the value is 0, use the operation length.
> > + * The value should be in the range defined by the dataunit_set field
> > + * in the cipher capability.
> > + *
> > + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
> > + * For-each data-unit in the operation, the tweak (IV) value is
> > + * assigned consecutively starting from the operation assigned IV.
> > + */
> > +
> > + }; }; /* temporary struct nested in union for ABI compatibility */
> > +
> Can we add a deprecation notice also in this patch to remove these temporary
> Struct and union, so that we remember to remove them in 21.11
I thought about it, but a deprecation notice may involve
new design considerations and requires 3 approvals.
I think it is better to send it separately.
> > @@ -127,6 +135,11 @@ struct rte_cryptodev_symmetric_capability {
> > /**< cipher key size range */
> > struct rte_crypto_param_range iv_size;
> > /**< Initialisation vector data size range */
> > + uint32_t dataunit_set;
> > + /**<
> > + * A bitmap for a set of the supported data-unit
> > lengths.
>
> Add reference to the newly created macros here
>
> > + * 0 for any length defined in the algorithm standard.
> > + */
Yes, I've seen this miss after sending.
I'll reword like this:
* Supported data-unit lengths:
* RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_* bits
* or 0 for lengths defined in the algorithm standard.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name
@ 2021-04-14 19:31 4% ` Jerin Jacob
2021-04-14 19:42 0% ` McDaniel, Timothy
1 sibling, 1 reply; 200+ results
From: Jerin Jacob @ 2021-04-14 19:31 UTC (permalink / raw)
To: Timothy McDaniel, David Marchand, Ray Kinsella
Cc: dpdk-dev, Erik Gabriel Carrillo, Gage Eads, Van Haaren, Harry,
Jerin Jacob, Thomas Monjalon
On Wed, Apr 14, 2021 at 1:49 AM Timothy McDaniel
<timothy.mcdaniel@intel.com> wrote:
>
> Updated eventdev device name to be dlb_event instead of
> dlb2_event. The new name will be used for all versions
> of the DLB hardware. This change required corresponding changes
> to the directory name that contains the PMD, as well
> as the documentation files, build infrastructure, and PMD
> specific APIs.
>
> Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
Please change the subject to "event/dlb: rename dlb2 driver", or so.
Also,See the below patch and change the abiignore to dlb2 now.
------------------
commit 4113ddd45293d7b26ff4033bfd86cef03d29124f
Author: Thomas Monjalon <thomas@monjalon.net>
Date: Tue Apr 13 10:29:37 2021 +0200
devtools: skip removed DLB driver in ABI check
The eventdev driver DLB was removed in DPDK 21.05,
breaking the ABI check.
The exception was agreed so we just need to skip this check.
Note: complete removal of a driver cannot be ignored
in devtools/libabigail.abignore, so the script must be patched.
Fixes: 698fa829415d ("event/dlb: remove driver")
Reported-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---------------------
> ---
> MAINTAINERS | 6 +-
> app/test/test_eventdev.c | 6 +-
> config/rte_config.h | 11 ++-
> doc/api/doxy-api-index.md | 2 +-
> doc/api/doxy-api.conf.in | 2 +-
> doc/guides/eventdevs/{dlb2.rst => dlb.rst} | 88 +++++++++----------
> doc/guides/eventdevs/index.rst | 2 +-
> doc/guides/rel_notes/release_21_05.rst | 5 ++
> drivers/event/{dlb2 => dlb}/dlb2.c | 25 +++---
> drivers/event/{dlb2 => dlb}/dlb2_iface.c | 0
> drivers/event/{dlb2 => dlb}/dlb2_iface.h | 0
> drivers/event/{dlb2 => dlb}/dlb2_inline_fns.h | 0
> drivers/event/{dlb2 => dlb}/dlb2_log.h | 0
> drivers/event/{dlb2 => dlb}/dlb2_priv.h | 7 +-
> drivers/event/{dlb2 => dlb}/dlb2_selftest.c | 8 +-
> drivers/event/{dlb2 => dlb}/dlb2_user.h | 0
> drivers/event/{dlb2 => dlb}/dlb2_xstats.c | 0
> drivers/event/{dlb2 => dlb}/meson.build | 4 +-
> .../{dlb2 => dlb}/pf/base/dlb2_hw_types.h | 0
> .../event/{dlb2 => dlb}/pf/base/dlb2_osdep.h | 0
> .../{dlb2 => dlb}/pf/base/dlb2_osdep_bitmap.h | 0
> .../{dlb2 => dlb}/pf/base/dlb2_osdep_list.h | 0
> .../{dlb2 => dlb}/pf/base/dlb2_osdep_types.h | 0
> .../event/{dlb2 => dlb}/pf/base/dlb2_regs.h | 0
> .../{dlb2 => dlb}/pf/base/dlb2_resource.c | 0
> .../{dlb2 => dlb}/pf/base/dlb2_resource.h | 0
> drivers/event/{dlb2 => dlb}/pf/dlb2_main.c | 0
> drivers/event/{dlb2 => dlb}/pf/dlb2_main.h | 0
> drivers/event/{dlb2 => dlb}/pf/dlb2_pf.c | 0
> .../rte_pmd_dlb2.c => dlb/rte_pmd_dlb.c} | 6 +-
> .../rte_pmd_dlb2.h => dlb/rte_pmd_dlb.h} | 12 +--
> drivers/event/{dlb2 => dlb}/version.map | 2 +-
> drivers/event/meson.build | 2 +-
> 33 files changed, 94 insertions(+), 94 deletions(-)
> rename doc/guides/eventdevs/{dlb2.rst => dlb.rst} (84%)
> rename drivers/event/{dlb2 => dlb}/dlb2.c (99%)
> rename drivers/event/{dlb2 => dlb}/dlb2_iface.c (100%)
> rename drivers/event/{dlb2 => dlb}/dlb2_iface.h (100%)
> rename drivers/event/{dlb2 => dlb}/dlb2_inline_fns.h (100%)
> rename drivers/event/{dlb2 => dlb}/dlb2_log.h (100%)
> rename drivers/event/{dlb2 => dlb}/dlb2_priv.h (99%)
> rename drivers/event/{dlb2 => dlb}/dlb2_selftest.c (99%)
> rename drivers/event/{dlb2 => dlb}/dlb2_user.h (100%)
> rename drivers/event/{dlb2 => dlb}/dlb2_xstats.c (100%)
> rename drivers/event/{dlb2 => dlb}/meson.build (89%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_hw_types.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_bitmap.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_list.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_osdep_types.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_regs.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_resource.c (100%)
> rename drivers/event/{dlb2 => dlb}/pf/base/dlb2_resource.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/dlb2_main.c (100%)
> rename drivers/event/{dlb2 => dlb}/pf/dlb2_main.h (100%)
> rename drivers/event/{dlb2 => dlb}/pf/dlb2_pf.c (100%)
> rename drivers/event/{dlb2/rte_pmd_dlb2.c => dlb/rte_pmd_dlb.c} (88%)
> rename drivers/event/{dlb2/rte_pmd_dlb2.h => dlb/rte_pmd_dlb.h} (88%)
> rename drivers/event/{dlb2 => dlb}/version.map (60%)
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [EXT] [PATCH v4] cryptodev: support multiple cipher data-units
2021-04-13 20:42 10% ` [dpdk-dev] [PATCH v4] " Thomas Monjalon
@ 2021-04-14 18:37 0% ` Akhil Goyal
2021-04-14 19:38 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-14 18:37 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: arkadiuszx.kusztal, Anoob Joseph, Matan Azrad, Ray Kinsella,
Neil Horman, Declan Doherty
Hi Thomas,
> + RTE_STD_C11
> + union { /* temporary anonymous union for ABI compatibility */
> +
> struct {
> const uint8_t *data; /**< pointer to key data */
> uint16_t length; /**< key length in bytes */
> @@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
> * - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
> * - Both keys must have the same size.
> **/
> +
> + RTE_STD_C11
> + struct { /* temporary anonymous struct for ABI compatibility */
> + const uint8_t *_key_data; /* reserved for key.data union */
> + uint16_t _key_length; /* reserved for key.length union */
> + /* next field can fill the padding hole */
> +
> + uint16_t dataunit_len;
> + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is
> enabled,
> + * this is the data-unit length of the algorithm,
> + * otherwise or when the value is 0, use the operation length.
> + * The value should be in the range defined by the dataunit_set field
> + * in the cipher capability.
> + *
> + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
> + * For-each data-unit in the operation, the tweak (IV) value is
> + * assigned consecutively starting from the operation assigned IV.
> + */
> +
> + }; }; /* temporary struct nested in union for ABI compatibility */
> +
Can we add a deprecation notice also in this patch to remove these temporary
Struct and union, so that we remember to remove them in 21.11
> +/**
> + * Data-unit supported lengths of cipher algorithms.
> + * A bit can represent any set of data-unit sizes
> + * (single size, multiple size, range, etc).
> + */
> +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES (1 << 0)
> +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES (1 << 1)
> +
> /**
> * Symmetric Crypto Capability
> */
> @@ -127,6 +135,11 @@ struct rte_cryptodev_symmetric_capability {
> /**< cipher key size range */
> struct rte_crypto_param_range iv_size;
> /**< Initialisation vector data size range */
> + uint32_t dataunit_set;
> + /**<
> + * A bitmap for a set of the supported data-unit
> lengths.
Add reference to the newly created macros here
> + * 0 for any length defined in the algorithm standard.
> + */
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v10 1/4] devtools: add exception for reserved fields
@ 2021-04-14 18:04 4% ` gakhil
2021-04-14 20:57 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: gakhil @ 2021-04-14 18:04 UTC (permalink / raw)
To: jerinj, thomas, dev, mdr, david.marchand
Cc: abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
anoobj, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, pbhagavatula, harry.van.haaren, sthotton,
Akhil Goyal
From: Akhil Goyal <gakhil@marvell.com>
Certain structures are added with reserved fields
to address any future enhancements to retain ABI
compatibility.
However, ABI script will still report error as it
is not aware of reserved fields. Hence, adding a
generic exception for reserved fields.
Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
devtools/libabigail.abignore | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 6c0b38984..654755314 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -19,4 +19,8 @@
; Ignore fields inserted in cacheline boundary of rte_cryptodev
[suppress_type]
name = rte_cryptodev
- has_data_member_inserted_between = {offset_after(attached), end}
\ No newline at end of file
+ has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore changes in reserved fields
+[suppress_variable]
+ name_regexp = reserved
--
2.25.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v9 4/4] devtools: add exception for reserved fields
2021-04-14 14:16 0% ` [dpdk-dev] [EXT] " Akhil Goyal
@ 2021-04-14 14:22 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-14 14:22 UTC (permalink / raw)
To: Akhil Goyal
Cc: Jerin Jacob Kollanukkaran, dev, mdr, david.marchand,
abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
14/04/2021 16:16, Akhil Goyal:
> Hi Thomas,
>
> > 14/04/2021 14:20, gakhil@marvell.com:
> > > From: Akhil Goyal <gakhil@marvell.com>
> > >
> > > Certain structures are added with reserved fields
> > > to address any future enhancements to retain ABI
> > > compatibility.
> > > However, ABI script will still report error as it
> > > is not aware of reserved fields. Hence, adding a
> > > generic exception for reserved fields.
> > >
> > > Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> > > ---
> > >
> > > devtools/libabigail.abignore | 4 ++++
> > > 1 file changed, 4 insertions(+)
> > >
> > > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> > > index 46a5a6af5..a9d284f76 100644
> > > --- a/devtools/libabigail.abignore
> > > +++ b/devtools/libabigail.abignore
> > > @@ -25,3 +25,7 @@
> > >
> > > [suppress_type]
> > >
> > > name = rte_eventdev
> > > has_data_member_inserted_between = {offset_after(attached), end}
> > >
> > > +
> > > +; Ignore changes in reserved fields
> > > +[suppress_variable]
> > > + name_regexp = reserved
> >
> > If we do that as first patch of this series,
> > we don't need the exception on rte_eventdev, right?
>
> It will still be required, as we have 2 issues
> 1. Reserved_ptr[4] to reserved[3]
> 2. Additional member ca_enqueue added
>
> So we need both.
If this patch is required, it should not be the last one.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v9 4/4] devtools: add exception for reserved fields
2021-04-14 12:53 0% ` Thomas Monjalon
@ 2021-04-14 14:16 0% ` Akhil Goyal
2021-04-14 14:22 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-14 14:16 UTC (permalink / raw)
To: Thomas Monjalon
Cc: Jerin Jacob Kollanukkaran, dev, mdr, david.marchand,
abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
Hi Thomas,
14/04/2021 14:20, gakhil@marvell.com:
> From: Akhil Goyal <gakhil@marvell.com>
>
> Certain structures are added with reserved fields
> to address any future enhancements to retain ABI
> compatibility.
> However, ABI script will still report error as it
> is not aware of reserved fields. Hence, adding a
> generic exception for reserved fields.
>
> Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> ---
> devtools/libabigail.abignore | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index 46a5a6af5..a9d284f76 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -25,3 +25,7 @@
> [suppress_type]
> name = rte_eventdev
> has_data_member_inserted_between = {offset_after(attached), end}
> +
> +; Ignore changes in reserved fields
> +[suppress_variable]
> + name_regexp = reserved
If we do that as first patch of this series,
we don't need the exception on rte_eventdev, right?
It will still be required, as we have 2 issues
1. Reserved_ptr[4] to reserved[3]
2. Additional member ca_enqueue added
So we need both.
Regards,
Akhil
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v9 4/4] devtools: add exception for reserved fields
2021-04-14 12:20 4% ` [dpdk-dev] [PATCH v9 4/4] devtools: add exception for reserved fields gakhil
@ 2021-04-14 12:53 0% ` Thomas Monjalon
2021-04-14 14:16 0% ` [dpdk-dev] [EXT] " Akhil Goyal
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-14 12:53 UTC (permalink / raw)
To: Akhil Goyal
Cc: jerinj, dev, mdr, david.marchand, abhinandan.gujjar,
hemant.agrawal, nipun.gupta, sachin.saxena, anoobj, matan,
roy.fan.zhang, g.singh, erik.g.carrillo, jay.jayatheerthan,
pbhagavatula, harry.van.haaren, sthotton
14/04/2021 14:20, gakhil@marvell.com:
> From: Akhil Goyal <gakhil@marvell.com>
>
> Certain structures are added with reserved fields
> to address any future enhancements to retain ABI
> compatibility.
> However, ABI script will still report error as it
> is not aware of reserved fields. Hence, adding a
> generic exception for reserved fields.
>
> Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> ---
> devtools/libabigail.abignore | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index 46a5a6af5..a9d284f76 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -25,3 +25,7 @@
> [suppress_type]
> name = rte_eventdev
> has_data_member_inserted_between = {offset_after(attached), end}
> +
> +; Ignore changes in reserved fields
> +[suppress_variable]
> + name_regexp = reserved
If we do that as first patch of this series,
we don't need the exception on rte_eventdev, right?
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v9 4/4] devtools: add exception for reserved fields
@ 2021-04-14 12:20 4% ` gakhil
2021-04-14 12:53 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: gakhil @ 2021-04-14 12:20 UTC (permalink / raw)
To: jerinj, thomas, dev, mdr, david.marchand
Cc: abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
anoobj, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, pbhagavatula, harry.van.haaren, sthotton,
Akhil Goyal
From: Akhil Goyal <gakhil@marvell.com>
Certain structures are added with reserved fields
to address any future enhancements to retain ABI
compatibility.
However, ABI script will still report error as it
is not aware of reserved fields. Hence, adding a
generic exception for reserved fields.
Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
devtools/libabigail.abignore | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 46a5a6af5..a9d284f76 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -25,3 +25,7 @@
[suppress_type]
name = rte_eventdev
has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore changes in reserved fields
+[suppress_variable]
+ name_regexp = reserved
--
2.25.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
2021-04-14 10:40 0% ` Ferruh Yigit
@ 2021-04-14 10:56 0% ` Ananyev, Konstantin
0 siblings, 0 replies; 200+ results
From: Ananyev, Konstantin @ 2021-04-14 10:56 UTC (permalink / raw)
To: Yigit, Ferruh, Lijun Ou, thomas, Ori Kam, Andrew Rybchenko; +Cc: dev, linuxarm
> Hi Lijun,
>
> Let's try to complete this for the release.
>
> On 4/6/2021 3:02 PM, Ananyev, Konstantin wrote:
> > Hi,
> >
> >> Currently, upper-layer application could get queue state only
> >> through pointers such as dev->data->tx_queue_state[queue_id],
> >> this is not the recommended way to access it. So this patch
> >> add get queue state when call rte_eth_rx_queue_info_get and
> >> rte_eth_tx_queue_info_get API.
> >>
> >> Note: The hairpin queue is not supported with above
> >> rte_eth_*x_queue_info_get, so the queue state could be
> >> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >
> > I wonder why RTE_ETH_QUEUE_STATE_HAIRPIN Is not supported?
> > Obviously what we do - copy internal queue state to the user provided buffer.
> >
>
> +1, with current implementation we can't say it is only for start & stop.
>
> Since 'STATE_HAIRPIN' is all internal, it may be possible to separate it into
With this patch - not any more, as we move RTE_ETH_QUEUE_STATE_* Defines
into rte_ethdev.h.
> its own variable and expose only start and stop, but I don't think it worth the
> effort, why not just expose all possible states.
>
>
> >> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >> it could be ABI compatible.
> >>
> >> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >> ---
> >> V1->V2:
> >> - move queue state defines to public file
> >> ---
> >> doc/guides/rel_notes/release_21_05.rst | 6 ++++++
> >> lib/librte_ethdev/ethdev_driver.h | 7 -------
> >> lib/librte_ethdev/rte_ethdev.c | 3 +++
> >> lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++
> >> 4 files changed, 20 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
> >> index 22aa80a..503daf9 100644
> >> --- a/doc/guides/rel_notes/release_21_05.rst
> >> +++ b/doc/guides/rel_notes/release_21_05.rst
> >> @@ -164,6 +164,12 @@ ABI Changes
> >>
> >> * No ABI change that would break compatibility with 20.11.
> >>
> >> +* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
> >> + to provide indicated rxq queue state.
> >> +
> >> +* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
> >> + to provide indicated txq queue state.
> >> +
> >>
> >> Known Issues
> >> ------------
> >> diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
> >> index cdd4b43..ec5a17d 100644
> >> --- a/lib/librte_ethdev/ethdev_driver.h
> >> +++ b/lib/librte_ethdev/ethdev_driver.h
> >> @@ -970,13 +970,6 @@ struct eth_dev_ops {
> >> };
> >>
> >> /**
> >> - * RX/TX queue states
> >> - */
> >> -#define RTE_ETH_QUEUE_STATE_STOPPED 0
> >> -#define RTE_ETH_QUEUE_STATE_STARTED 1
> >> -#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> >> -
> >> -/**
> >> * @internal
> >> * Check if the selected Rx queue is hairpin queue.
> >> *
> >> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> >> index 3059aa5..fbd10b2 100644
> >> --- a/lib/librte_ethdev/rte_ethdev.c
> >> +++ b/lib/librte_ethdev/rte_ethdev.c
> >> @@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
> >>
> >> memset(qinfo, 0, sizeof(*qinfo));
> >> dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
> >> +qinfo->queue_state = dev->data->rx_queue_state[queue_id];
> >> +
> >> return 0;
> >> }
> >>
> >> @@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
> >>
> >> memset(qinfo, 0, sizeof(*qinfo));
> >> dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
> >> +qinfo->queue_state = dev->data->tx_queue_state[queue_id];
> >>
> >> return 0;
> >> }
> >> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> >> index efda313..4f0b1b2 100644
> >> --- a/lib/librte_ethdev/rte_ethdev.h
> >> +++ b/lib/librte_ethdev/rte_ethdev.h
> >> @@ -1582,6 +1582,13 @@ struct rte_eth_dev_info {
> >> };
> >>
> >> /**
> >> + * RX/TX queue states
> >> + */
> >> +#define RTE_ETH_QUEUE_STATE_STOPPED 0
> >> +#define RTE_ETH_QUEUE_STATE_STARTED 1
> >> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> >> +
> >> +/**
> >> * Ethernet device RX queue information structure.
> >> * Used to retrieve information about configured queue.
> >> */
> >> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
> >> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >> uint16_t nb_desc; /**< configured number of RXDs. */
> >> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >> +/**< Queues state: STARTED(1) / STOPPED(0). */
> >
> > I think comment has to state that possible values are one of
> > RTE_ETH_QUEUE_STATE_*.
> > About previous discussion about new field in this struct vs new API function,
> > I still think new function will be a bit cleaner, but could live with both.
> >
> >> +uint8_t queue_state;
> >
> > If we'll go with new 1B field, then as Stephen pointed,
> > it is probably worth to fill the hole between scattered_rx
> > and nb_desc with this new filed.
> >
>
> +1
>
> >> } __rte_cache_min_aligned;
> >>
> >> /**
> >> @@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info {
> >> struct rte_eth_txq_info {
> >> struct rte_eth_txconf conf; /**< queue config parameters. */
> >> uint16_t nb_desc; /**< configured number of TXDs. */
> >> +/**< Queues state: STARTED(1) / STOPPED(0). */
> >
> > Same about comment here.
> >
> >> +uint8_t queue_state;
> >> } __rte_cache_min_aligned;
> >>
> >> /* Generic Burst mode flag definition, values can be ORed. */
> >> --
> >> 2.7.4
> >
>
>
> Other comments I case see:
>
> 1- Make QUEUE_STATE enum
> For consistency with existing usage I think we can keep it as it is
>
> 2- Make a specific API to get the queue state
> No strong opinion, I think we can go with this one
>
> 3- Use enum type in "struct rte_eth_rxq_info"
> Which make sense but we don't have space in current struct, also
> 'rte_eth_dev_data' has variable to hold same, and for consistency if we change
> it to enum in it, that is even wider change. I think it doesn't worth the effort
> and we can continue with 'uint8_t'
>
> Please add if any is missing, and if there is any strong opinion on above.
>
>
> If there is no objection, only required changes are above two issues commented
> inline,
> - Remove comment/note that this is only for start/stop states
> - Replace the field location to benefit from gap in struct
Sounds good to me.
Konstantin
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
2021-04-06 14:02 0% ` Ananyev, Konstantin
@ 2021-04-14 10:40 0% ` Ferruh Yigit
2021-04-14 10:56 0% ` Ananyev, Konstantin
0 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2021-04-14 10:40 UTC (permalink / raw)
To: Ananyev, Konstantin, Lijun Ou, thomas, Ori Kam, Andrew Rybchenko
Cc: dev, linuxarm
Hi Lijun,
Let's try to complete this for the release.
On 4/6/2021 3:02 PM, Ananyev, Konstantin wrote:
> Hi,
>
>> Currently, upper-layer application could get queue state only
>> through pointers such as dev->data->tx_queue_state[queue_id],
>> this is not the recommended way to access it. So this patch
>> add get queue state when call rte_eth_rx_queue_info_get and
>> rte_eth_tx_queue_info_get API.
>>
>> Note: The hairpin queue is not supported with above
>> rte_eth_*x_queue_info_get, so the queue state could be
>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>
> I wonder why RTE_ETH_QUEUE_STATE_HAIRPIN Is not supported?
> Obviously what we do - copy internal queue state to the user provided buffer.
>
+1, with current implementation we can't say it is only for start & stop.
Since 'STATE_HAIRPIN' is all internal, it may be possible to separate it into
its own variable and expose only start and stop, but I don't think it worth the
effort, why not just expose all possible states.
>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>> it could be ABI compatible.
>>
>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>> ---
>> V1->V2:
>> - move queue state defines to public file
>> ---
>> doc/guides/rel_notes/release_21_05.rst | 6 ++++++
>> lib/librte_ethdev/ethdev_driver.h | 7 -------
>> lib/librte_ethdev/rte_ethdev.c | 3 +++
>> lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++
>> 4 files changed, 20 insertions(+), 7 deletions(-)
>>
>> diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
>> index 22aa80a..503daf9 100644
>> --- a/doc/guides/rel_notes/release_21_05.rst
>> +++ b/doc/guides/rel_notes/release_21_05.rst
>> @@ -164,6 +164,12 @@ ABI Changes
>>
>> * No ABI change that would break compatibility with 20.11.
>>
>> +* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
>> + to provide indicated rxq queue state.
>> +
>> +* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
>> + to provide indicated txq queue state.
>> +
>>
>> Known Issues
>> ------------
>> diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
>> index cdd4b43..ec5a17d 100644
>> --- a/lib/librte_ethdev/ethdev_driver.h
>> +++ b/lib/librte_ethdev/ethdev_driver.h
>> @@ -970,13 +970,6 @@ struct eth_dev_ops {
>> };
>>
>> /**
>> - * RX/TX queue states
>> - */
>> -#define RTE_ETH_QUEUE_STATE_STOPPED 0
>> -#define RTE_ETH_QUEUE_STATE_STARTED 1
>> -#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>> -
>> -/**
>> * @internal
>> * Check if the selected Rx queue is hairpin queue.
>> *
>> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
>> index 3059aa5..fbd10b2 100644
>> --- a/lib/librte_ethdev/rte_ethdev.c
>> +++ b/lib/librte_ethdev/rte_ethdev.c
>> @@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>>
>> memset(qinfo, 0, sizeof(*qinfo));
>> dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
>> +qinfo->queue_state = dev->data->rx_queue_state[queue_id];
>> +
>> return 0;
>> }
>>
>> @@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>>
>> memset(qinfo, 0, sizeof(*qinfo));
>> dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
>> +qinfo->queue_state = dev->data->tx_queue_state[queue_id];
>>
>> return 0;
>> }
>> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
>> index efda313..4f0b1b2 100644
>> --- a/lib/librte_ethdev/rte_ethdev.h
>> +++ b/lib/librte_ethdev/rte_ethdev.h
>> @@ -1582,6 +1582,13 @@ struct rte_eth_dev_info {
>> };
>>
>> /**
>> + * RX/TX queue states
>> + */
>> +#define RTE_ETH_QUEUE_STATE_STOPPED 0
>> +#define RTE_ETH_QUEUE_STATE_STARTED 1
>> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>> +
>> +/**
>> * Ethernet device RX queue information structure.
>> * Used to retrieve information about configured queue.
>> */
>> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>> uint16_t nb_desc; /**< configured number of RXDs. */
>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>> +/**< Queues state: STARTED(1) / STOPPED(0). */
>
> I think comment has to state that possible values are one of
> RTE_ETH_QUEUE_STATE_*.
> About previous discussion about new field in this struct vs new API function,
> I still think new function will be a bit cleaner, but could live with both.
>
>> +uint8_t queue_state;
>
> If we'll go with new 1B field, then as Stephen pointed,
> it is probably worth to fill the hole between scattered_rx
> and nb_desc with this new filed.
>
+1
>> } __rte_cache_min_aligned;
>>
>> /**
>> @@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info {
>> struct rte_eth_txq_info {
>> struct rte_eth_txconf conf; /**< queue config parameters. */
>> uint16_t nb_desc; /**< configured number of TXDs. */
>> +/**< Queues state: STARTED(1) / STOPPED(0). */
>
> Same about comment here.
>
>> +uint8_t queue_state;
>> } __rte_cache_min_aligned;
>>
>> /* Generic Burst mode flag definition, values can be ORed. */
>> --
>> 2.7.4
>
Other comments I case see:
1- Make QUEUE_STATE enum
For consistency with existing usage I think we can keep it as it is
2- Make a specific API to get the queue state
No strong opinion, I think we can go with this one
3- Use enum type in "struct rte_eth_rxq_info"
Which make sense but we don't have space in current struct, also
'rte_eth_dev_data' has variable to hold same, and for consistency if we change
it to enum in it, that is even wider change. I think it doesn't worth the effort
and we can continue with 'uint8_t'
Please add if any is missing, and if there is any strong opinion on above.
If there is no objection, only required changes are above two issues commented
inline,
- Remove comment/note that this is only for start/stop states
- Replace the field location to benefit from gap in struct
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
@ 2021-04-14 10:09 3% ` Ferruh Yigit
0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2021-04-14 10:09 UTC (permalink / raw)
To: Stephen Hemminger, oulijun; +Cc: dev, Thomas Monjalon
On 4/6/2021 2:55 AM, Stephen Hemminger wrote:
> On Tue, 6 Apr 2021 08:49:04 +0800
> oulijun <oulijun@huawei.com> wrote:
>
>>> /**
>>> + * RX/TX queue states
>>> + */
>>> +#define RTE_ETH_QUEUE_STATE_STOPPED 0
>>> +#define RTE_ETH_QUEUE_STATE_STARTED 1
>>> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>
> These could be an enum?
>
These values are already used to assign to
'rte_eth_dev_data->[rt]x_queue_state', which are 'uint8_t', end we can't change
them to 'enum' because of ABI concerns, so I think we can keep them as it is.
>>> +/**
>>> * Ethernet device RX queue information structure.
>>> * Used to retrieve information about configured queue.
>>> */
>>> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>
> There is a one byte hole here waiting to be used.
> Why not use that?
>
+1
>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>> + uint8_t queue_state;
>>> } __rte_cache_min_aligned;
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API
2021-04-14 8:39 0% ` [dpdk-dev] [EXT] " Akhil Goyal
@ 2021-04-14 8:43 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-14 8:43 UTC (permalink / raw)
To: Akhil Goyal
Cc: Jerin Jacob Kollanukkaran, dev, Ray Kinsella, David Marchand,
abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
14/04/2021 10:39, Akhil Goyal:
> Hi Thomas,
>
> > 14/04/2021 09:58, Akhil Goyal:
> > > Hi,
> > > > > +
> > > > > #define RTE_EVENTDEV_NAME_MAX_LEN (64)
> > > > > /**< @internal Max length of name of event PMD */
> > > > >
> > > > > @@ -1423,6 +1427,8 @@ struct rte_eventdev {
> > > > > */
> > > > > event_tx_adapter_enqueue txa_enqueue;
> > > > > /**< Pointer to PMD eth Tx adapter enqueue function. */
> > > > > + event_crypto_adapter_enqueue ca_enqueue;
> > > > > + /**< Pointer to PMD crypto adapter enqueue function. */
> > > > > struct rte_eventdev_data *data;
> > > > > /**< Pointer to device data */
> > > > > struct rte_eventdev_ops *dev_ops;
> > > > > @@ -1435,7 +1441,7 @@ struct rte_eventdev {
> > > > > /**< Flag indicating the device is attached */
> > > > >
> > > > > uint64_t reserved_64s[4]; /**< Reserved for future fields */
> > > > > - void *reserved_ptrs[4]; /**< Reserved for future fields */
> > > > > + void *reserved_ptrs[3]; /**< Reserved for future fields */
> > > > > } __rte_cache_aligned;
> > > >
> > > >
> > > > This change has following ABI breakage[1].
> > > >
> > > > Could you move ca_enqueue at end of struct to avoid the ABI breakage.
> > Also,
> > > > please update depreciation notice to move ca_enqueue to above(to align
> > > > with function pointers) in 21.11 release.
> > > >
> > > > [1]
> > > > [C]'function rte_eventdev* rte_event_pmd_allocate(const char*, int)' at
> > > > rte_eventdev.c:1467:1 has some indirect sub-type changes:
> > > > return type changed:
> > > > in pointed to type 'struct rte_eventdev' at rte_eventdev.h:1411:1:
> > > > type size hasn't changed
> > > > 1 data member insertion:
> > > > 'event_crypto_adapter_enqueue rte_eventdev::ca_enqueue', at
> > offset
> > > > 512 (in bits) at rte_eventdev.h:1430:1
> > > > 5 data member changes:
> > > > 'rte_eventdev_data* rte_eventdev::data' offset changed from 512 to
> > > > 576 (in bits) (by +64 bits)
> > > > 'rte_eventdev_ops* rte_eventdev::dev_ops' offset changed from
> > 576 to
> > > > 640 (in bits) (by +64 bits)
> > > > 'rte_device* rte_eventdev::dev' offset changed from 640 to 704 (in
> > bits)
> > > > (by +64 bits)
> > > > 'uint64_t rte_eventdev::reserved_64s[4]' offset changed from 768 to
> > > > 832 (in bits) (by +64 bits)
> > > > type of 'void* rte_eventdev::reserved_ptrs[4]' changed:
> > > > type name changed from 'void*[4]' to 'void*[3]'
> > > > array type size changed from 256 to 192
> > > > array type subrange 1 changed length from 4 to 3
> > > > and offset changed from 1024 to 1088 (in bits) (by +64 bits)
> > > >
> > > >
> > > Yes my bad, it should be added in the end.
> > > But abi script will still shout for 'void*[4]' to 'void*[3]' conversion.
> > > We may need to add something in the devtools/libabigail.abignore
> > > So that, CI is not broken when reserved fields are changed.
> > > Otherwise, it does not make sense to introduce reserve fields.
> > > Can we have something generic for reserved fields?
> > > Any suggestions?
> >
> > The ABI check is not aware about the reserved fields.
> > It needs to be added in libabigail.ignore.
> >
> Can I add a generic ignore for all reserved fields.
>
> +; Ignore changes in reserved fields
> +[suppress_variable]
> + name_regexp = reserved
You can propose in a separate patch in your series.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API
2021-04-14 8:18 3% ` Thomas Monjalon
@ 2021-04-14 8:39 0% ` Akhil Goyal
2021-04-14 8:43 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-14 8:39 UTC (permalink / raw)
To: Thomas Monjalon
Cc: Jerin Jacob Kollanukkaran, dev, Ray Kinsella, David Marchand,
abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
Hi Thomas,
> 14/04/2021 09:58, Akhil Goyal:
> > Hi,
> > > > +
> > > > #define RTE_EVENTDEV_NAME_MAX_LEN (64)
> > > > /**< @internal Max length of name of event PMD */
> > > >
> > > > @@ -1423,6 +1427,8 @@ struct rte_eventdev {
> > > > */
> > > > event_tx_adapter_enqueue txa_enqueue;
> > > > /**< Pointer to PMD eth Tx adapter enqueue function. */
> > > > + event_crypto_adapter_enqueue ca_enqueue;
> > > > + /**< Pointer to PMD crypto adapter enqueue function. */
> > > > struct rte_eventdev_data *data;
> > > > /**< Pointer to device data */
> > > > struct rte_eventdev_ops *dev_ops;
> > > > @@ -1435,7 +1441,7 @@ struct rte_eventdev {
> > > > /**< Flag indicating the device is attached */
> > > >
> > > > uint64_t reserved_64s[4]; /**< Reserved for future fields */
> > > > - void *reserved_ptrs[4]; /**< Reserved for future fields */
> > > > + void *reserved_ptrs[3]; /**< Reserved for future fields */
> > > > } __rte_cache_aligned;
> > >
> > >
> > > This change has following ABI breakage[1].
> > >
> > > Could you move ca_enqueue at end of struct to avoid the ABI breakage.
> Also,
> > > please update depreciation notice to move ca_enqueue to above(to align
> > > with function pointers) in 21.11 release.
> > >
> > > [1]
> > > [C]'function rte_eventdev* rte_event_pmd_allocate(const char*, int)' at
> > > rte_eventdev.c:1467:1 has some indirect sub-type changes:
> > > return type changed:
> > > in pointed to type 'struct rte_eventdev' at rte_eventdev.h:1411:1:
> > > type size hasn't changed
> > > 1 data member insertion:
> > > 'event_crypto_adapter_enqueue rte_eventdev::ca_enqueue', at
> offset
> > > 512 (in bits) at rte_eventdev.h:1430:1
> > > 5 data member changes:
> > > 'rte_eventdev_data* rte_eventdev::data' offset changed from 512 to
> > > 576 (in bits) (by +64 bits)
> > > 'rte_eventdev_ops* rte_eventdev::dev_ops' offset changed from
> 576 to
> > > 640 (in bits) (by +64 bits)
> > > 'rte_device* rte_eventdev::dev' offset changed from 640 to 704 (in
> bits)
> > > (by +64 bits)
> > > 'uint64_t rte_eventdev::reserved_64s[4]' offset changed from 768 to
> > > 832 (in bits) (by +64 bits)
> > > type of 'void* rte_eventdev::reserved_ptrs[4]' changed:
> > > type name changed from 'void*[4]' to 'void*[3]'
> > > array type size changed from 256 to 192
> > > array type subrange 1 changed length from 4 to 3
> > > and offset changed from 1024 to 1088 (in bits) (by +64 bits)
> > >
> > >
> > Yes my bad, it should be added in the end.
> > But abi script will still shout for 'void*[4]' to 'void*[3]' conversion.
> > We may need to add something in the devtools/libabigail.abignore
> > So that, CI is not broken when reserved fields are changed.
> > Otherwise, it does not make sense to introduce reserve fields.
> > Can we have something generic for reserved fields?
> > Any suggestions?
>
> The ABI check is not aware about the reserved fields.
> It needs to be added in libabigail.ignore.
>
Can I add a generic ignore for all reserved fields.
+; Ignore changes in reserved fields
+[suppress_variable]
+ name_regexp = reserved
Regards,
Akhil
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API
2021-04-14 7:58 3% ` Akhil Goyal
@ 2021-04-14 8:18 3% ` Thomas Monjalon
2021-04-14 8:39 0% ` [dpdk-dev] [EXT] " Akhil Goyal
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-14 8:18 UTC (permalink / raw)
To: Akhil Goyal
Cc: Jerin Jacob Kollanukkaran, dev, Ray Kinsella, David Marchand,
abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
14/04/2021 09:58, Akhil Goyal:
> Hi,
> > > +
> > > #define RTE_EVENTDEV_NAME_MAX_LEN (64)
> > > /**< @internal Max length of name of event PMD */
> > >
> > > @@ -1423,6 +1427,8 @@ struct rte_eventdev {
> > > */
> > > event_tx_adapter_enqueue txa_enqueue;
> > > /**< Pointer to PMD eth Tx adapter enqueue function. */
> > > + event_crypto_adapter_enqueue ca_enqueue;
> > > + /**< Pointer to PMD crypto adapter enqueue function. */
> > > struct rte_eventdev_data *data;
> > > /**< Pointer to device data */
> > > struct rte_eventdev_ops *dev_ops;
> > > @@ -1435,7 +1441,7 @@ struct rte_eventdev {
> > > /**< Flag indicating the device is attached */
> > >
> > > uint64_t reserved_64s[4]; /**< Reserved for future fields */
> > > - void *reserved_ptrs[4]; /**< Reserved for future fields */
> > > + void *reserved_ptrs[3]; /**< Reserved for future fields */
> > > } __rte_cache_aligned;
> >
> >
> > This change has following ABI breakage[1].
> >
> > Could you move ca_enqueue at end of struct to avoid the ABI breakage. Also,
> > please update depreciation notice to move ca_enqueue to above(to align
> > with function pointers) in 21.11 release.
> >
> > [1]
> > [C]'function rte_eventdev* rte_event_pmd_allocate(const char*, int)' at
> > rte_eventdev.c:1467:1 has some indirect sub-type changes:
> > return type changed:
> > in pointed to type 'struct rte_eventdev' at rte_eventdev.h:1411:1:
> > type size hasn't changed
> > 1 data member insertion:
> > 'event_crypto_adapter_enqueue rte_eventdev::ca_enqueue', at offset
> > 512 (in bits) at rte_eventdev.h:1430:1
> > 5 data member changes:
> > 'rte_eventdev_data* rte_eventdev::data' offset changed from 512 to
> > 576 (in bits) (by +64 bits)
> > 'rte_eventdev_ops* rte_eventdev::dev_ops' offset changed from 576 to
> > 640 (in bits) (by +64 bits)
> > 'rte_device* rte_eventdev::dev' offset changed from 640 to 704 (in bits)
> > (by +64 bits)
> > 'uint64_t rte_eventdev::reserved_64s[4]' offset changed from 768 to
> > 832 (in bits) (by +64 bits)
> > type of 'void* rte_eventdev::reserved_ptrs[4]' changed:
> > type name changed from 'void*[4]' to 'void*[3]'
> > array type size changed from 256 to 192
> > array type subrange 1 changed length from 4 to 3
> > and offset changed from 1024 to 1088 (in bits) (by +64 bits)
> >
> >
> Yes my bad, it should be added in the end.
> But abi script will still shout for 'void*[4]' to 'void*[3]' conversion.
> We may need to add something in the devtools/libabigail.abignore
> So that, CI is not broken when reserved fields are changed.
> Otherwise, it does not make sense to introduce reserve fields.
> Can we have something generic for reserved fields?
> Any suggestions?
The ABI check is not aware about the reserved fields.
It needs to be added in libabigail.ignore.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API
2021-04-14 7:28 4% ` Jerin Jacob Kollanukkaran
@ 2021-04-14 7:58 3% ` Akhil Goyal
2021-04-14 8:18 3% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Akhil Goyal @ 2021-04-14 7:58 UTC (permalink / raw)
To: Jerin Jacob Kollanukkaran, dev, Ray Kinsella, David Marchand,
NBU-Contact-Thomas Monjalon
Cc: abhinandan.gujjar, hemant.agrawal, nipun.gupta, sachin.saxena,
Anoob Joseph, matan, roy.fan.zhang, g.singh, erik.g.carrillo,
jay.jayatheerthan, Pavan Nikhilesh Bhagavatula, harry.van.haaren,
Shijith Thotton
Hi,
> > +
> > #define RTE_EVENTDEV_NAME_MAX_LEN (64)
> > /**< @internal Max length of name of event PMD */
> >
> > @@ -1423,6 +1427,8 @@ struct rte_eventdev {
> > */
> > event_tx_adapter_enqueue txa_enqueue;
> > /**< Pointer to PMD eth Tx adapter enqueue function. */
> > + event_crypto_adapter_enqueue ca_enqueue;
> > + /**< Pointer to PMD crypto adapter enqueue function. */
> > struct rte_eventdev_data *data;
> > /**< Pointer to device data */
> > struct rte_eventdev_ops *dev_ops;
> > @@ -1435,7 +1441,7 @@ struct rte_eventdev {
> > /**< Flag indicating the device is attached */
> >
> > uint64_t reserved_64s[4]; /**< Reserved for future fields */
> > - void *reserved_ptrs[4]; /**< Reserved for future fields */
> > + void *reserved_ptrs[3]; /**< Reserved for future fields */
> > } __rte_cache_aligned;
>
>
> This change has following ABI breakage[1].
>
> Could you move ca_enqueue at end of struct to avoid the ABI breakage. Also,
> please update depreciation notice to move ca_enqueue to above(to align
> with function pointers) in 21.11 release.
>
> [1]
> [C]'function rte_eventdev* rte_event_pmd_allocate(const char*, int)' at
> rte_eventdev.c:1467:1 has some indirect sub-type changes:
> return type changed:
> in pointed to type 'struct rte_eventdev' at rte_eventdev.h:1411:1:
> type size hasn't changed
> 1 data member insertion:
> 'event_crypto_adapter_enqueue rte_eventdev::ca_enqueue', at offset
> 512 (in bits) at rte_eventdev.h:1430:1
> 5 data member changes:
> 'rte_eventdev_data* rte_eventdev::data' offset changed from 512 to
> 576 (in bits) (by +64 bits)
> 'rte_eventdev_ops* rte_eventdev::dev_ops' offset changed from 576 to
> 640 (in bits) (by +64 bits)
> 'rte_device* rte_eventdev::dev' offset changed from 640 to 704 (in bits)
> (by +64 bits)
> 'uint64_t rte_eventdev::reserved_64s[4]' offset changed from 768 to
> 832 (in bits) (by +64 bits)
> type of 'void* rte_eventdev::reserved_ptrs[4]' changed:
> type name changed from 'void*[4]' to 'void*[3]'
> array type size changed from 256 to 192
> array type subrange 1 changed length from 4 to 3
> and offset changed from 1024 to 1088 (in bits) (by +64 bits)
>
>
Yes my bad, it should be added in the end.
But abi script will still shout for 'void*[4]' to 'void*[3]' conversion.
We may need to add something in the devtools/libabigail.abignore
So that, CI is not broken when reserved fields are changed.
Otherwise, it does not make sense to introduce reserve fields.
Can we have something generic for reserved fields?
Any suggestions?
Regards,
Akhil
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API
@ 2021-04-14 7:28 4% ` Jerin Jacob Kollanukkaran
2021-04-14 7:58 3% ` Akhil Goyal
1 sibling, 1 reply; 200+ results
From: Jerin Jacob Kollanukkaran @ 2021-04-14 7:28 UTC (permalink / raw)
To: Shijith Thotton, dev
Cc: Akhil Goyal, thomas, abhinandan.gujjar, hemant.agrawal,
nipun.gupta, sachin.saxena, Anoob Joseph, matan, roy.fan.zhang,
g.singh, erik.g.carrillo, jay.jayatheerthan,
Pavan Nikhilesh Bhagavatula, harry.van.haaren, Shijith Thotton,
Ray Kinsella, David Marchand
> +
> #define RTE_EVENTDEV_NAME_MAX_LEN (64)
> /**< @internal Max length of name of event PMD */
>
> @@ -1423,6 +1427,8 @@ struct rte_eventdev {
> */
> event_tx_adapter_enqueue txa_enqueue;
> /**< Pointer to PMD eth Tx adapter enqueue function. */
> + event_crypto_adapter_enqueue ca_enqueue;
> + /**< Pointer to PMD crypto adapter enqueue function. */
> struct rte_eventdev_data *data;
> /**< Pointer to device data */
> struct rte_eventdev_ops *dev_ops;
> @@ -1435,7 +1441,7 @@ struct rte_eventdev {
> /**< Flag indicating the device is attached */
>
> uint64_t reserved_64s[4]; /**< Reserved for future fields */
> - void *reserved_ptrs[4]; /**< Reserved for future fields */
> + void *reserved_ptrs[3]; /**< Reserved for future fields */
> } __rte_cache_aligned;
This change has following ABI breakage[1].
Could you move ca_enqueue at end of struct to avoid the ABI breakage. Also, please update depreciation notice to move ca_enqueue to above(to align with function pointers) in 21.11 release.
[1]
[C]'function rte_eventdev* rte_event_pmd_allocate(const char*, int)' at rte_eventdev.c:1467:1 has some indirect sub-type changes:
return type changed:
in pointed to type 'struct rte_eventdev' at rte_eventdev.h:1411:1:
type size hasn't changed
1 data member insertion:
'event_crypto_adapter_enqueue rte_eventdev::ca_enqueue', at offset 512 (in bits) at rte_eventdev.h:1430:1
5 data member changes:
'rte_eventdev_data* rte_eventdev::data' offset changed from 512 to 576 (in bits) (by +64 bits)
'rte_eventdev_ops* rte_eventdev::dev_ops' offset changed from 576 to 640 (in bits) (by +64 bits)
'rte_device* rte_eventdev::dev' offset changed from 640 to 704 (in bits) (by +64 bits)
'uint64_t rte_eventdev::reserved_64s[4]' offset changed from 768 to 832 (in bits) (by +64 bits)
type of 'void* rte_eventdev::reserved_ptrs[4]' changed:
type name changed from 'void*[4]' to 'void*[3]'
array type size changed from 256 to 192
array type subrange 1 changed length from 4 to 3
and offset changed from 1024 to 1088 (in bits) (by +64 bits)
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v4] cryptodev: support multiple cipher data-units
2021-04-13 18:19 4% ` [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units Thomas Monjalon
@ 2021-04-13 20:42 10% ` Thomas Monjalon
2021-04-14 18:37 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-14 20:21 10% ` [dpdk-dev] [PATCH v5] " Thomas Monjalon
2 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-13 20:42 UTC (permalink / raw)
To: dev
Cc: akhil.goyal, arkadiuszx.kusztal, anoobj, Matan Azrad,
Ray Kinsella, Neil Horman, Declan Doherty
From: Matan Azrad <matan@nvidia.com>
In cryptography, a block cipher is a deterministic algorithm operating
on fixed-length groups of bits, called blocks.
A block cipher consists of two paired algorithms, one for encryption
and the other for decryption. Both algorithms accept two inputs:
an input block of size n bits and a key of size k bits; and both yield
an n-bit output block. The decryption algorithm is defined to be the
inverse function of the encryption.
For AES standard the block size is 16 bytes.
For AES in XTS mode, the data to be encrypted\decrypted does not have to
be multiple of 16B size, the unit of data is called data-unit.
The data-unit size can be any size in range [16B, 2^24B], so, in this
case, a data stream is divided into N amount of equal data-units and
must be encrypted\decrypted in the same data-unit resolution.
For ABI compatibility reason, the size is limited to 64K (16-bit field).
The new field dataunit_len is inserted in a struct padding hole,
which is only 2 bytes long in 32-bit build.
It could be moved and extended later during an ABI-breakage window.
The current cryptodev API doesn't allow the user to select a specific
data-unit length supported by the devices.
In addition, there is no definition how the IV is detected per data-unit
when single operation includes more than one data-unit.
That causes applications to use single operation per data-unit even though
all the data is continuous in memory what reduces datapath performance.
Add a new feature flag to support multiple data-unit sizes, called
RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
Add a new field in cipher capability, called dataunit_set,
where the devices can report the range of the supported data-unit sizes.
Add a new cipher transformation field, called dataunit_len, where the user
can select the data-unit length for all the operations.
All the new fields do not change the size of their structures,
by filling some struct padding holes.
They are added as exceptions in the ABI check file libabigail.abignore.
Using a bitmap to report the supported data-unit sizes capability allows
the devices to report a range simply as same as the user to read it
simply. also, thus sizes are usually common and probably will be shared
among different devices.
Signed-off-by: Matan Azrad <matan@nvidia.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
v1:
- Use data-unit term instead of block.
- Update cipher length description in OP.
- Improve descriptions on xform and capability.
- Improve commit log.
v2:
- Fix typo: MULITPLE->MULTIPLE.
- Remain only planned supported sizes for data-unit capability.
v3:
- Improve some comments.
- Fix ABI breakage.
v4:
- Remove RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1M_BYTES
- Fix dataunit_len placement in padding hole
---
devtools/libabigail.abignore | 12 ++++++++-
doc/guides/cryptodevs/features/default.ini | 1 +
doc/guides/cryptodevs/overview.rst | 3 +++
doc/guides/rel_notes/release_21_05.rst | 6 +++++
lib/librte_cryptodev/rte_crypto_sym.h | 29 ++++++++++++++++++++--
lib/librte_cryptodev/rte_cryptodev.c | 2 ++
lib/librte_cryptodev/rte_cryptodev.h | 15 +++++++++++
7 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 6c0b38984e..bce940f2df 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -19,4 +19,14 @@
; Ignore fields inserted in cacheline boundary of rte_cryptodev
[suppress_type]
name = rte_cryptodev
- has_data_member_inserted_between = {offset_after(attached), end}
\ No newline at end of file
+ has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore fields inserted in union boundary of rte_cryptodev_symmetric_capability
+[suppress_type]
+ name = rte_cryptodev_symmetric_capability
+ has_data_member_inserted_between = {offset_after(cipher.iv_size), end}
+
+; Ignore fields inserted in middle padding of rte_crypto_cipher_xform
+[suppress_type]
+ name = rte_crypto_cipher_xform
+ has_data_member_inserted_between = {offset_after(key), offset_of(iv)}
diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini
index 17b177fc45..978bb30cc1 100644
--- a/doc/guides/cryptodevs/features/default.ini
+++ b/doc/guides/cryptodevs/features/default.ini
@@ -31,6 +31,7 @@ CPU crypto =
Symmetric sessionless =
Non-Byte aligned data =
Sym raw data path API =
+Cipher multiple data units =
;
; Supported crypto algorithms of a default crypto driver.
diff --git a/doc/guides/cryptodevs/overview.rst b/doc/guides/cryptodevs/overview.rst
index e2a1e08ec1..e24e3e1993 100644
--- a/doc/guides/cryptodevs/overview.rst
+++ b/doc/guides/cryptodevs/overview.rst
@@ -46,6 +46,9 @@ Supported Feature Flags
- "Digest encrypted" feature flag means PMD support hash-cipher cases,
where generated digest is appended to and encrypted with the data.
+ - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support operations
+ on multiple data-units message.
+
Supported Cipher Algorithms
---------------------------
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 9a666b629d..2dc776c35e 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -145,6 +145,12 @@ New Features
* Added support for preferred busy polling.
+* **Added support of multiple data-units in cryptodev API.**
+
+ The cryptodev library has been enhanced to allow operations on multiple
+ data-units for AES-XTS algorithm, the data-unit length should be set in the
+ transformation. A capability for it was added too.
+
* **Updated Mellanox RegEx PMD.**
* Added support for multi-segments mbuf.
diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h
index 9d572ec057..4e365b1eab 100644
--- a/lib/librte_cryptodev/rte_crypto_sym.h
+++ b/lib/librte_cryptodev/rte_crypto_sym.h
@@ -195,6 +195,9 @@ struct rte_crypto_cipher_xform {
enum rte_crypto_cipher_algorithm algo;
/**< Cipher algorithm */
+ RTE_STD_C11
+ union { /* temporary anonymous union for ABI compatibility */
+
struct {
const uint8_t *data; /**< pointer to key data */
uint16_t length; /**< key length in bytes */
@@ -222,6 +225,27 @@ struct rte_crypto_cipher_xform {
* - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
* - Both keys must have the same size.
**/
+
+ RTE_STD_C11
+ struct { /* temporary anonymous struct for ABI compatibility */
+ const uint8_t *_key_data; /* reserved for key.data union */
+ uint16_t _key_length; /* reserved for key.length union */
+ /* next field can fill the padding hole */
+
+ uint16_t dataunit_len;
+ /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is enabled,
+ * this is the data-unit length of the algorithm,
+ * otherwise or when the value is 0, use the operation length.
+ * The value should be in the range defined by the dataunit_set field
+ * in the cipher capability.
+ *
+ * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
+ * For-each data-unit in the operation, the tweak (IV) value is
+ * assigned consecutively starting from the operation assigned IV.
+ */
+
+ }; }; /* temporary struct nested in union for ABI compatibility */
+
struct {
uint16_t offset;
/**< Starting point for Initialisation Vector or Counter,
@@ -701,9 +725,10 @@ struct rte_crypto_sym_op {
/**< The message length, in bytes, of the
* source buffer on which the cryptographic
* operation will be computed.
+ * This is also the same as the result length.
* This must be a multiple of the block size
- * if a block cipher is being used. This is
- * also the same as the result length.
+ * or a multiple of data-unit length
+ * as described in xform.
*
* @note
* For SNOW 3G @ RTE_CRYPTO_AUTH_SNOW3G_UEA2,
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 40f55a3cd0..e02e001325 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -617,6 +617,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
return "SYM_SESSIONLESS";
case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
return "NON_BYTE_ALIGNED_DATA";
+ case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS:
+ return "CIPHER_MULTIPLE_DATA_UNITS";
default:
return NULL;
}
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index ae34f33f69..2508abd6e1 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -95,6 +95,14 @@ struct rte_crypto_param_range {
*/
};
+/**
+ * Data-unit supported lengths of cipher algorithms.
+ * A bit can represent any set of data-unit sizes
+ * (single size, multiple size, range, etc).
+ */
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES (1 << 0)
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES (1 << 1)
+
/**
* Symmetric Crypto Capability
*/
@@ -127,6 +135,11 @@ struct rte_cryptodev_symmetric_capability {
/**< cipher key size range */
struct rte_crypto_param_range iv_size;
/**< Initialisation vector data size range */
+ uint32_t dataunit_set;
+ /**<
+ * A bitmap for a set of the supported data-unit lengths.
+ * 0 for any length defined in the algorithm standard.
+ */
} cipher;
/**< Symmetric Cipher transform capabilities */
struct {
@@ -461,6 +474,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
/**< Support operations on data which is not byte aligned */
#define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24)
/**< Support accelerator specific symmetric raw data-path APIs */
+#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25)
+/**< Support operations on multiple data-units message */
/**
* Get the name of a crypto device feature flag
--
2.31.1
^ permalink raw reply [relevance 10%]
* Re: [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units
2021-04-13 18:19 4% ` [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units Thomas Monjalon
@ 2021-04-13 19:48 0% ` Matan Azrad
0 siblings, 0 replies; 200+ results
From: Matan Azrad @ 2021-04-13 19:48 UTC (permalink / raw)
To: NBU-Contact-Thomas Monjalon, dev
Cc: akhil.goyal, arkadiuszx.kusztal, anoobj, Ray Kinsella,
Neil Horman, Declan Doherty
Hi
Small comment
From: Thomas Monjalon
> From: Matan Azrad <matan@nvidia.com>
>
> In cryptography, a block cipher is a deterministic algorithm operating on fixed-
> length groups of bits, called blocks.
>
> A block cipher consists of two paired algorithms, one for encryption and the
> other for decryption. Both algorithms accept two inputs:
> an input block of size n bits and a key of size k bits; and both yield an n-bit
> output block. The decryption algorithm is defined to be the inverse function of
> the encryption.
>
> For AES standard the block size is 16 bytes.
> For AES in XTS mode, the data to be encrypted\decrypted does not have to be
> multiple of 16B size, the unit of data is called data-unit.
> The data-unit size can be any size in range [16B, 2^24B], so, in this case, a data
> stream is divided into N amount of equal data-units and must be
> encrypted\decrypted in the same data-unit resolution.
>
> For ABI compatibility reason, the size is limited to 64K (16-bit field).
> The new field dataunit_len is inserted in a struct padding hole, which is only 2
> bytes long in 32-bit build.
> It could be extended later during an ABI-breakage window.
>
> The current cryptodev API doesn't allow the user to select a specific data-unit
> length supported by the devices.
> In addition, there is no definition how the IV is detected per data-unit when
> single operation includes more than one data-unit.
>
> That causes applications to use single operation per data-unit even though all
> the data is continuous in memory what reduces datapath performance.
>
> Add a new feature flag to support multiple data-unit sizes, called
> RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
> Add a new field in cipher capability, called dataunit_set, where the devices can
> report the range of the supported data-unit sizes.
> Add a new cipher transformation field, called dataunit_len, where the user can
> select the data-unit length for all the operations.
>
> All the new fields do not change the size of their structures, by filling some
> struct padding holes.
> They are added as exceptions in the ABI check file libabigail.abignore.
>
> Using a bitmap to report the supported data-unit sizes capability allows the
> devices to report a range simply as same as the user to read it simply. also,
> thus sizes are usually common and probably will be shared among different
> devices.
>
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> v1:
> - Use data-unit term instead of block.
> - Update cipher length description in OP.
> - Improve descriptions on xform and capability.
> - Improve commit log.
>
> v2:
> - Fix typo: MULITPLE->MULTIPLE.
> - Remain only planned supported sizes for data-unit capability.
>
> v3:
> - Improve some comments.
> - Fix ABI breakage.
>
> Note: the suppression rules work in libabigail for this patch, but not sure it is
> really considering the offsets defined in the file.
>
> ---
> devtools/libabigail.abignore | 12 +++++++++++-
> doc/guides/cryptodevs/features/default.ini | 1 +
> doc/guides/cryptodevs/overview.rst | 3 +++
> doc/guides/rel_notes/release_21_05.rst | 6 ++++++
> lib/librte_cryptodev/rte_crypto_sym.h | 18 ++++++++++++++++--
> lib/librte_cryptodev/rte_cryptodev.c | 2 ++
> lib/librte_cryptodev/rte_cryptodev.h | 16 ++++++++++++++++
> 7 files changed, 55 insertions(+), 3 deletions(-)
>
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index
> 6c0b38984e..bce940f2df 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -19,4 +19,14 @@
> ; Ignore fields inserted in cacheline boundary of rte_cryptodev [suppress_type]
> name = rte_cryptodev
> - has_data_member_inserted_between = {offset_after(attached), end}
> \ No newline at end of file
> + has_data_member_inserted_between = {offset_after(attached),
> + end}
> +
> +; Ignore fields inserted in union boundary of
> +rte_cryptodev_symmetric_capability
> +[suppress_type]
> + name = rte_cryptodev_symmetric_capability
> + has_data_member_inserted_between =
> +{offset_after(cipher.iv_size), end}
> +
> +; Ignore fields inserted in middle padding of rte_crypto_cipher_xform
> +[suppress_type]
> + name = rte_crypto_cipher_xform
> + has_data_member_inserted_between = {offset_after(key),
> +offset_of(iv)}
> diff --git a/doc/guides/cryptodevs/features/default.ini
> b/doc/guides/cryptodevs/features/default.ini
> index 17b177fc45..978bb30cc1 100644
> --- a/doc/guides/cryptodevs/features/default.ini
> +++ b/doc/guides/cryptodevs/features/default.ini
> @@ -31,6 +31,7 @@ CPU crypto =
> Symmetric sessionless =
> Non-Byte aligned data =
> Sym raw data path API =
> +Cipher multiple data units =
>
> ;
> ; Supported crypto algorithms of a default crypto driver.
> diff --git a/doc/guides/cryptodevs/overview.rst
> b/doc/guides/cryptodevs/overview.rst
> index e2a1e08ec1..e24e3e1993 100644
> --- a/doc/guides/cryptodevs/overview.rst
> +++ b/doc/guides/cryptodevs/overview.rst
> @@ -46,6 +46,9 @@ Supported Feature Flags
> - "Digest encrypted" feature flag means PMD support hash-cipher cases,
> where generated digest is appended to and encrypted with the data.
>
> + - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support
> operations
> + on multiple data-units message.
> +
>
> Supported Cipher Algorithms
> ---------------------------
> diff --git a/doc/guides/rel_notes/release_21_05.rst
> b/doc/guides/rel_notes/release_21_05.rst
> index 9a666b629d..2dc776c35e 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -145,6 +145,12 @@ New Features
>
> * Added support for preferred busy polling.
>
> +* **Added support of multiple data-units in cryptodev API.**
> +
> + The cryptodev library has been enhanced to allow operations on
> + multiple data-units for AES-XTS algorithm, the data-unit length
> + should be set in the transformation. A capability for it was added too.
> +
> * **Updated Mellanox RegEx PMD.**
>
> * Added support for multi-segments mbuf.
> diff --git a/lib/librte_cryptodev/rte_crypto_sym.h
> b/lib/librte_cryptodev/rte_crypto_sym.h
> index 9d572ec057..ec45714fc3 100644
> --- a/lib/librte_cryptodev/rte_crypto_sym.h
> +++ b/lib/librte_cryptodev/rte_crypto_sym.h
> @@ -222,6 +222,19 @@ struct rte_crypto_cipher_xform {
> * - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
> * - Both keys must have the same size.
> **/
> +
> + uint16_t dataunit_len;
> + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is
> enabled,
> + * this is the data-unit length of the algorithm,
> + * otherwise or when the value is 0, use the operation length.
> + * The value should be in the range defined by the dataunit_set field
> + * in the cipher capability.
> + *
> + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
> + * For-each data-unit in the operation, the tweak (IV) value is
> + * assigned consecutively starting from the operation assigned IV.
> + */
> +
> struct {
> uint16_t offset;
> /**< Starting point for Initialisation Vector or Counter, @@ -701,9
> +714,10 @@ struct rte_crypto_sym_op {
> /**< The message length, in bytes, of the
> * source buffer on which the cryptographic
> * operation will be computed.
> + * This is also the same as the result length.
> * This must be a multiple of the block size
> - * if a block cipher is being used. This is
> - * also the same as the result length.
> + * or a multiple of data-unit length
> + * as described in xform.
> *
> * @note
> * For SNOW 3G @
> RTE_CRYPTO_AUTH_SNOW3G_UEA2, diff --git
> a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
> index 40f55a3cd0..e02e001325 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.c
> +++ b/lib/librte_cryptodev/rte_cryptodev.c
> @@ -617,6 +617,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
> return "SYM_SESSIONLESS";
> case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
> return "NON_BYTE_ALIGNED_DATA";
> + case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS:
> + return "CIPHER_MULTIPLE_DATA_UNITS";
> default:
> return NULL;
> }
> diff --git a/lib/librte_cryptodev/rte_cryptodev.h
> b/lib/librte_cryptodev/rte_cryptodev.h
> index ae34f33f69..f6972a7d19 100644
> --- a/lib/librte_cryptodev/rte_cryptodev.h
> +++ b/lib/librte_cryptodev/rte_cryptodev.h
> @@ -95,6 +95,15 @@ struct rte_crypto_param_range {
> */
> };
>
> +/**
> + * Data-unit supported lengths of cipher algorithms.
> + * A bit can represent any set of data-unit sizes
> + * (single size, multiple size, range, etc).
> + */
> +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES (1 << 0)
> +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES (1 << 1)
> +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1M_BYTES (1 << 2)
1M is irrelevant since datauinit_len is only 16 bits now.
> +
> /**
> * Symmetric Crypto Capability
> */
> @@ -127,6 +136,11 @@ struct rte_cryptodev_symmetric_capability {
> /**< cipher key size range */
> struct rte_crypto_param_range iv_size;
> /**< Initialisation vector data size range */
> + uint32_t dataunit_set;
> + /**<
> + * A bitmap for a set of the supported data-unit lengths.
> + * 0 for any length defined in the algorithm standard.
> + */
> } cipher;
> /**< Symmetric Cipher transform capabilities */
> struct {
> @@ -461,6 +475,8 @@ rte_cryptodev_asym_get_xform_enum(enum
> rte_crypto_asym_xform_type *xform_enum, /**< Support operations on data
> which is not byte aligned */
> #define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24)
> /**< Support accelerator specific symmetric raw data-path APIs */
> +#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25)
> +/**< Support operations on multiple data-units message */
>
> /**
> * Get the name of a crypto device feature flag
> --
> 2.31.1
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units
@ 2021-04-13 18:19 4% ` Thomas Monjalon
2021-04-13 19:48 0% ` Matan Azrad
2021-04-13 20:42 10% ` [dpdk-dev] [PATCH v4] " Thomas Monjalon
2021-04-14 20:21 10% ` [dpdk-dev] [PATCH v5] " Thomas Monjalon
2 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-13 18:19 UTC (permalink / raw)
To: dev
Cc: akhil.goyal, arkadiuszx.kusztal, anoobj, Matan Azrad,
Ray Kinsella, Neil Horman, Declan Doherty
From: Matan Azrad <matan@nvidia.com>
In cryptography, a block cipher is a deterministic algorithm operating
on fixed-length groups of bits, called blocks.
A block cipher consists of two paired algorithms, one for encryption
and the other for decryption. Both algorithms accept two inputs:
an input block of size n bits and a key of size k bits; and both yield
an n-bit output block. The decryption algorithm is defined to be the
inverse function of the encryption.
For AES standard the block size is 16 bytes.
For AES in XTS mode, the data to be encrypted\decrypted does not have to
be multiple of 16B size, the unit of data is called data-unit.
The data-unit size can be any size in range [16B, 2^24B], so, in this
case, a data stream is divided into N amount of equal data-units and
must be encrypted\decrypted in the same data-unit resolution.
For ABI compatibility reason, the size is limited to 64K (16-bit field).
The new field dataunit_len is inserted in a struct padding hole,
which is only 2 bytes long in 32-bit build.
It could be extended later during an ABI-breakage window.
The current cryptodev API doesn't allow the user to select a specific
data-unit length supported by the devices.
In addition, there is no definition how the IV is detected per data-unit
when single operation includes more than one data-unit.
That causes applications to use single operation per data-unit even though
all the data is continuous in memory what reduces datapath performance.
Add a new feature flag to support multiple data-unit sizes, called
RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS.
Add a new field in cipher capability, called dataunit_set,
where the devices can report the range of the supported data-unit sizes.
Add a new cipher transformation field, called dataunit_len, where the user
can select the data-unit length for all the operations.
All the new fields do not change the size of their structures,
by filling some struct padding holes.
They are added as exceptions in the ABI check file libabigail.abignore.
Using a bitmap to report the supported data-unit sizes capability allows
the devices to report a range simply as same as the user to read it
simply. also, thus sizes are usually common and probably will be shared
among different devices.
Signed-off-by: Matan Azrad <matan@nvidia.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
v1:
- Use data-unit term instead of block.
- Update cipher length description in OP.
- Improve descriptions on xform and capability.
- Improve commit log.
v2:
- Fix typo: MULITPLE->MULTIPLE.
- Remain only planned supported sizes for data-unit capability.
v3:
- Improve some comments.
- Fix ABI breakage.
Note: the suppression rules work in libabigail for this patch,
but not sure it is really considering the offsets defined in the file.
---
devtools/libabigail.abignore | 12 +++++++++++-
doc/guides/cryptodevs/features/default.ini | 1 +
doc/guides/cryptodevs/overview.rst | 3 +++
doc/guides/rel_notes/release_21_05.rst | 6 ++++++
lib/librte_cryptodev/rte_crypto_sym.h | 18 ++++++++++++++++--
lib/librte_cryptodev/rte_cryptodev.c | 2 ++
lib/librte_cryptodev/rte_cryptodev.h | 16 ++++++++++++++++
7 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 6c0b38984e..bce940f2df 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -19,4 +19,14 @@
; Ignore fields inserted in cacheline boundary of rte_cryptodev
[suppress_type]
name = rte_cryptodev
- has_data_member_inserted_between = {offset_after(attached), end}
\ No newline at end of file
+ has_data_member_inserted_between = {offset_after(attached), end}
+
+; Ignore fields inserted in union boundary of rte_cryptodev_symmetric_capability
+[suppress_type]
+ name = rte_cryptodev_symmetric_capability
+ has_data_member_inserted_between = {offset_after(cipher.iv_size), end}
+
+; Ignore fields inserted in middle padding of rte_crypto_cipher_xform
+[suppress_type]
+ name = rte_crypto_cipher_xform
+ has_data_member_inserted_between = {offset_after(key), offset_of(iv)}
diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini
index 17b177fc45..978bb30cc1 100644
--- a/doc/guides/cryptodevs/features/default.ini
+++ b/doc/guides/cryptodevs/features/default.ini
@@ -31,6 +31,7 @@ CPU crypto =
Symmetric sessionless =
Non-Byte aligned data =
Sym raw data path API =
+Cipher multiple data units =
;
; Supported crypto algorithms of a default crypto driver.
diff --git a/doc/guides/cryptodevs/overview.rst b/doc/guides/cryptodevs/overview.rst
index e2a1e08ec1..e24e3e1993 100644
--- a/doc/guides/cryptodevs/overview.rst
+++ b/doc/guides/cryptodevs/overview.rst
@@ -46,6 +46,9 @@ Supported Feature Flags
- "Digest encrypted" feature flag means PMD support hash-cipher cases,
where generated digest is appended to and encrypted with the data.
+ - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support operations
+ on multiple data-units message.
+
Supported Cipher Algorithms
---------------------------
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 9a666b629d..2dc776c35e 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -145,6 +145,12 @@ New Features
* Added support for preferred busy polling.
+* **Added support of multiple data-units in cryptodev API.**
+
+ The cryptodev library has been enhanced to allow operations on multiple
+ data-units for AES-XTS algorithm, the data-unit length should be set in the
+ transformation. A capability for it was added too.
+
* **Updated Mellanox RegEx PMD.**
* Added support for multi-segments mbuf.
diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/librte_cryptodev/rte_crypto_sym.h
index 9d572ec057..ec45714fc3 100644
--- a/lib/librte_cryptodev/rte_crypto_sym.h
+++ b/lib/librte_cryptodev/rte_crypto_sym.h
@@ -222,6 +222,19 @@ struct rte_crypto_cipher_xform {
* - Each key can be either 128 bits (16 bytes) or 256 bits (32 bytes).
* - Both keys must have the same size.
**/
+
+ uint16_t dataunit_len;
+ /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is enabled,
+ * this is the data-unit length of the algorithm,
+ * otherwise or when the value is 0, use the operation length.
+ * The value should be in the range defined by the dataunit_set field
+ * in the cipher capability.
+ *
+ * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-2007.
+ * For-each data-unit in the operation, the tweak (IV) value is
+ * assigned consecutively starting from the operation assigned IV.
+ */
+
struct {
uint16_t offset;
/**< Starting point for Initialisation Vector or Counter,
@@ -701,9 +714,10 @@ struct rte_crypto_sym_op {
/**< The message length, in bytes, of the
* source buffer on which the cryptographic
* operation will be computed.
+ * This is also the same as the result length.
* This must be a multiple of the block size
- * if a block cipher is being used. This is
- * also the same as the result length.
+ * or a multiple of data-unit length
+ * as described in xform.
*
* @note
* For SNOW 3G @ RTE_CRYPTO_AUTH_SNOW3G_UEA2,
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 40f55a3cd0..e02e001325 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -617,6 +617,8 @@ rte_cryptodev_get_feature_name(uint64_t flag)
return "SYM_SESSIONLESS";
case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA:
return "NON_BYTE_ALIGNED_DATA";
+ case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS:
+ return "CIPHER_MULTIPLE_DATA_UNITS";
default:
return NULL;
}
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index ae34f33f69..f6972a7d19 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -95,6 +95,15 @@ struct rte_crypto_param_range {
*/
};
+/**
+ * Data-unit supported lengths of cipher algorithms.
+ * A bit can represent any set of data-unit sizes
+ * (single size, multiple size, range, etc).
+ */
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES (1 << 0)
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES (1 << 1)
+#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1M_BYTES (1 << 2)
+
/**
* Symmetric Crypto Capability
*/
@@ -127,6 +136,11 @@ struct rte_cryptodev_symmetric_capability {
/**< cipher key size range */
struct rte_crypto_param_range iv_size;
/**< Initialisation vector data size range */
+ uint32_t dataunit_set;
+ /**<
+ * A bitmap for a set of the supported data-unit lengths.
+ * 0 for any length defined in the algorithm standard.
+ */
} cipher;
/**< Symmetric Cipher transform capabilities */
struct {
@@ -461,6 +475,8 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
/**< Support operations on data which is not byte aligned */
#define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24)
/**< Support accelerator specific symmetric raw data-path APIs */
+#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25)
+/**< Support operations on multiple data-units message */
/**
* Get the name of a crypto device feature flag
--
2.31.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 16:44 4% ` Thomas Monjalon
@ 2021-04-13 16:45 4% ` Kinsella, Ray
0 siblings, 0 replies; 200+ results
From: Kinsella, Ray @ 2021-04-13 16:45 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, jerinj, David Marchand, Neil Horman, Timothy McDaniel
On 13/04/2021 17:44, Thomas Monjalon wrote:
> 13/04/2021 18:09, Kinsella, Ray:
>> On 13/04/2021 09:45, Thomas Monjalon wrote:
>>> The eventdev driver DLB was removed in DPDK 21.05,
>>> breaking the ABI check.
>>> The exception was agreed so we just need to skip this check.
>>>
>>> Note: complete removal of a driver cannot be ignored
>>> in devtools/libabigail.abignore, so the script must be patched.
>>>
>>> Fixes: 698fa829415d ("event/dlb: remove driver")
>>>
>>> Reported-by: David Marchand <david.marchand@redhat.com>
>>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>>> ---
>>> This should have been done as part of removing the driver.
>>> The CI is currently broken, so it should be merged today.
>>> ---
>>> devtools/check-abi.sh | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh
>>> index 9835e346da..ca523eb94c 100755
>>> --- a/devtools/check-abi.sh
>>> +++ b/devtools/check-abi.sh
>>> @@ -44,6 +44,10 @@ for dump in $(find $refdir -name "*.dump"); do
>>> echo "Skipped glue library $name."
>>> continue
>>> fi
>>> + if grep -qE "\<soname='librte_event_dlb\.so" $dump; then
>>> + echo "Skipped removed driver $name."
>>> + continue
>>> + fi
>>
>> So this is brute force fix - we can anticipate this problem happening again.
>> Perhaps a 2nd file called devtools/libabigail.soignore, if agreed I will submit a patch?
>
> Yes indeed we could have a file for this.
> Maybe we could have a dedicated section [suppress_lib]
> in the existing file if libabigail is OK with unknown sections?
>
That would be tidier - I will take a look.
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 16:09 4% ` Kinsella, Ray
@ 2021-04-13 16:44 4% ` Thomas Monjalon
2021-04-13 16:45 4% ` Kinsella, Ray
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-04-13 16:44 UTC (permalink / raw)
To: Kinsella, Ray; +Cc: dev, jerinj, David Marchand, Neil Horman, Timothy McDaniel
13/04/2021 18:09, Kinsella, Ray:
> On 13/04/2021 09:45, Thomas Monjalon wrote:
> > The eventdev driver DLB was removed in DPDK 21.05,
> > breaking the ABI check.
> > The exception was agreed so we just need to skip this check.
> >
> > Note: complete removal of a driver cannot be ignored
> > in devtools/libabigail.abignore, so the script must be patched.
> >
> > Fixes: 698fa829415d ("event/dlb: remove driver")
> >
> > Reported-by: David Marchand <david.marchand@redhat.com>
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> > This should have been done as part of removing the driver.
> > The CI is currently broken, so it should be merged today.
> > ---
> > devtools/check-abi.sh | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh
> > index 9835e346da..ca523eb94c 100755
> > --- a/devtools/check-abi.sh
> > +++ b/devtools/check-abi.sh
> > @@ -44,6 +44,10 @@ for dump in $(find $refdir -name "*.dump"); do
> > echo "Skipped glue library $name."
> > continue
> > fi
> > + if grep -qE "\<soname='librte_event_dlb\.so" $dump; then
> > + echo "Skipped removed driver $name."
> > + continue
> > + fi
>
> So this is brute force fix - we can anticipate this problem happening again.
> Perhaps a 2nd file called devtools/libabigail.soignore, if agreed I will submit a patch?
Yes indeed we could have a file for this.
Maybe we could have a dedicated section [suppress_lib]
in the existing file if libabigail is OK with unknown sections?
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [EXT] [PATCH v2] cryptodev: support multiple cipher data-units
@ 2021-04-13 16:39 3% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 16:39 UTC (permalink / raw)
To: Matan Azrad, Ray Kinsella, Declan Doherty, Akhil Goyal
Cc: dev, Somalapuram Amaranath, Ruifeng Wang, Ajit Khaparde,
Anoob Joseph, Fan Zhang, John Griffin, Pablo de Lara,
Michael Shamis, Nagadheeraj Rottela, Ankur Dwivedi,
Gagandeep Singh, Jay Zhou, ArkadiuszX Kusztal, sashakot, oren,
Shiri Kuzin, david.marchand
13/04/2021 14:02, Akhil Goyal:
> > All the new fields do not change the size of their structures.
>
> Please check that the CI is failing. I see that ignore exception is present in
> devtools/libabigail.abignore For rte_cryptodev. But not sure why this is still
> failing. Can you check?
There are 2 new fields:
- rte_cryptodev_symmetric_capability.cipher.dataunit_set
- rte_crypto_cipher_xform.dataunit_len
This is how the struct sizes are affected (before / after):
struct \ arch | 32-bit | 64-bit |
-----------------------------------|---------|---------|
rte_cryptodev_symmetric_capability | 36 / 36 | 36 / 36 |
rte_crypto_cipher_xform | 20 / 24 | 32 / 32 |
There is no change in rte_cryptodev_symmetric_capability because
the field is added in a light branch of the union.
The 64-bit size of rte_crypto_cipher_xform is unchanged (32)
because there were 4 padding bytes at the end (28 + 4).
But the 32-bit version has not such padding at the end,
so there is a breakage.
The only hole in 32-bit rte_crypto_cipher_xform is
2 bytes between key and iv.
Can we define dataunit_len as uint16_t?
The other side to check when playing with the ABI
is the default value of the holes for the new field.
The driver must work properly in case the application
did not explicitly set the new fields.
In general it means the compatible API should have memset(0).
In this case, it seems the new fields will be used only
in a new mlx5 driver, so it should be OK for now.
But usage of the new fields in an existing driver must
be checked carefully during the compatibility period.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 8:45 15% ` [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check Thomas Monjalon
2021-04-13 9:15 4% ` David Marchand
@ 2021-04-13 16:09 4% ` Kinsella, Ray
2021-04-13 16:44 4% ` Thomas Monjalon
1 sibling, 1 reply; 200+ results
From: Kinsella, Ray @ 2021-04-13 16:09 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: jerinj, David Marchand, Neil Horman, Timothy McDaniel
On 13/04/2021 09:45, Thomas Monjalon wrote:
> The eventdev driver DLB was removed in DPDK 21.05,
> breaking the ABI check.
> The exception was agreed so we just need to skip this check.
>
> Note: complete removal of a driver cannot be ignored
> in devtools/libabigail.abignore, so the script must be patched.
>
> Fixes: 698fa829415d ("event/dlb: remove driver")
>
> Reported-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> This should have been done as part of removing the driver.
> The CI is currently broken, so it should be merged today.
> ---
> devtools/check-abi.sh | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh
> index 9835e346da..ca523eb94c 100755
> --- a/devtools/check-abi.sh
> +++ b/devtools/check-abi.sh
> @@ -44,6 +44,10 @@ for dump in $(find $refdir -name "*.dump"); do
> echo "Skipped glue library $name."
> continue
> fi
> + if grep -qE "\<soname='librte_event_dlb\.so" $dump; then
> + echo "Skipped removed driver $name."
> + continue
> + fi
So this is brute force fix - we can anticipate this problem happening again.
Perhaps a 2nd file called devtools/libabigail.soignore, if agreed I will submit a patch?
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-13 1:26 0% ` Bing Zhao
@ 2021-04-13 14:00 0% ` Ori Kam
0 siblings, 0 replies; 200+ results
From: Ori Kam @ 2021-04-13 14:00 UTC (permalink / raw)
To: Bing Zhao, Ferruh Yigit, NBU-Contact-Thomas Monjalon,
andrew.rybchenko, Matan Azrad, Slava Ovsiienko
Cc: dev, ajit.khaparde, Gregory Etelson, Andrey Vesnovaty
> -----Original Message-----
> From: Bing Zhao <bingz@nvidia.com>
> Sent: Tuesday, April 13, 2021 4:27 AM
> Subject: RE: [PATCH v2 1/4] ethdev: introduce indirect action APIs
>
> Hi Ferruh,
>
> > -----Original Message-----
> > From: Ferruh Yigit <ferruh.yigit@intel.com>
> > Sent: Tuesday, April 13, 2021 3:42 AM
> > To: Bing Zhao <bingz@nvidia.com>; Ori Kam <orika@nvidia.com>; NBU-
> > Contact-Thomas Monjalon <thomas@monjalon.net>;
> > andrew.rybchenko@oktetlabs.ru; Matan Azrad <matan@nvidia.com>; Slava
> > Ovsiienko <viacheslavo@nvidia.com>
> > Cc: dev@dpdk.org; ajit.khaparde@broadcom.com; Gregory Etelson
> > <getelson@nvidia.com>; Andrey Vesnovaty <andreyv@nvidia.com>
> > Subject: Re: [PATCH v2 1/4] ethdev: introduce indirect action APIs
> >
> > External email: Use caution opening links or attachments
> >
> >
> > On 4/10/2021 3:03 PM, Bing Zhao wrote:
> > > Right now, rte_flow_shared_action_* APIs are used for some shared
> > > actions, like RSS, count. The shared action should be created
> > before
> > > using it inside a flow. These shared actions sometimes are not
> > really
> > > shared but just some indirect actions decoupled from a flow.
> > >
> > > The new functions rte_flow_action_handle_* are added to replace
> > the
> > > current shared functions rte_flow_shared_action_*.
> > >
> > > There are two types of flow actions:
> > > 1. the direct (normal) actions that could be created and stored
> > > within a flow rule. Such action is tied to its flow rule and
> > > cannot be reused.
> > > 2. the indirect action, in the past, named shared_action. It is
> > > created from a direct actioni, like count or rss, and then
> > used
> > > in the flow rules with an object handle. The PMD will take
> > care
> > > of the retrieve from indirect action to the direct action
> > > when it is referenced.
> > >
> > > The indirect action is accessed (update / query) w/o any flow rule,
> > > just via the action object handle. For example, when querying or
> > > resetting a counter, it could be done out of any flow using this
> > > counter, but only the handle of the counter action object is
> > required.
> > > The indirect action object could be shared by different flows or
> > used
> > > by a single flow, depending on the direct action type and the
> > > real-life requirements.
> > > The handle of an indirect action object is opaque and defined in
> > each
> > > driver and possibly different per direct action type.
> > >
> > > The old name "shared" is improper in a sense and should be
> > replaced.
> > >
> > > All the command lines in testpmd application with "shared_action*"
> > > are replaced with "indirect_action*".
> > >
> > > The parameter of "update" interface is also changed. A general
> > pointer
> > > will replace the rte_flow_action struct pointer due to the
> > > facts:
> > > 1. Some action may not support fields updating. In the example of
> > a
> > > counter, the only "update" supported should be the reset. So
> > > passing a rte_flow_action struct pointer is meaningless and
> > > there is even no such corresponding action struct. What's more,
> > > if more than one operations should be supported, for some
> > other
> > > action, such pointer parameter may not meet the need.
> > > 2. Some action may need conditional or partial update, the current
> > > parameter will not provide the ability to indicate which
> > part(s)
> > > to update.
> > > For different types of indirect action objects, the pointer
> > could
> > > either be the same of rte_flow_action* struct - in order not
> > to
> > > break the current driver implementation, or some wrapper
> > > structures with bits as masks to indicate which part to be
> > > updated, depending on real needs of the corresponding direct
> > > action. For different direct actions, the structures of
> > indirect
> > > action objects updating will be different.
> > >
> > > All the underlayer PMD callbacks will be moved to these new APIs.
> > >
> > > The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> > break
> > > the ABI. All the implementations are changed by using
> > > RTE_FLOW_ACTION_TYPE_INDIRECT.
> > >
> > > Signed-off-by: Bing Zhao <bingz@nvidia.com>
> > > ---
> > > doc/guides/rel_notes/release_21_05.rst | 3 +
> > > lib/librte_ethdev/rte_flow.c | 56 ++++++++--------
> > > lib/librte_ethdev/rte_flow.h | 118
> > +++++++++++++++++++--------------
> > > lib/librte_ethdev/rte_flow_driver.h | 26 ++++----
> > > lib/librte_ethdev/version.map | 8 +--
> >
> > Isn't there any documentation to update with this change?
>
> Do you mean the release note? I only updated the 20_01 release note part.
>
You also need to update the prog/guid/rte_flow.rst
> >
> > If the shared action API is not documented at all, can you please
> > add documentation for the action handle API?
>
> In the testpmd usage guide, I found some description and update it together
> with the testpmd update.
> I will check if there is another place to update or add.
>
> Thanks
>
> BR. Bing
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 7:15 5% ` David Marchand
` (2 preceding siblings ...)
2021-04-13 8:54 5% ` [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob
@ 2021-04-13 12:58 0% ` Aaron Conole
3 siblings, 0 replies; 200+ results
From: Aaron Conole @ 2021-04-13 12:58 UTC (permalink / raw)
To: David Marchand
Cc: Thomas Monjalon, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, dpdklab, abhinandan.gujjar, harry.van.haaren, dev,
Shijith Thotton, Akhil Goyal, Pavan Nikhilesh Bhagavatula,
mattias.ronnblom, ci
David Marchand <david.marchand@redhat.com> writes:
> On Tue, Apr 13, 2021 at 12:12 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>>
>> 12/04/2021 15:20, Jerin Jacob Kollanukkaran:
>> > http://dpdk.org/git/next/dpdk-next-eventdev
>>
>> Pulled, thanks.
>>
>> Note few changes in titles like uppercases for acronyms,
>> or "add support" simplified as "support",
>> and release notes moved in the right place.
>
> The ABI check now reports an error on event/dlb.
> The reason is that the event/dlb driver has been removed, and so the
> check complains about a missing dump.
> This will have to be fixed quickly or reverted.
>
>
> This has been missed by multiple people, so trying to understand why.
>
> The ABI check should have caught this when run by maintainers (/me
> looks at Thomas and Jerin).
>
> The CI should have caught it too.
> But, v1 did not apply.
> For v2, I can see a doc generation issue reported by Intel CI that I
> can't reproduce, so it could be just noise.
> I can't find reports for Travis or GHA and I could not find in the
> robot logs why the series_15708 branch was not created.
I need to go back in the logs - there were a few cases during a
change-over that the robot wasn't running right.
> Looking at UNH reports:
> http://mails.dpdk.org/archives/test-report/2021-March/182956.html
> But looking at the log:
> [2713/2716] Compiling C object
> 'drivers/a715181@@rte_event_octeontx2@sta/meson-generated_.._rte_event_octeontx2.pmd.c.o'.
> [2714/2716] Linking static target drivers/librte_event_octeontx2.a.
> [2715/2716] Generating rte_event_octeontx2.sym_chk with a meson_exe.py
> custom command.
> [2716/2716] Linking target drivers/librte_event_octeontx2.so.21.1.
> Error: cannot find librte_event_dlb.dump in
> /home-local/jenkins-local/jenkins-agent/workspace/Ubuntu18.04-Compile-DPDK-ABI/dpdk/build-gcc-shared/install
>
> Is this something that has been fixed since then?
>
> I don't have the main branch/recent series status from UNH, but at
> least GHA and Travis are now complaining about ABI.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-10 14:03 4% ` [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs Bing Zhao
2021-04-12 19:42 0% ` Ferruh Yigit
@ 2021-04-13 12:36 0% ` Andrey Vesnovaty
2021-04-15 13:55 0% ` Andrew Rybchenko
2 siblings, 0 replies; 200+ results
From: Andrey Vesnovaty @ 2021-04-13 12:36 UTC (permalink / raw)
To: Bing Zhao, Ori Kam, NBU-Contact-Thomas Monjalon, ferruh.yigit,
andrew.rybchenko, Matan Azrad, Slava Ovsiienko
Cc: dev, ajit.khaparde, Gregory Etelson
> -----Original Message-----
> From: Bing Zhao <bingz@nvidia.com>
> Sent: Saturday, April 10, 2021 5:04 PM
> To: Ori Kam <orika@nvidia.com>; NBU-Contact-Thomas Monjalon
> <thomas@monjalon.net>; ferruh.yigit@intel.com;
> andrew.rybchenko@oktetlabs.ru; Matan Azrad <matan@nvidia.com>; Slava
> Ovsiienko <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org; ajit.khaparde@broadcom.com; Gregory Etelson
> <getelson@nvidia.com>; Andrey Vesnovaty <andreyv@nvidia.com>
> Subject: [PATCH v2 1/4] ethdev: introduce indirect action APIs
>
> Right now, rte_flow_shared_action_* APIs are used for some shared
> actions, like RSS, count. The shared action should be created before
> using it inside a flow. These shared actions sometimes are not
> really shared but just some indirect actions decoupled from a flow.
>
> The new functions rte_flow_action_handle_* are added to replace
> the current shared functions rte_flow_shared_action_*.
>
> There are two types of flow actions:
> 1. the direct (normal) actions that could be created and stored
> within a flow rule. Such action is tied to its flow rule and
> cannot be reused.
> 2. the indirect action, in the past, named shared_action. It is
> created from a direct actioni, like count or rss, and then used
> in the flow rules with an object handle. The PMD will take care
> of the retrieve from indirect action to the direct action
> when it is referenced.
>
> The indirect action is accessed (update / query) w/o any flow rule,
> just via the action object handle. For example, when querying or
> resetting a counter, it could be done out of any flow using this
> counter, but only the handle of the counter action object is
> required.
> The indirect action object could be shared by different flows or
> used by a single flow, depending on the direct action type and
> the real-life requirements.
> The handle of an indirect action object is opaque and defined in
> each driver and possibly different per direct action type.
>
> The old name "shared" is improper in a sense and should be replaced.
>
> All the command lines in testpmd application with "shared_action*"
> are replaced with "indirect_action*".
>
> The parameter of "update" interface is also changed. A general
> pointer will replace the rte_flow_action struct pointer due to the
> facts:
> 1. Some action may not support fields updating. In the example of a
> counter, the only "update" supported should be the reset. So
> passing a rte_flow_action struct pointer is meaningless and
> there is even no such corresponding action struct. What's more,
> if more than one operations should be supported, for some other
> action, such pointer parameter may not meet the need.
> 2. Some action may need conditional or partial update, the current
> parameter will not provide the ability to indicate which part(s)
> to update.
> For different types of indirect action objects, the pointer could
> either be the same of rte_flow_action* struct - in order not to
> break the current driver implementation, or some wrapper
> structures with bits as masks to indicate which part to be
> updated, depending on real needs of the corresponding direct
> action. For different direct actions, the structures of indirect
> action objects updating will be different.
>
> All the underlayer PMD callbacks will be moved to these new APIs.
>
> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break the ABI. All the implementations are changed by using
> RTE_FLOW_ACTION_TYPE_INDIRECT.
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> ---
> doc/guides/rel_notes/release_21_05.rst | 3 +
> lib/librte_ethdev/rte_flow.c | 56 ++++++++--------
> lib/librte_ethdev/rte_flow.h | 118 +++++++++++++++++++--------------
> lib/librte_ethdev/rte_flow_driver.h | 26 ++++----
> lib/librte_ethdev/version.map | 8 +--
> 5 files changed, 115 insertions(+), 96 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_21_05.rst
> b/doc/guides/rel_notes/release_21_05.rst
> index 374d6d9..6c0ac46 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -164,6 +164,9 @@ API Changes
> from ``rte_thread_tls_*`` to ``rte_thread_*`` to avoid naming redundancy
> and confusion with the transport layer security term.
>
> +* ethdev: The experimental shared action APIs in ``rte_flow.h`` has been
> + replaced from ``rte_flow_shared_action_*`` to indirect action APIs named
> + ``rte_flow_action_handle_*``.
>
> ABI Changes
> -----------
> diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
> index e07e617..27a1615 100644
> --- a/lib/librte_ethdev/rte_flow.c
> +++ b/lib/librte_ethdev/rte_flow.c
> @@ -180,12 +180,12 @@ struct rte_flow_desc_data {
> MK_FLOW_ACTION(MODIFY_FIELD,
> sizeof(struct rte_flow_action_modify_field)),
> /**
> - * Shared action represented as handle of type
> - * (struct rte_flow_shared action *) stored in conf field (see
> + * Indirect action represented as handle of type
> + * (struct rte_flow_action_handle *) stored in conf field (see
> * struct rte_flow_action); no need for additional structure to * store
> - * shared action handle.
> + * indirect action handle.
> */
> - MK_FLOW_ACTION(SHARED, 0),
> + MK_FLOW_ACTION(INDIRECT, 0),
> };
>
> int
> @@ -1067,53 +1067,53 @@ enum rte_flow_conv_item_spec_type {
> NULL, rte_strerror(ENOTSUP));
> }
>
> -struct rte_flow_shared_action *
> -rte_flow_shared_action_create(uint16_t port_id,
> - const struct rte_flow_shared_action_conf *conf,
> +struct rte_flow_action_handle *
> +rte_flow_action_handle_create(uint16_t port_id,
> + const struct rte_flow_indir_action_conf *conf,
> const struct rte_flow_action *action,
> struct rte_flow_error *error)
> {
> - struct rte_flow_shared_action *shared_action;
> + struct rte_flow_action_handle *handle;
> const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
>
> if (unlikely(!ops))
> return NULL;
> - if (unlikely(!ops->shared_action_create)) {
> + if (unlikely(!ops->action_handle_create)) {
> rte_flow_error_set(error, ENOSYS,
> RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> NULL,
> rte_strerror(ENOSYS));
> return NULL;
> }
> - shared_action = ops->shared_action_create(&rte_eth_devices[port_id],
> - conf, action, error);
> - if (shared_action == NULL)
> + handle = ops->action_handle_create(&rte_eth_devices[port_id],
> + conf, action, error);
> + if (handle == NULL)
> flow_err(port_id, -rte_errno, error);
> - return shared_action;
> + return handle;
> }
>
> int
> -rte_flow_shared_action_destroy(uint16_t port_id,
> - struct rte_flow_shared_action *action,
> - struct rte_flow_error *error)
> +rte_flow_action_handle_destroy(uint16_t port_id,
> + struct rte_flow_action_handle *handle,
> + struct rte_flow_error *error)
> {
> int ret;
> const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
>
> if (unlikely(!ops))
> return -rte_errno;
> - if (unlikely(!ops->shared_action_destroy))
> + if (unlikely(!ops->action_handle_destroy))
> return rte_flow_error_set(error, ENOSYS,
>
> RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> NULL, rte_strerror(ENOSYS));
> - ret = ops->shared_action_destroy(&rte_eth_devices[port_id], action,
> - error);
> + ret = ops->action_handle_destroy(&rte_eth_devices[port_id],
> + handle, error);
> return flow_err(port_id, ret, error);
> }
>
> int
> -rte_flow_shared_action_update(uint16_t port_id,
> - struct rte_flow_shared_action *action,
> - const struct rte_flow_action *update,
> +rte_flow_action_handle_update(uint16_t port_id,
> + struct rte_flow_action_handle *handle,
> + const void *update,
> struct rte_flow_error *error)
> {
> int ret;
> @@ -1121,18 +1121,18 @@ struct rte_flow_shared_action *
>
> if (unlikely(!ops))
> return -rte_errno;
> - if (unlikely(!ops->shared_action_update))
> + if (unlikely(!ops->action_handle_update))
> return rte_flow_error_set(error, ENOSYS,
>
> RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> NULL, rte_strerror(ENOSYS));
> - ret = ops->shared_action_update(&rte_eth_devices[port_id], action,
> + ret = ops->action_handle_update(&rte_eth_devices[port_id], handle,
> update, error);
> return flow_err(port_id, ret, error);
> }
>
> int
> -rte_flow_shared_action_query(uint16_t port_id,
> - const struct rte_flow_shared_action *action,
> +rte_flow_action_handle_query(uint16_t port_id,
> + const struct rte_flow_action_handle *handle,
> void *data,
> struct rte_flow_error *error)
> {
> @@ -1141,11 +1141,11 @@ struct rte_flow_shared_action *
>
> if (unlikely(!ops))
> return -rte_errno;
> - if (unlikely(!ops->shared_action_query))
> + if (unlikely(!ops->action_handle_query))
> return rte_flow_error_set(error, ENOSYS,
>
> RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
> NULL, rte_strerror(ENOSYS));
> - ret = ops->shared_action_query(&rte_eth_devices[port_id], action,
> + ret = ops->action_handle_query(&rte_eth_devices[port_id], handle,
> data, error);
> return flow_err(port_id, ret, error);
> }
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index 6cc5713..91ae25b 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -1821,7 +1821,7 @@ enum rte_flow_action_type {
> * Enables counters for this flow rule.
> *
> * These counters can be retrieved and reset through rte_flow_query()
> or
> - * rte_flow_shared_action_query() if the action provided via handle,
> + * rte_flow_action_handle_query() if the action provided via handle,
> * see struct rte_flow_query_count.
> *
> * See struct rte_flow_action_count.
> @@ -2267,6 +2267,16 @@ enum rte_flow_action_type {
> * See struct rte_flow_action_modify_field.
> */
> RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
> +
> + /**
> + * Describe indirect action that could be used by a single flow rule
> + * or multiple flow rules.
> + *
> + * Allow flow rule(s) reference the same action by the indirect action
> + * handle (see struct rte_flow_action_handle), rules could be on the
> + * same port or across different ports.
> + */
> + RTE_FLOW_ACTION_TYPE_INDIRECT,
> };
>
> /**
> @@ -2357,7 +2367,7 @@ struct rte_flow_query_age {
> * ``struct rte_flow_query_count``.
> *
> * @deprecated Shared attribute is deprecated, use generic
> - * RTE_FLOW_ACTION_TYPE_SHARED action.
> + * RTE_FLOW_ACTION_TYPE_INDIRECT action.
> *
> * The shared flag indicates whether the counter is unique to the flow rule the
> * action is specified with, or whether it is a shared counter.
> @@ -2847,17 +2857,23 @@ struct rte_flow_action_set_dscp {
> };
>
> /**
> - * RTE_FLOW_ACTION_TYPE_SHARED
> + * @warning
> + * @b EXPERIMENTAL: this structure may change without prior notice
> + *
> + * RTE_FLOW_ACTION_TYPE_INDIRECT
> *
> - * Opaque type returned after successfully creating a shared action.
> + * Opaque type returned after successfully creating an indirect action object.
> + * The definition of the object handle will be different per driver or
> + * per immediate action type.
> *
> - * This handle can be used to manage and query the related action:
> - * - share it across multiple flow rules
> - * - update action configuration
> - * - query action data
> - * - destroy action
> + * This handle can be used to manage and query the related immediate action:
> + * - referenced in single flow rule or across multiple flow rules
> + * over multiple ports
> + * - update action object configuration
> + * - query action object data
> + * - destroy action object
> */
> -struct rte_flow_shared_action;
> +struct rte_flow_action_handle;
>
> /**
> * Field IDs for MODIFY_FIELD action.
> @@ -3628,25 +3644,22 @@ struct rte_flow_desc {
> uint32_t nb_contexts, struct rte_flow_error *error);
>
> /**
> - * Specify shared action configuration
> + * Specify indirect action object configuration
> */
> -struct rte_flow_shared_action_conf {
> +struct rte_flow_indir_action_conf {
> /**
> - * Flow direction for shared action configuration.
> + * Flow direction for the indirect action configuration.
> *
> - * Shared action should be valid at least for one flow direction,
> + * Action should be valid at least for one flow direction,
> * otherwise it is invalid for both ingress and egress rules.
> */
> uint32_t ingress:1;
> /**< Action valid for rules applied to ingress traffic. */
> uint32_t egress:1;
> /**< Action valid for rules applied to egress traffic. */
> -
> /**
> * When set to 1, indicates that the action is valid for
> * transfer traffic; otherwise, for non-transfer traffic.
> - *
> - * See struct rte_flow_attr.
> */
> uint32_t transfer:1;
> };
> @@ -3655,16 +3668,17 @@ struct rte_flow_shared_action_conf {
> * @warning
> * @b EXPERIMENTAL: this API may change without prior notice.
> *
> - * Create shared action for reuse in multiple flow rules.
> - * The created shared action has single state and configuration
> - * across all flow rules using it.
> + * Create an indirect action object that can be used by flow create, and
> + * could also be shared by different flows.
> + * The created object handle has single state and configuration
> + * across all the flow rules using it.
> *
> * @param[in] port_id
> * The port identifier of the Ethernet device.
> * @param[in] conf
> - * Shared action configuration.
> + * Action configuration for the indirect action object creation.
> * @param[in] action
> - * Action configuration for shared action creation.
> + * Specific configuration of the indirect action object.
> * @param[out] error
> * Perform verbose error reporting if not NULL. PMDs initialize this
> * structure in case of error only.
> @@ -3678,9 +3692,9 @@ struct rte_flow_shared_action_conf {
> * - (ENOTSUP) if *action* valid but unsupported.
> */
> __rte_experimental
> -struct rte_flow_shared_action *
> -rte_flow_shared_action_create(uint16_t port_id,
> - const struct rte_flow_shared_action_conf *conf,
> +struct rte_flow_action_handle *
> +rte_flow_action_handle_create(uint16_t port_id,
> + const struct rte_flow_indir_action_conf *conf,
> const struct rte_flow_action *action,
> struct rte_flow_error *error);
>
> @@ -3688,12 +3702,12 @@ struct rte_flow_shared_action *
> * @warning
> * @b EXPERIMENTAL: this API may change without prior notice.
> *
> - * Destroy the shared action by handle.
> + * Destroy indirect action by handle.
> *
> * @param[in] port_id
> * The port identifier of the Ethernet device.
> - * @param[in] action
> - * Handle for the shared action to be destroyed.
> + * @param[in] handle
> + * Handle for the indirect action object to be destroyed.
> * @param[out] error
> * Perform verbose error reporting if not NULL. PMDs initialize this
> * structure in case of error only.
> @@ -3708,27 +3722,30 @@ struct rte_flow_shared_action *
> */
> __rte_experimental
> int
> -rte_flow_shared_action_destroy(uint16_t port_id,
> - struct rte_flow_shared_action *action,
> +rte_flow_action_handle_destroy(uint16_t port_id,
> + struct rte_flow_action_handle *handle,
> struct rte_flow_error *error);
>
> /**
> * @warning
> * @b EXPERIMENTAL: this API may change without prior notice.
> *
> - * Update in-place the shared action configuration pointed by *action* handle
> - * with the configuration provided as *update* argument.
> - * The update of the shared action configuration effects all flow rules reusing
> - * the action via handle.
> + * Update in-place the action configuration and / or state pointed
> + * by action *handle* with the configuration provided as *update* argument.
> + * The update of the action configuration effects all flow rules reusing
> + * the action via *handle*.
> + * The update general pointer provides the ability of partial updating.
> *
> * @param[in] port_id
> * The port identifier of the Ethernet device.
> - * @param[in] action
> - * Handle for the shared action to be updated.
> + * @param[in] handle
> + * Handle for the indirect action object to be updated.
> * @param[in] update
> - * Action specification used to modify the action pointed by handle.
> - * *update* should be of same type with the action pointed by the *action*
> - * handle argument, otherwise considered as invalid.
> + * Update profile specification used to modify the action pointed by handle.
> + * *update* could be with the same type of the immediate action
> corresponding
> + * to the *handle* argument when creating, or a wrapper structure includes
> + * action configuration to be updated and bit fields to indicate the member
> + * of fields inside the action to update.
> * @param[out] error
> * Perform verbose error reporting if not NULL. PMDs initialize this
> * structure in case of error only.
> @@ -3739,32 +3756,32 @@ struct rte_flow_shared_action *
> * - (-EIO) if underlying device is removed.
> * - (-EINVAL) if *update* invalid.
> * - (-ENOTSUP) if *update* valid but unsupported.
> - * - (-ENOENT) if action pointed by *ctx* was not found.
> + * - (-ENOENT) if indirect action object pointed by *handle* was not found.
> * rte_errno is also set.
> */
> __rte_experimental
> int
> -rte_flow_shared_action_update(uint16_t port_id,
> - struct rte_flow_shared_action *action,
> - const struct rte_flow_action *update,
> +rte_flow_action_handle_update(uint16_t port_id,
> + struct rte_flow_action_handle *handle,
> + const void *update,
> struct rte_flow_error *error);
>
> /**
> * @warning
> * @b EXPERIMENTAL: this API may change without prior notice.
> *
> - * Query the shared action by handle.
> + * Query the direct action by corresponding indirect action object handle.
> *
> * Retrieve action-specific data such as counters.
> * Data is gathered by special action which may be present/referenced in
> * more than one flow rule definition.
> *
> - * \see RTE_FLOW_ACTION_TYPE_COUNT
> + * @see RTE_FLOW_ACTION_TYPE_COUNT
> *
> * @param port_id
> * Port identifier of Ethernet device.
> - * @param[in] action
> - * Handle for the shared action to query.
> + * @param[in] handle
> + * Handle for the action object to query.
> * @param[in, out] data
> * Pointer to storage for the associated query data type.
> * @param[out] error
> @@ -3776,10 +3793,9 @@ struct rte_flow_shared_action *
> */
> __rte_experimental
> int
> -rte_flow_shared_action_query(uint16_t port_id,
> - const struct rte_flow_shared_action *action,
> - void *data,
> - struct rte_flow_error *error);
> +rte_flow_action_handle_query(uint16_t port_id,
> + const struct rte_flow_action_handle *handle,
> + void *data, struct rte_flow_error *error);
>
> /* Tunnel has a type and the key information. */
> struct rte_flow_tunnel {
> diff --git a/lib/librte_ethdev/rte_flow_driver.h
> b/lib/librte_ethdev/rte_flow_driver.h
> index da594d9..8d825eb 100644
> --- a/lib/librte_ethdev/rte_flow_driver.h
> +++ b/lib/librte_ethdev/rte_flow_driver.h
> @@ -83,27 +83,27 @@ struct rte_flow_ops {
> void **context,
> uint32_t nb_contexts,
> struct rte_flow_error *err);
> - /** See rte_flow_shared_action_create() */
> - struct rte_flow_shared_action *(*shared_action_create)
> + /** See rte_flow_action_handle_create() */
> + struct rte_flow_action_handle *(*action_handle_create)
> (struct rte_eth_dev *dev,
> - const struct rte_flow_shared_action_conf *conf,
> + const struct rte_flow_indir_action_conf *conf,
> const struct rte_flow_action *action,
> struct rte_flow_error *error);
> - /** See rte_flow_shared_action_destroy() */
> - int (*shared_action_destroy)
> + /** See rte_flow_action_handle_destroy() */
> + int (*action_handle_destroy)
> (struct rte_eth_dev *dev,
> - struct rte_flow_shared_action *shared_action,
> + struct rte_flow_action_handle *handle,
> struct rte_flow_error *error);
> - /** See rte_flow_shared_action_update() */
> - int (*shared_action_update)
> + /** See rte_flow_action_handle_update() */
> + int (*action_handle_update)
> (struct rte_eth_dev *dev,
> - struct rte_flow_shared_action *shared_action,
> - const struct rte_flow_action *update,
> + struct rte_flow_action_handle *handle,
> + const void *update,
> struct rte_flow_error *error);
> - /** See rte_flow_shared_action_query() */
> - int (*shared_action_query)
> + /** See rte_flow_action_handle_query() */
> + int (*action_handle_query)
> (struct rte_eth_dev *dev,
> - const struct rte_flow_shared_action *shared_action,
> + const struct rte_flow_action_handle *handle,
> void *data,
> struct rte_flow_error *error);
> /** See rte_flow_tunnel_decap_set() */
> diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map
> index 93ad388..4eb561a 100644
> --- a/lib/librte_ethdev/version.map
> +++ b/lib/librte_ethdev/version.map
> @@ -231,10 +231,6 @@ EXPERIMENTAL {
> rte_eth_fec_get_capability;
> rte_eth_fec_get;
> rte_eth_fec_set;
> - rte_flow_shared_action_create;
> - rte_flow_shared_action_destroy;
> - rte_flow_shared_action_query;
> - rte_flow_shared_action_update;
> rte_flow_tunnel_decap_set;
> rte_flow_tunnel_match;
> rte_flow_get_restore_info;
> @@ -246,6 +242,10 @@ EXPERIMENTAL {
>
> # added in 21.05
> rte_eth_representor_info_get;
> + rte_flow_action_handle_create;
> + rte_flow_action_handle_destroy;
> + rte_flow_action_handle_update;
> + rte_flow_action_handle_query;
> };
>
> INTERNAL {
> --
> 1.8.3.1
Acked-by: Andrey Vesnovaty <andreyv@nvidia.com>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 9:15 4% ` David Marchand
@ 2021-04-13 9:32 4% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 9:32 UTC (permalink / raw)
To: Jerin Jacob Kollanukkaran, Timothy McDaniel
Cc: dev, Ray Kinsella, David Marchand
13/04/2021 11:15, David Marchand:
> On Tue, Apr 13, 2021 at 10:45 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > The eventdev driver DLB was removed in DPDK 21.05,
> > breaking the ABI check.
> > The exception was agreed so we just need to skip this check.
> >
> > Note: complete removal of a driver cannot be ignored
> > in devtools/libabigail.abignore, so the script must be patched.
>
> Indeed, abidiff wants to compare two shared libraries/dumps.
> In this situation, we don't have a second library/dump.
>
> > Fixes: 698fa829415d ("event/dlb: remove driver")
> >
> > Reported-by: David Marchand <david.marchand@redhat.com>
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: David Marchand <david.marchand@redhat.com>
Applied
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 8:45 15% ` [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check Thomas Monjalon
@ 2021-04-13 9:15 4% ` David Marchand
2021-04-13 9:32 4% ` Thomas Monjalon
2021-04-13 16:09 4% ` Kinsella, Ray
1 sibling, 1 reply; 200+ results
From: David Marchand @ 2021-04-13 9:15 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, Jerin Jacob Kollanukkaran, Ray Kinsella, Neil Horman,
Timothy McDaniel
On Tue, Apr 13, 2021 at 10:45 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> The eventdev driver DLB was removed in DPDK 21.05,
> breaking the ABI check.
> The exception was agreed so we just need to skip this check.
>
> Note: complete removal of a driver cannot be ignored
> in devtools/libabigail.abignore, so the script must be patched.
Indeed, abidiff wants to compare two shared libraries/dumps.
In this situation, we don't have a second library/dump.
>
> Fixes: 698fa829415d ("event/dlb: remove driver")
>
> Reported-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: David Marchand <david.marchand@redhat.com>
--
David Marchand
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 9:07 0% ` David Marchand
2021-04-13 9:12 3% ` Thomas Monjalon
@ 2021-04-13 9:14 5% ` David Marchand
1 sibling, 0 replies; 200+ results
From: David Marchand @ 2021-04-13 9:14 UTC (permalink / raw)
To: Jerin Jacob
Cc: Thomas Monjalon, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, Aaron Conole, dpdklab, abhinandan.gujjar,
harry.van.haaren, dev, Shijith Thotton, Akhil Goyal,
Pavan Nikhilesh Bhagavatula, mattias.ronnblom, ci
On Tue, Apr 13, 2021 at 11:07 AM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Tue, Apr 13, 2021 at 10:55 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > I was running the following script[1] to detect ABI issues.
> > Since the "./devtools/test-meson-builds.sh" did not return non zero value or
> > the error print was "Error: cannot find librte_event_dlb.dump", It is
> > missed from my side.
> >
> > @David Marchand @Thomas Monjalon Could you share the snippet you are
> > using for detecting the ABI issue.
> >
> >
> > ------------------------
> > # ABI check
> > DPDK_ABI_REF_VERSION=v20.11 DPDK_ABI_REF_DIR=/tmp bash
>
> Ah ok, this is because event/dlb did not exist in 20.11.
> Running against 21.02, you should get the error.
Clicked send too quickly...
No, it did exist.
$ DPDK_ABI_REF_VERSION=v20.11 ./devtools/test-meson-builds.sh
ninja: Entering directory `/home/dmarchan/builds/build-gcc-static'
ninja: no work to do.
ninja: Entering directory `/home/dmarchan/builds/build-gcc-shared'
ninja: no work to do.
Error: cannot find librte_event_dlb.dump in
/home/dmarchan/builds/build-gcc-shared/install
Hum... the next reason I see would be that your reference does not
have event/dlb which is surprising with default configuration.
$ ls $DPDK_ABI_REF_DIR/*/*/dump/*dlb.dump
/home/dmarchan/abi/v20.11/build-clang-shared/dump/librte_event_dlb.dump
/home/dmarchan/abi/v21.02/build-clang-shared/dump/librte_event_dlb.dump
/home/dmarchan/abi/v20.11/build-gcc-shared/dump/librte_event_dlb.dump
/home/dmarchan/abi/v21.02/build-gcc-shared/dump/librte_event_dlb.dump
--
David Marchand
^ permalink raw reply [relevance 5%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 9:07 0% ` David Marchand
@ 2021-04-13 9:12 3% ` Thomas Monjalon
2021-04-13 9:14 5% ` David Marchand
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 9:12 UTC (permalink / raw)
To: Jerin Jacob, David Marchand
Cc: Timothy McDaniel, Jerin Jacob Kollanukkaran, Ray Kinsella,
Aaron Conole, dpdklab, abhinandan.gujjar, harry.van.haaren, dev,
Shijith Thotton, Akhil Goyal, Pavan Nikhilesh Bhagavatula,
mattias.ronnblom, ci
13/04/2021 11:07, David Marchand:
> On Tue, Apr 13, 2021 at 10:55 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > I was running the following script[1] to detect ABI issues.
> > Since the "./devtools/test-meson-builds.sh" did not return non zero value or
> > the error print was "Error: cannot find librte_event_dlb.dump", It is
> > missed from my side.
> >
> > @David Marchand @Thomas Monjalon Could you share the snippet you are
> > using for detecting the ABI issue.
> >
> >
> > ------------------------
> > # ABI check
> > DPDK_ABI_REF_VERSION=v20.11 DPDK_ABI_REF_DIR=/tmp bash
>
> Ah ok, this is because event/dlb did not exist in 20.11.
No it was added in 20.11.
> Running against 21.02, you should get the error.
Yes we should always run the ABI check against the latest release.
It means you must upgrade DPDK_ABI_REF_VERSION after each release.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 8:54 5% ` [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob
2021-04-13 9:01 0% ` Thomas Monjalon
@ 2021-04-13 9:07 0% ` David Marchand
2021-04-13 9:12 3% ` Thomas Monjalon
2021-04-13 9:14 5% ` David Marchand
1 sibling, 2 replies; 200+ results
From: David Marchand @ 2021-04-13 9:07 UTC (permalink / raw)
To: Jerin Jacob
Cc: Thomas Monjalon, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, Aaron Conole, dpdklab, abhinandan.gujjar,
harry.van.haaren, dev, Shijith Thotton, Akhil Goyal,
Pavan Nikhilesh Bhagavatula, mattias.ronnblom, ci
On Tue, Apr 13, 2021 at 10:55 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> I was running the following script[1] to detect ABI issues.
> Since the "./devtools/test-meson-builds.sh" did not return non zero value or
> the error print was "Error: cannot find librte_event_dlb.dump", It is
> missed from my side.
>
> @David Marchand @Thomas Monjalon Could you share the snippet you are
> using for detecting the ABI issue.
>
>
> ------------------------
> # ABI check
> DPDK_ABI_REF_VERSION=v20.11 DPDK_ABI_REF_DIR=/tmp bash
Ah ok, this is because event/dlb did not exist in 20.11.
Running against 21.02, you should get the error.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 8:54 5% ` [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob
@ 2021-04-13 9:01 0% ` Thomas Monjalon
2021-04-13 9:07 0% ` David Marchand
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 9:01 UTC (permalink / raw)
To: Jerin Jacob
Cc: David Marchand, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, Aaron Conole, dpdklab, abhinandan.gujjar,
harry.van.haaren, dev, Shijith Thotton, Akhil Goyal,
Pavan Nikhilesh Bhagavatula, mattias.ronnblom, ci
13/04/2021 10:54, Jerin Jacob:
> On Tue, Apr 13, 2021 at 12:46 PM David Marchand
> <david.marchand@redhat.com> wrote:
> >
> > On Tue, Apr 13, 2021 at 12:12 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > >
> > > 12/04/2021 15:20, Jerin Jacob Kollanukkaran:
> > > > http://dpdk.org/git/next/dpdk-next-eventdev
> > >
> > > Pulled, thanks.
> > >
> > > Note few changes in titles like uppercases for acronyms,
> > > or "add support" simplified as "support",
> > > and release notes moved in the right place.
> >
> > The ABI check now reports an error on event/dlb.
> > The reason is that the event/dlb driver has been removed, and so the
> > check complains about a missing dump.
> > This will have to be fixed quickly or reverted.
> >
> >
> > This has been missed by multiple people, so trying to understand why.
>
>
> I was running the following script[1] to detect ABI issues.
> Since the "./devtools/test-meson-builds.sh" did not return non zero value or
> the error print was "Error: cannot find librte_event_dlb.dump", It is
> missed from my side.
>
> @David Marchand @Thomas Monjalon Could you share the snippet you are
> using for detecting the ABI issue.
I do like you: simply run test-meson-builds.sh
And yes I saw the error, and I don't know why I thought it was OK!
We are humans :)
> ------------------------
> # ABI check
> DPDK_ABI_REF_VERSION=v20.11 DPDK_ABI_REF_DIR=/tmp bash
> ./devtools/test-meson-builds.sh 1> /tmp/build.log 2> /tmp/build.log
> if [ $? -ne 0 ]; then
> echo "ABI check failed"
> exit
> fi
>
> grep "Error: ABI issue reported" /tmp/build.log
> if [ $? -eq 0 ]; then
> echo "ABI issue"
> exit
> fi
>
> -------------------------------------------------------
> >
> > The ABI check should have caught this when run by maintainers (/me
> > looks at Thomas and Jerin).
>
> Sorry for that :-(
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 7:15 5% ` David Marchand
2021-04-13 7:31 0% ` Thomas Monjalon
2021-04-13 8:45 15% ` [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check Thomas Monjalon
@ 2021-04-13 8:54 5% ` Jerin Jacob
2021-04-13 9:01 0% ` Thomas Monjalon
2021-04-13 9:07 0% ` David Marchand
2021-04-13 12:58 0% ` Aaron Conole
3 siblings, 2 replies; 200+ results
From: Jerin Jacob @ 2021-04-13 8:54 UTC (permalink / raw)
To: David Marchand
Cc: Thomas Monjalon, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, Aaron Conole, dpdklab, abhinandan.gujjar,
harry.van.haaren, dev, Shijith Thotton, Akhil Goyal,
Pavan Nikhilesh Bhagavatula, mattias.ronnblom, ci
On Tue, Apr 13, 2021 at 12:46 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Tue, Apr 13, 2021 at 12:12 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > 12/04/2021 15:20, Jerin Jacob Kollanukkaran:
> > > http://dpdk.org/git/next/dpdk-next-eventdev
> >
> > Pulled, thanks.
> >
> > Note few changes in titles like uppercases for acronyms,
> > or "add support" simplified as "support",
> > and release notes moved in the right place.
>
> The ABI check now reports an error on event/dlb.
> The reason is that the event/dlb driver has been removed, and so the
> check complains about a missing dump.
> This will have to be fixed quickly or reverted.
>
>
> This has been missed by multiple people, so trying to understand why.
I was running the following script[1] to detect ABI issues.
Since the "./devtools/test-meson-builds.sh" did not return non zero value or
the error print was "Error: cannot find librte_event_dlb.dump", It is
missed from my side.
@David Marchand @Thomas Monjalon Could you share the snippet you are
using for detecting the ABI issue.
------------------------
# ABI check
DPDK_ABI_REF_VERSION=v20.11 DPDK_ABI_REF_DIR=/tmp bash
./devtools/test-meson-builds.sh 1> /tmp/build.log 2> /tmp/build.log
if [ $? -ne 0 ]; then
echo "ABI check failed"
exit
fi
grep "Error: ABI issue reported" /tmp/build.log
if [ $? -eq 0 ]; then
echo "ABI issue"
exit
fi
-------------------------------------------------------
>
> The ABI check should have caught this when run by maintainers (/me
> looks at Thomas and Jerin).
Sorry for that :-(
^ permalink raw reply [relevance 5%]
* [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check
2021-04-13 7:15 5% ` David Marchand
2021-04-13 7:31 0% ` Thomas Monjalon
@ 2021-04-13 8:45 15% ` Thomas Monjalon
2021-04-13 9:15 4% ` David Marchand
2021-04-13 16:09 4% ` Kinsella, Ray
2021-04-13 8:54 5% ` [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob
2021-04-13 12:58 0% ` Aaron Conole
3 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 8:45 UTC (permalink / raw)
To: dev; +Cc: jerinj, David Marchand, Ray Kinsella, Neil Horman, Timothy McDaniel
The eventdev driver DLB was removed in DPDK 21.05,
breaking the ABI check.
The exception was agreed so we just need to skip this check.
Note: complete removal of a driver cannot be ignored
in devtools/libabigail.abignore, so the script must be patched.
Fixes: 698fa829415d ("event/dlb: remove driver")
Reported-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
This should have been done as part of removing the driver.
The CI is currently broken, so it should be merged today.
---
devtools/check-abi.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh
index 9835e346da..ca523eb94c 100755
--- a/devtools/check-abi.sh
+++ b/devtools/check-abi.sh
@@ -44,6 +44,10 @@ for dump in $(find $refdir -name "*.dump"); do
echo "Skipped glue library $name."
continue
fi
+ if grep -qE "\<soname='librte_event_dlb\.so" $dump; then
+ echo "Skipped removed driver $name."
+ continue
+ fi
dump2=$(find $newdir -name $name)
if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then
echo "Error: cannot find $name in $newdir" >&2
--
2.31.1
^ permalink raw reply [relevance 15%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
2021-04-13 7:15 5% ` David Marchand
@ 2021-04-13 7:31 0% ` Thomas Monjalon
2021-04-13 8:45 15% ` [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check Thomas Monjalon
` (2 subsequent siblings)
3 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-13 7:31 UTC (permalink / raw)
To: David Marchand
Cc: Timothy McDaniel, Jerin Jacob Kollanukkaran, Ray Kinsella,
Aaron Conole, dpdklab, abhinandan.gujjar, harry.van.haaren, dev,
Shijith Thotton, Akhil Goyal, Pavan Nikhilesh Bhagavatula,
mattias.ronnblom, ci, ferruh.yigit
13/04/2021 09:15, David Marchand:
> On Tue, Apr 13, 2021 at 12:12 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > 12/04/2021 15:20, Jerin Jacob Kollanukkaran:
> > > http://dpdk.org/git/next/dpdk-next-eventdev
> >
> > Pulled, thanks.
> >
> > Note few changes in titles like uppercases for acronyms,
> > or "add support" simplified as "support",
> > and release notes moved in the right place.
>
> The ABI check now reports an error on event/dlb.
> The reason is that the event/dlb driver has been removed, and so the
> check complains about a missing dump.
> This will have to be fixed quickly or reverted.
>
>
> This has been missed by multiple people, so trying to understand why.
>
> The ABI check should have caught this when run by maintainers (/me
> looks at Thomas and Jerin).
>
> The CI should have caught it too.
> But, v1 did not apply.
> For v2, I can see a doc generation issue reported by Intel CI that I
> can't reproduce, so it could be just noise.
> I can't find reports for Travis or GHA and I could not find in the
> robot logs why the series_15708 branch was not created.
>
> Looking at UNH reports:
> http://mails.dpdk.org/archives/test-report/2021-March/182956.html
> But looking at the log:
> [2713/2716] Compiling C object
> 'drivers/a715181@@rte_event_octeontx2@sta/meson-generated_.._rte_event_octeontx2.pmd.c.o'.
> [2714/2716] Linking static target drivers/librte_event_octeontx2.a.
> [2715/2716] Generating rte_event_octeontx2.sym_chk with a meson_exe.py
> custom command.
> [2716/2716] Linking target drivers/librte_event_octeontx2.so.21.1.
> Error: cannot find librte_event_dlb.dump in
> /home-local/jenkins-local/jenkins-agent/workspace/Ubuntu18.04-Compile-DPDK-ABI/dpdk/build-gcc-shared/install
>
> Is this something that has been fixed since then?
>
> I don't have the main branch/recent series status from UNH, but at
> least GHA and Travis are now complaining about ABI.
Sorry about that, this is because I stupidly thought I could fix it
locally without thinking about the CI.
I am going to send a patch for devtools/libabigail.abignore.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1
@ 2021-04-13 7:15 5% ` David Marchand
2021-04-13 7:31 0% ` Thomas Monjalon
` (3 more replies)
0 siblings, 4 replies; 200+ results
From: David Marchand @ 2021-04-13 7:15 UTC (permalink / raw)
To: Thomas Monjalon, Timothy McDaniel, Jerin Jacob Kollanukkaran,
Ray Kinsella, Aaron Conole, dpdklab
Cc: abhinandan.gujjar, harry.van.haaren, dev, Shijith Thotton,
Akhil Goyal, Pavan Nikhilesh Bhagavatula, mattias.ronnblom, ci
On Tue, Apr 13, 2021 at 12:12 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 12/04/2021 15:20, Jerin Jacob Kollanukkaran:
> > http://dpdk.org/git/next/dpdk-next-eventdev
>
> Pulled, thanks.
>
> Note few changes in titles like uppercases for acronyms,
> or "add support" simplified as "support",
> and release notes moved in the right place.
The ABI check now reports an error on event/dlb.
The reason is that the event/dlb driver has been removed, and so the
check complains about a missing dump.
This will have to be fixed quickly or reverted.
This has been missed by multiple people, so trying to understand why.
The ABI check should have caught this when run by maintainers (/me
looks at Thomas and Jerin).
The CI should have caught it too.
But, v1 did not apply.
For v2, I can see a doc generation issue reported by Intel CI that I
can't reproduce, so it could be just noise.
I can't find reports for Travis or GHA and I could not find in the
robot logs why the series_15708 branch was not created.
Looking at UNH reports:
http://mails.dpdk.org/archives/test-report/2021-March/182956.html
But looking at the log:
[2713/2716] Compiling C object
'drivers/a715181@@rte_event_octeontx2@sta/meson-generated_.._rte_event_octeontx2.pmd.c.o'.
[2714/2716] Linking static target drivers/librte_event_octeontx2.a.
[2715/2716] Generating rte_event_octeontx2.sym_chk with a meson_exe.py
custom command.
[2716/2716] Linking target drivers/librte_event_octeontx2.so.21.1.
Error: cannot find librte_event_dlb.dump in
/home-local/jenkins-local/jenkins-agent/workspace/Ubuntu18.04-Compile-DPDK-ABI/dpdk/build-gcc-shared/install
Is this something that has been fixed since then?
I don't have the main branch/recent series status from UNH, but at
least GHA and Travis are now complaining about ABI.
--
David Marchand
^ permalink raw reply [relevance 5%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-12 19:42 0% ` Ferruh Yigit
@ 2021-04-13 1:26 0% ` Bing Zhao
2021-04-13 14:00 0% ` Ori Kam
0 siblings, 1 reply; 200+ results
From: Bing Zhao @ 2021-04-13 1:26 UTC (permalink / raw)
To: Ferruh Yigit, Ori Kam, NBU-Contact-Thomas Monjalon,
andrew.rybchenko, Matan Azrad, Slava Ovsiienko
Cc: dev, ajit.khaparde, Gregory Etelson, Andrey Vesnovaty
Hi Ferruh,
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> Sent: Tuesday, April 13, 2021 3:42 AM
> To: Bing Zhao <bingz@nvidia.com>; Ori Kam <orika@nvidia.com>; NBU-
> Contact-Thomas Monjalon <thomas@monjalon.net>;
> andrew.rybchenko@oktetlabs.ru; Matan Azrad <matan@nvidia.com>; Slava
> Ovsiienko <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org; ajit.khaparde@broadcom.com; Gregory Etelson
> <getelson@nvidia.com>; Andrey Vesnovaty <andreyv@nvidia.com>
> Subject: Re: [PATCH v2 1/4] ethdev: introduce indirect action APIs
>
> External email: Use caution opening links or attachments
>
>
> On 4/10/2021 3:03 PM, Bing Zhao wrote:
> > Right now, rte_flow_shared_action_* APIs are used for some shared
> > actions, like RSS, count. The shared action should be created
> before
> > using it inside a flow. These shared actions sometimes are not
> really
> > shared but just some indirect actions decoupled from a flow.
> >
> > The new functions rte_flow_action_handle_* are added to replace
> the
> > current shared functions rte_flow_shared_action_*.
> >
> > There are two types of flow actions:
> > 1. the direct (normal) actions that could be created and stored
> > within a flow rule. Such action is tied to its flow rule and
> > cannot be reused.
> > 2. the indirect action, in the past, named shared_action. It is
> > created from a direct actioni, like count or rss, and then
> used
> > in the flow rules with an object handle. The PMD will take
> care
> > of the retrieve from indirect action to the direct action
> > when it is referenced.
> >
> > The indirect action is accessed (update / query) w/o any flow rule,
> > just via the action object handle. For example, when querying or
> > resetting a counter, it could be done out of any flow using this
> > counter, but only the handle of the counter action object is
> required.
> > The indirect action object could be shared by different flows or
> used
> > by a single flow, depending on the direct action type and the
> > real-life requirements.
> > The handle of an indirect action object is opaque and defined in
> each
> > driver and possibly different per direct action type.
> >
> > The old name "shared" is improper in a sense and should be
> replaced.
> >
> > All the command lines in testpmd application with "shared_action*"
> > are replaced with "indirect_action*".
> >
> > The parameter of "update" interface is also changed. A general
> pointer
> > will replace the rte_flow_action struct pointer due to the
> > facts:
> > 1. Some action may not support fields updating. In the example of
> a
> > counter, the only "update" supported should be the reset. So
> > passing a rte_flow_action struct pointer is meaningless and
> > there is even no such corresponding action struct. What's more,
> > if more than one operations should be supported, for some
> other
> > action, such pointer parameter may not meet the need.
> > 2. Some action may need conditional or partial update, the current
> > parameter will not provide the ability to indicate which
> part(s)
> > to update.
> > For different types of indirect action objects, the pointer
> could
> > either be the same of rte_flow_action* struct - in order not
> to
> > break the current driver implementation, or some wrapper
> > structures with bits as masks to indicate which part to be
> > updated, depending on real needs of the corresponding direct
> > action. For different direct actions, the structures of
> indirect
> > action objects updating will be different.
> >
> > All the underlayer PMD callbacks will be moved to these new APIs.
> >
> > The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break
> > the ABI. All the implementations are changed by using
> > RTE_FLOW_ACTION_TYPE_INDIRECT.
> >
> > Signed-off-by: Bing Zhao <bingz@nvidia.com>
> > ---
> > doc/guides/rel_notes/release_21_05.rst | 3 +
> > lib/librte_ethdev/rte_flow.c | 56 ++++++++--------
> > lib/librte_ethdev/rte_flow.h | 118
> +++++++++++++++++++--------------
> > lib/librte_ethdev/rte_flow_driver.h | 26 ++++----
> > lib/librte_ethdev/version.map | 8 +--
>
> Isn't there any documentation to update with this change?
Do you mean the release note? I only updated the 20_01 release note part.
>
> If the shared action API is not documented at all, can you please
> add documentation for the action handle API?
In the testpmd usage guide, I found some description and update it together with the testpmd update.
I will check if there is another place to update or add.
Thanks
BR. Bing
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH] devtools: test different build types
@ 2021-04-12 21:53 23% Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-12 21:53 UTC (permalink / raw)
To: dev; +Cc: bruce.richardson, david.marchand
All builds were of type debugoptimized.
It is kept only for builds having an ABI check.
Others will have the default build type (release),
except if specified differently as in the x86 generic build
which will be a test of the non-optimized debug build type.
Some static builds will test the minsize build type.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
devtools/test-meson-builds.sh | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index daf817ac3e..37f258bd48 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -92,13 +92,16 @@ load_env () # <target compiler>
command -v $targetcc >/dev/null 2>&1 || return 1
}
-config () # <dir> <builddir> <meson options>
+config () # <dir> <builddir> <ABI check> <meson options>
{
dir=$1
shift
builddir=$1
shift
+ abicheck=$1
+ shift
if [ -f "$builddir/build.ninja" ] ; then
+ [ $abicheck = ABI ] || return 0
# for existing environments, switch to debugoptimized if unset
# so that ABI checks can run
if ! $MESON configure $builddir |
@@ -114,7 +117,9 @@ config () # <dir> <builddir> <meson options>
else
options="$options -Dexamples=l3fwd" # save disk space
fi
- options="$options --buildtype=debugoptimized"
+ if [ $abicheck = ABI ] ; then
+ options="$options --buildtype=debugoptimized"
+ fi
for option in $DPDK_MESON_OPTIONS ; do
options="$options -D$option"
done
@@ -165,7 +170,7 @@ build () # <directory> <target cc | cross file> <ABI check> [meson options]
cross=
fi
load_env $targetcc || return 0
- config $srcdir $builds_dir/$targetdir $cross --werror $*
+ config $srcdir $builds_dir/$targetdir $abicheck $cross --werror $*
compile $builds_dir/$targetdir
if [ -n "$DPDK_ABI_REF_VERSION" -a "$abicheck" = ABI ] ; then
abirefdir=${DPDK_ABI_REF_DIR:-reference}/$DPDK_ABI_REF_VERSION
@@ -179,7 +184,7 @@ build () # <directory> <target cc | cross file> <ABI check> [meson options]
fi
rm -rf $abirefdir/build
- config $abirefdir/src $abirefdir/build $cross \
+ config $abirefdir/src $abirefdir/build $abicheck $cross \
-Dexamples= $*
compile $abirefdir/build
install_target $abirefdir/build $abirefdir/$targetdir
@@ -213,9 +218,10 @@ for c in gcc clang ; do
abicheck=ABI
else
abicheck=skipABI # save time and disk space
+ buildtype='--buildtype=minsize'
fi
export CC="$CCACHE $c"
- build build-$c-$s $c $abicheck --default-library=$s
+ build build-$c-$s $c $abicheck $buildtype --default-library=$s
unset CC
done
done
@@ -227,7 +233,7 @@ generic_machine='nehalem'
if ! check_cc_flags "-march=$generic_machine" ; then
generic_machine='corei7'
fi
-build build-x86-generic cc skipABI -Dcheck_includes=true \
+build build-x86-generic cc skipABI --buildtype=debug -Dcheck_includes=true \
-Dlibdir=lib -Dmachine=$generic_machine $use_shared
# 32-bit with default compiler
--
2.31.1
^ permalink raw reply [relevance 23%]
* Re: [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
2021-04-10 14:03 4% ` [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs Bing Zhao
@ 2021-04-12 19:42 0% ` Ferruh Yigit
2021-04-13 1:26 0% ` Bing Zhao
2021-04-13 12:36 0% ` Andrey Vesnovaty
2021-04-15 13:55 0% ` Andrew Rybchenko
2 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2021-04-12 19:42 UTC (permalink / raw)
To: Bing Zhao, orika, thomas, andrew.rybchenko, matan, viacheslavo
Cc: dev, ajit.khaparde, getelson, andreyv
On 4/10/2021 3:03 PM, Bing Zhao wrote:
> Right now, rte_flow_shared_action_* APIs are used for some shared
> actions, like RSS, count. The shared action should be created before
> using it inside a flow. These shared actions sometimes are not
> really shared but just some indirect actions decoupled from a flow.
>
> The new functions rte_flow_action_handle_* are added to replace
> the current shared functions rte_flow_shared_action_*.
>
> There are two types of flow actions:
> 1. the direct (normal) actions that could be created and stored
> within a flow rule. Such action is tied to its flow rule and
> cannot be reused.
> 2. the indirect action, in the past, named shared_action. It is
> created from a direct actioni, like count or rss, and then used
> in the flow rules with an object handle. The PMD will take care
> of the retrieve from indirect action to the direct action
> when it is referenced.
>
> The indirect action is accessed (update / query) w/o any flow rule,
> just via the action object handle. For example, when querying or
> resetting a counter, it could be done out of any flow using this
> counter, but only the handle of the counter action object is
> required.
> The indirect action object could be shared by different flows or
> used by a single flow, depending on the direct action type and
> the real-life requirements.
> The handle of an indirect action object is opaque and defined in
> each driver and possibly different per direct action type.
>
> The old name "shared" is improper in a sense and should be replaced.
>
> All the command lines in testpmd application with "shared_action*"
> are replaced with "indirect_action*".
>
> The parameter of "update" interface is also changed. A general
> pointer will replace the rte_flow_action struct pointer due to the
> facts:
> 1. Some action may not support fields updating. In the example of a
> counter, the only "update" supported should be the reset. So
> passing a rte_flow_action struct pointer is meaningless and
> there is even no such corresponding action struct. What's more,
> if more than one operations should be supported, for some other
> action, such pointer parameter may not meet the need.
> 2. Some action may need conditional or partial update, the current
> parameter will not provide the ability to indicate which part(s)
> to update.
> For different types of indirect action objects, the pointer could
> either be the same of rte_flow_action* struct - in order not to
> break the current driver implementation, or some wrapper
> structures with bits as masks to indicate which part to be
> updated, depending on real needs of the corresponding direct
> action. For different direct actions, the structures of indirect
> action objects updating will be different.
>
> All the underlayer PMD callbacks will be moved to these new APIs.
>
> The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
> break the ABI. All the implementations are changed by using
> RTE_FLOW_ACTION_TYPE_INDIRECT.
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> ---
> doc/guides/rel_notes/release_21_05.rst | 3 +
> lib/librte_ethdev/rte_flow.c | 56 ++++++++--------
> lib/librte_ethdev/rte_flow.h | 118 +++++++++++++++++++--------------
> lib/librte_ethdev/rte_flow_driver.h | 26 ++++----
> lib/librte_ethdev/version.map | 8 +--
Isn't there any documentation to update with this change?
If the shared action API is not documented at all, can you please add
documentation for the action handle API?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v9 05/10] kvargs: update parser to support multiple lists
@ 2021-04-12 16:42 3% ` Kinsella, Ray
0 siblings, 0 replies; 200+ results
From: Kinsella, Ray @ 2021-04-12 16:42 UTC (permalink / raw)
To: Xueming Li, Andrew Rybchenko, Ferruh Yigit
Cc: dev, Viacheslav Ovsiienko, Asaf Penso, Olivier Matz, Thomas Monjalon
On 11/03/2021 13:13, Xueming Li wrote:
> This patch updates kvargs parser to support value of multiple lists or
> ranges:
> k1=v[1,2]v[3-5]
>
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
> Acked-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> app/test/test_kvargs.c | 46 +++++++++++++--
> lib/librte_kvargs/rte_kvargs.c | 101 +++++++++++++++++++++++----------
> 2 files changed, 112 insertions(+), 35 deletions(-)
>
Hi folks,
This is essentially an FYI.
This change introduced a weak functional ABI regression into DPDK.
When I test librte_kvargs using the v20.11 unit test binary I get the following.
EAL: Detected 80 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: 4090 hugepages of size 2097152 reserved, but no mounted hugetlbfs found for that size
APP: HPET is not enabled, using TSC as default timer
RTE>>kvargs_autotest
== test valid case ==
== test invalid case ==
rte_kvargs_parse() returned 0 (but should not)
while processing <foo=1,foo=> using valid_keys=<foo,check>
Test Failed
RTE>>
The reason this is failing in v20.11 and passing at the HEAD,
is that "no value" test case (foo=1,foo=) were removed from test_invalid_kvargs, and was added to test_valid_kvargs.
So tokens that were definitely invalid in v20.11, are now is valid in v21.11.
My 2c is that as long as the valid values in v20.11 are still OK, there is no regression.
Thanks,
Ray K
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] eal: move DMA mapping from bus-specific to generic driver
2021-03-31 22:53 4% ` Thomas Monjalon
2021-04-01 8:40 0% ` Kinsella, Ray
@ 2021-04-12 15:03 0% ` Kinsella, Ray
1 sibling, 0 replies; 200+ results
From: Kinsella, Ray @ 2021-04-12 15:03 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, hemant.agrawal, rosen.xu, sthemmin, longli, jerinj,
ferruh.yigit, andrew.rybchenko, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko, Maxime Coquelin, Chenbo Xia, xuemingl,
david.marchand
On 31/03/2021 23:53, Thomas Monjalon wrote:
> 01/04/2021 00:45, Thomas Monjalon:
>> The operations of DMA mapping and unmapping are controlled in some
>> bus drivers, following rte_bus specification.
>> If the device driver don't provide any specific mapping operation,
>> the bus driver may have a fallback (VFIO case for PCI).
>>
>> The DMA mapping done by the device drivers are called
>> from the bus drivers via function pointers in bus-specific structures:
>> rte_vdev_driver and rte_pci_driver.
>>
>> The device driver DMA mapping is not specific to the bus,
>> so it can be generalized to all device drivers, based on rte_device.
>> That's why the function pointers dma_map and dma_unmap
>> are moved to rte_driver, avoiding useless casts of device object.
>>
>> The function prototypes rte_dev_dma_map_t and rte_dev_dma_unmap_t
>> are removed from rte_bus.h because the definition in rte_dev.h is enough,
>> but they are still used in rte_bus for bus drivers,
>> while being added in rte_driver for device drivers,
>> and removed from rte_vdev_driver/rte_pci_driver.
>>
>> The impacted device drivers are mlx5 (PCI) and virtio_user (vdev).
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>> ---
>> Depends-on: series-16017 ("pci: add rte prefix")
>> ---
>> drivers/bus/pci/pci_common.c | 8 ++--
>> drivers/bus/pci/rte_bus_pci.h | 40 --------------------
>> drivers/bus/vdev/rte_bus_vdev.h | 40 --------------------
>> drivers/bus/vdev/vdev.c | 32 +++++-----------
>> drivers/common/mlx5/mlx5_common_pci.c | 30 ++++++++-------
>> drivers/net/mlx5/mlx5.c | 4 +-
>> drivers/net/mlx5/mlx5_mr.c | 50 +++++++++++++------------
>> drivers/net/mlx5/mlx5_rxtx.h | 4 +-
>> drivers/net/virtio/virtio_user_ethdev.c | 22 +++++------
>> lib/librte_eal/include/rte_bus.h | 42 ---------------------
>> lib/librte_eal/include/rte_dev.h | 49 +++++++++++++++++++++++-
>> 11 files changed, 117 insertions(+), 204 deletions(-)
>
> The ABI checker reports some issues on the driver interface.
> It needs to be carefully analyzed, because driver interface
> should not be part of the ABI compatibility contract.
>
The depends-on series-16017 is marked as superseded.
This patch doesn't apply cleanly, even when the depends-on series is applied before it.
Ray K
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH 2/3] stack: add lock-free support indication
@ 2021-04-12 8:29 4% ` Stanislaw Kardach
0 siblings, 0 replies; 200+ results
From: Stanislaw Kardach @ 2021-04-12 8:29 UTC (permalink / raw)
To: Olivier Matz; +Cc: dev, Stanislaw Kardach, phil.yang, stable
Currently it is impossible to detect programatically whether lock-free
implementation of rte_stack is supported. One could check whether the
header guard for lock-free stubs is defined (_RTE_STACK_LF_STUBS_H_) but
that's an unstable implementation detail. Because of that currently all
lock-free ring creations silently succeed (as long as the stack header
is 16B long) which later leads to push and pop operations being NOPs.
The observable effect is that stack_lf_autotest fails on platforms not
supporting the lock-free. Instead it should just skip the lock-free test
altogether.
This commit adds a new errno value (ENOTSUP) that may be returned by
rte_stack_create() to indicate that a given combination of flags is not
supported on a current platform.
This is detected by checking a compile-time flag in the include logic in
rte_stack_lf.h which may be used by applications to check the lock-free
support at compile time.
Signed-off-by: Stanislaw Kardach <kda@semihalf.com>
Fixes: 7911ba0473e0 ("stack: enable lock-free implementation for aarch64")
Cc: phil.yang@arm.com
Cc: stable@dpdk.org
---
doc/guides/rel_notes/release_21_05.rst | 4 ++++
lib/librte_stack/rte_stack.c | 4 +++-
lib/librte_stack/rte_stack.h | 1 +
lib/librte_stack/rte_stack_lf.h | 5 +++++
4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 6f5858c8f..42ed60da8 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -166,6 +166,10 @@ API Changes
* pci: The value ``PCI_ANY_ID`` is marked as deprecated
and can be replaced with ``RTE_PCI_ANY_ID``.
+* Lock-free ``rte_stack`` no longer silently ignores push and pop when it's not
+ supported on the current platform. Instead ``rte_stack_create()`` fails and
+ ``rte_errno`` is set to ``ENOTSUP``.
+
ABI Changes
-----------
diff --git a/lib/librte_stack/rte_stack.c b/lib/librte_stack/rte_stack.c
index 8a51fba17..10d3b2eeb 100644
--- a/lib/librte_stack/rte_stack.c
+++ b/lib/librte_stack/rte_stack.c
@@ -64,9 +64,11 @@ rte_stack_create(const char *name, unsigned int count, int socket_id,
#ifdef RTE_ARCH_64
RTE_BUILD_BUG_ON(sizeof(struct rte_stack_lf_head) != 16);
-#else
+#endif
+#if !defined(RTE_STACK_LF_SUPPORTED)
if (flags & RTE_STACK_F_LF) {
STACK_LOG_ERR("Lock-free stack is not supported on your platform\n");
+ rte_errno = ENOTSUP;
return NULL;
}
#endif
diff --git a/lib/librte_stack/rte_stack.h b/lib/librte_stack/rte_stack.h
index b82c74e72..27640f87b 100644
--- a/lib/librte_stack/rte_stack.h
+++ b/lib/librte_stack/rte_stack.h
@@ -205,6 +205,7 @@ rte_stack_free_count(struct rte_stack *s)
* - EEXIST - a stack with the same name already exists
* - ENOMEM - insufficient memory to create the stack
* - ENAMETOOLONG - name size exceeds RTE_STACK_NAMESIZE
+ * - ENOTSUP - platform does not support given flags combination.
*/
struct rte_stack *
rte_stack_create(const char *name, unsigned int count, int socket_id,
diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h
index eb106e64e..f2b012cd0 100644
--- a/lib/librte_stack/rte_stack_lf.h
+++ b/lib/librte_stack/rte_stack_lf.h
@@ -13,6 +13,11 @@
#else
#include "rte_stack_lf_generic.h"
#endif
+
+/**
+ * Indicates that RTE_STACK_F_LF is supported.
+ */
+#define RTE_STACK_LF_SUPPORTED
#endif
/**
--
2.27.0
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs
@ 2021-04-10 14:03 4% ` Bing Zhao
2021-04-12 19:42 0% ` Ferruh Yigit
` (2 more replies)
0 siblings, 3 replies; 200+ results
From: Bing Zhao @ 2021-04-10 14:03 UTC (permalink / raw)
To: orika, thomas, ferruh.yigit, andrew.rybchenko, matan, viacheslavo
Cc: dev, ajit.khaparde, getelson, andreyv
Right now, rte_flow_shared_action_* APIs are used for some shared
actions, like RSS, count. The shared action should be created before
using it inside a flow. These shared actions sometimes are not
really shared but just some indirect actions decoupled from a flow.
The new functions rte_flow_action_handle_* are added to replace
the current shared functions rte_flow_shared_action_*.
There are two types of flow actions:
1. the direct (normal) actions that could be created and stored
within a flow rule. Such action is tied to its flow rule and
cannot be reused.
2. the indirect action, in the past, named shared_action. It is
created from a direct actioni, like count or rss, and then used
in the flow rules with an object handle. The PMD will take care
of the retrieve from indirect action to the direct action
when it is referenced.
The indirect action is accessed (update / query) w/o any flow rule,
just via the action object handle. For example, when querying or
resetting a counter, it could be done out of any flow using this
counter, but only the handle of the counter action object is
required.
The indirect action object could be shared by different flows or
used by a single flow, depending on the direct action type and
the real-life requirements.
The handle of an indirect action object is opaque and defined in
each driver and possibly different per direct action type.
The old name "shared" is improper in a sense and should be replaced.
All the command lines in testpmd application with "shared_action*"
are replaced with "indirect_action*".
The parameter of "update" interface is also changed. A general
pointer will replace the rte_flow_action struct pointer due to the
facts:
1. Some action may not support fields updating. In the example of a
counter, the only "update" supported should be the reset. So
passing a rte_flow_action struct pointer is meaningless and
there is even no such corresponding action struct. What's more,
if more than one operations should be supported, for some other
action, such pointer parameter may not meet the need.
2. Some action may need conditional or partial update, the current
parameter will not provide the ability to indicate which part(s)
to update.
For different types of indirect action objects, the pointer could
either be the same of rte_flow_action* struct - in order not to
break the current driver implementation, or some wrapper
structures with bits as masks to indicate which part to be
updated, depending on real needs of the corresponding direct
action. For different direct actions, the structures of indirect
action objects updating will be different.
All the underlayer PMD callbacks will be moved to these new APIs.
The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
break the ABI. All the implementations are changed by using
RTE_FLOW_ACTION_TYPE_INDIRECT.
Signed-off-by: Bing Zhao <bingz@nvidia.com>
---
doc/guides/rel_notes/release_21_05.rst | 3 +
lib/librte_ethdev/rte_flow.c | 56 ++++++++--------
lib/librte_ethdev/rte_flow.h | 118 +++++++++++++++++++--------------
lib/librte_ethdev/rte_flow_driver.h | 26 ++++----
lib/librte_ethdev/version.map | 8 +--
5 files changed, 115 insertions(+), 96 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 374d6d9..6c0ac46 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -164,6 +164,9 @@ API Changes
from ``rte_thread_tls_*`` to ``rte_thread_*`` to avoid naming redundancy
and confusion with the transport layer security term.
+* ethdev: The experimental shared action APIs in ``rte_flow.h`` has been
+ replaced from ``rte_flow_shared_action_*`` to indirect action APIs named
+ ``rte_flow_action_handle_*``.
ABI Changes
-----------
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index e07e617..27a1615 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -180,12 +180,12 @@ struct rte_flow_desc_data {
MK_FLOW_ACTION(MODIFY_FIELD,
sizeof(struct rte_flow_action_modify_field)),
/**
- * Shared action represented as handle of type
- * (struct rte_flow_shared action *) stored in conf field (see
+ * Indirect action represented as handle of type
+ * (struct rte_flow_action_handle *) stored in conf field (see
* struct rte_flow_action); no need for additional structure to * store
- * shared action handle.
+ * indirect action handle.
*/
- MK_FLOW_ACTION(SHARED, 0),
+ MK_FLOW_ACTION(INDIRECT, 0),
};
int
@@ -1067,53 +1067,53 @@ enum rte_flow_conv_item_spec_type {
NULL, rte_strerror(ENOTSUP));
}
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error)
{
- struct rte_flow_shared_action *shared_action;
+ struct rte_flow_action_handle *handle;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return NULL;
- if (unlikely(!ops->shared_action_create)) {
+ if (unlikely(!ops->action_handle_create)) {
rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
rte_strerror(ENOSYS));
return NULL;
}
- shared_action = ops->shared_action_create(&rte_eth_devices[port_id],
- conf, action, error);
- if (shared_action == NULL)
+ handle = ops->action_handle_create(&rte_eth_devices[port_id],
+ conf, action, error);
+ if (handle == NULL)
flow_err(port_id, -rte_errno, error);
- return shared_action;
+ return handle;
}
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
- struct rte_flow_error *error)
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ struct rte_flow_error *error)
{
int ret;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_destroy))
+ if (unlikely(!ops->action_handle_destroy))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_destroy(&rte_eth_devices[port_id], action,
- error);
+ ret = ops->action_handle_destroy(&rte_eth_devices[port_id],
+ handle, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error)
{
int ret;
@@ -1121,18 +1121,18 @@ struct rte_flow_shared_action *
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_update))
+ if (unlikely(!ops->action_handle_update))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_update(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_update(&rte_eth_devices[port_id], handle,
update, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error)
{
@@ -1141,11 +1141,11 @@ struct rte_flow_shared_action *
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_query))
+ if (unlikely(!ops->action_handle_query))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_query(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_query(&rte_eth_devices[port_id], handle,
data, error);
return flow_err(port_id, ret, error);
}
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 6cc5713..91ae25b 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -1821,7 +1821,7 @@ enum rte_flow_action_type {
* Enables counters for this flow rule.
*
* These counters can be retrieved and reset through rte_flow_query() or
- * rte_flow_shared_action_query() if the action provided via handle,
+ * rte_flow_action_handle_query() if the action provided via handle,
* see struct rte_flow_query_count.
*
* See struct rte_flow_action_count.
@@ -2267,6 +2267,16 @@ enum rte_flow_action_type {
* See struct rte_flow_action_modify_field.
*/
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
+
+ /**
+ * Describe indirect action that could be used by a single flow rule
+ * or multiple flow rules.
+ *
+ * Allow flow rule(s) reference the same action by the indirect action
+ * handle (see struct rte_flow_action_handle), rules could be on the
+ * same port or across different ports.
+ */
+ RTE_FLOW_ACTION_TYPE_INDIRECT,
};
/**
@@ -2357,7 +2367,7 @@ struct rte_flow_query_age {
* ``struct rte_flow_query_count``.
*
* @deprecated Shared attribute is deprecated, use generic
- * RTE_FLOW_ACTION_TYPE_SHARED action.
+ * RTE_FLOW_ACTION_TYPE_INDIRECT action.
*
* The shared flag indicates whether the counter is unique to the flow rule the
* action is specified with, or whether it is a shared counter.
@@ -2847,17 +2857,23 @@ struct rte_flow_action_set_dscp {
};
/**
- * RTE_FLOW_ACTION_TYPE_SHARED
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_INDIRECT
*
- * Opaque type returned after successfully creating a shared action.
+ * Opaque type returned after successfully creating an indirect action object.
+ * The definition of the object handle will be different per driver or
+ * per immediate action type.
*
- * This handle can be used to manage and query the related action:
- * - share it across multiple flow rules
- * - update action configuration
- * - query action data
- * - destroy action
+ * This handle can be used to manage and query the related immediate action:
+ * - referenced in single flow rule or across multiple flow rules
+ * over multiple ports
+ * - update action object configuration
+ * - query action object data
+ * - destroy action object
*/
-struct rte_flow_shared_action;
+struct rte_flow_action_handle;
/**
* Field IDs for MODIFY_FIELD action.
@@ -3628,25 +3644,22 @@ struct rte_flow_desc {
uint32_t nb_contexts, struct rte_flow_error *error);
/**
- * Specify shared action configuration
+ * Specify indirect action object configuration
*/
-struct rte_flow_shared_action_conf {
+struct rte_flow_indir_action_conf {
/**
- * Flow direction for shared action configuration.
+ * Flow direction for the indirect action configuration.
*
- * Shared action should be valid at least for one flow direction,
+ * Action should be valid at least for one flow direction,
* otherwise it is invalid for both ingress and egress rules.
*/
uint32_t ingress:1;
/**< Action valid for rules applied to ingress traffic. */
uint32_t egress:1;
/**< Action valid for rules applied to egress traffic. */
-
/**
* When set to 1, indicates that the action is valid for
* transfer traffic; otherwise, for non-transfer traffic.
- *
- * See struct rte_flow_attr.
*/
uint32_t transfer:1;
};
@@ -3655,16 +3668,17 @@ struct rte_flow_shared_action_conf {
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Create shared action for reuse in multiple flow rules.
- * The created shared action has single state and configuration
- * across all flow rules using it.
+ * Create an indirect action object that can be used by flow create, and
+ * could also be shared by different flows.
+ * The created object handle has single state and configuration
+ * across all the flow rules using it.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] conf
- * Shared action configuration.
+ * Action configuration for the indirect action object creation.
* @param[in] action
- * Action configuration for shared action creation.
+ * Specific configuration of the indirect action object.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3678,9 +3692,9 @@ struct rte_flow_shared_action_conf {
* - (ENOTSUP) if *action* valid but unsupported.
*/
__rte_experimental
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
@@ -3688,12 +3702,12 @@ struct rte_flow_shared_action *
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Destroy the shared action by handle.
+ * Destroy indirect action by handle.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be destroyed.
+ * @param[in] handle
+ * Handle for the indirect action object to be destroyed.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3708,27 +3722,30 @@ struct rte_flow_shared_action *
*/
__rte_experimental
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Update in-place the shared action configuration pointed by *action* handle
- * with the configuration provided as *update* argument.
- * The update of the shared action configuration effects all flow rules reusing
- * the action via handle.
+ * Update in-place the action configuration and / or state pointed
+ * by action *handle* with the configuration provided as *update* argument.
+ * The update of the action configuration effects all flow rules reusing
+ * the action via *handle*.
+ * The update general pointer provides the ability of partial updating.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be updated.
+ * @param[in] handle
+ * Handle for the indirect action object to be updated.
* @param[in] update
- * Action specification used to modify the action pointed by handle.
- * *update* should be of same type with the action pointed by the *action*
- * handle argument, otherwise considered as invalid.
+ * Update profile specification used to modify the action pointed by handle.
+ * *update* could be with the same type of the immediate action corresponding
+ * to the *handle* argument when creating, or a wrapper structure includes
+ * action configuration to be updated and bit fields to indicate the member
+ * of fields inside the action to update.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3739,32 +3756,32 @@ struct rte_flow_shared_action *
* - (-EIO) if underlying device is removed.
* - (-EINVAL) if *update* invalid.
* - (-ENOTSUP) if *update* valid but unsupported.
- * - (-ENOENT) if action pointed by *ctx* was not found.
+ * - (-ENOENT) if indirect action object pointed by *handle* was not found.
* rte_errno is also set.
*/
__rte_experimental
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Query the shared action by handle.
+ * Query the direct action by corresponding indirect action object handle.
*
* Retrieve action-specific data such as counters.
* Data is gathered by special action which may be present/referenced in
* more than one flow rule definition.
*
- * \see RTE_FLOW_ACTION_TYPE_COUNT
+ * @see RTE_FLOW_ACTION_TYPE_COUNT
*
* @param port_id
* Port identifier of Ethernet device.
- * @param[in] action
- * Handle for the shared action to query.
+ * @param[in] handle
+ * Handle for the action object to query.
* @param[in, out] data
* Pointer to storage for the associated query data type.
* @param[out] error
@@ -3776,10 +3793,9 @@ struct rte_flow_shared_action *
*/
__rte_experimental
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
- void *data,
- struct rte_flow_error *error);
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
+ void *data, struct rte_flow_error *error);
/* Tunnel has a type and the key information. */
struct rte_flow_tunnel {
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index da594d9..8d825eb 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -83,27 +83,27 @@ struct rte_flow_ops {
void **context,
uint32_t nb_contexts,
struct rte_flow_error *err);
- /** See rte_flow_shared_action_create() */
- struct rte_flow_shared_action *(*shared_action_create)
+ /** See rte_flow_action_handle_create() */
+ struct rte_flow_action_handle *(*action_handle_create)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_destroy() */
- int (*shared_action_destroy)
+ /** See rte_flow_action_handle_destroy() */
+ int (*action_handle_destroy)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_update() */
- int (*shared_action_update)
+ /** See rte_flow_action_handle_update() */
+ int (*action_handle_update)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *update,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_query() */
- int (*shared_action_query)
+ /** See rte_flow_action_handle_query() */
+ int (*action_handle_query)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *shared_action,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error);
/** See rte_flow_tunnel_decap_set() */
diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map
index 93ad388..4eb561a 100644
--- a/lib/librte_ethdev/version.map
+++ b/lib/librte_ethdev/version.map
@@ -231,10 +231,6 @@ EXPERIMENTAL {
rte_eth_fec_get_capability;
rte_eth_fec_get;
rte_eth_fec_set;
- rte_flow_shared_action_create;
- rte_flow_shared_action_destroy;
- rte_flow_shared_action_query;
- rte_flow_shared_action_update;
rte_flow_tunnel_decap_set;
rte_flow_tunnel_match;
rte_flow_get_restore_info;
@@ -246,6 +242,10 @@ EXPERIMENTAL {
# added in 21.05
rte_eth_representor_info_get;
+ rte_flow_action_handle_create;
+ rte_flow_action_handle_destroy;
+ rte_flow_action_handle_update;
+ rte_flow_action_handle_query;
};
INTERNAL {
--
1.8.3.1
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH] ethdev: introduce indirect action APIs
[not found] <1615967952-228321-1-git-send-email-bingz@nvidia.com>
2021-04-08 14:46 2% ` [dpdk-dev] [RFC PATCH v2] ethdev: introduce indirect action APIs Bing Zhao
@ 2021-04-09 3:54 4% ` Bing Zhao
1 sibling, 2 replies; 200+ results
From: Bing Zhao @ 2021-04-09 3:54 UTC (permalink / raw)
To: orika, thomas, ferruh.yigit, andrew.rybchenko; +Cc: dev, ajit.khaparde
Right now, rte_flow_shared_action_* APIs are used for some shared
actions, like RSS, count. The shared action shoule be created before
using it inside a flow. These shared actions sometimes are not
really shared but just some indirect actions decoupled from a flow.
The new functions rte_flow_action_handle_* are added to replace
the current shared functions rte_flow_shared_action_*.
There are two types of flow actions:
1. the direct (normal) actions that could be created and stored
within a flow rule. Such action is tied to its flow rule and
cannot be reused.
2. the indirect action, in the past, named shared_action. It is
created from a direct actioni, like count or rss, and then used
in the flow rules with an object handle. The PMD will take care
of the retrieve from indirect action to the direct action
when it is referenced.
The indirect action is accessed (update / query) w/o any flow rule,
just via the action object handle. For example, when querying or
resetting a counter, it could be done out of any flow using this
counter, but only the handle of the counter action object is
required.
The indirect action object could be shared by different flows or
used by a single flow, depending on the direct action type and
the real-life requirements.
The handle of an indirect action object is opaque and defined in
each driver and possibly different per direct action type.
The old name "shared" is improper in a sense and should be replaced.
All the command lines in testpmd application with "shared_action*"
are replaced with "indirect_action*".
The parameter of "update" interface is also changed. A general
pointer will replace the rte_flow_action struct pointer due to the
facts:
1. Some action may not support fields updating. In the example of a
counter, the only "update" supported should be the reset. So
passing a rte_flow_action struct pointer is meaningless and
there is even no such corresponding action struct. What's more,
if more than one operations should be supported, for some other
action, such pointer paramter may not meet the need.
2. Some action may need conditional or partial update, the current
parameter will not provide the ability to indicate which part(s)
to update.
For different types of indirect action objects, the pointer could
either be the same of rte_flow_action* struct - in order not to
break the current driver implementation, or some wrapper
structures with bits as masks to indicate which part to be
updated, depending on real needs of the corresponding direct
action. For different direct actions, the structures of indirect
action objects updating will be different.
All the underlayer PMD callbacks will be moved to these new APIs.
The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
break the ABI. All the implementations are changed by using
RTE_FLOW_ACTION_TYPE_INDIRECT.
Signed-off-by: Bing Zhao <bingz@nvidia.com>
---
doc/guides/rel_notes/release_21_05.rst | 3 +
lib/librte_ethdev/rte_flow.c | 48 +++++------
lib/librte_ethdev/rte_flow.h | 114 ++++++++++++++-----------
lib/librte_ethdev/rte_flow_driver.h | 26 +++---
lib/librte_ethdev/version.map | 8 +-
5 files changed, 109 insertions(+), 90 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 6f5858c8f6..abdaf90b3f 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -166,6 +166,9 @@ API Changes
* pci: The value ``PCI_ANY_ID`` is marked as deprecated
and can be replaced with ``RTE_PCI_ANY_ID``.
+* ethdev: The experimental shared action APIs in ``rte_flow.h`` has been
+ replaced from ``rte_flow_shared_action_*`` to indirect action APIs named
+ ``rte_flow_action_handle_*``.
ABI Changes
-----------
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index e07e617d74..5ae9397440 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -1067,53 +1067,53 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
NULL, rte_strerror(ENOTSUP));
}
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error)
{
- struct rte_flow_shared_action *shared_action;
+ struct rte_flow_action_handle *handle;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return NULL;
- if (unlikely(!ops->shared_action_create)) {
+ if (unlikely(!ops->action_handle_create)) {
rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
rte_strerror(ENOSYS));
return NULL;
}
- shared_action = ops->shared_action_create(&rte_eth_devices[port_id],
- conf, action, error);
- if (shared_action == NULL)
+ handle = ops->action_handle_create(&rte_eth_devices[port_id],
+ conf, action, error);
+ if (handle == NULL)
flow_err(port_id, -rte_errno, error);
- return shared_action;
+ return handle;
}
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
- struct rte_flow_error *error)
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ struct rte_flow_error *error)
{
int ret;
const struct rte_flow_ops *ops = rte_flow_ops_get(port_id, error);
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_destroy))
+ if (unlikely(!ops->action_handle_destroy))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_destroy(&rte_eth_devices[port_id], action,
- error);
+ ret = ops->action_handle_destroy(&rte_eth_devices[port_id],
+ handle, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error)
{
int ret;
@@ -1121,18 +1121,18 @@ rte_flow_shared_action_update(uint16_t port_id,
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_update))
+ if (unlikely(!ops->action_handle_update))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_update(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_update(&rte_eth_devices[port_id], handle,
update, error);
return flow_err(port_id, ret, error);
}
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error)
{
@@ -1141,11 +1141,11 @@ rte_flow_shared_action_query(uint16_t port_id,
if (unlikely(!ops))
return -rte_errno;
- if (unlikely(!ops->shared_action_query))
+ if (unlikely(!ops->action_handle_query))
return rte_flow_error_set(error, ENOSYS,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, rte_strerror(ENOSYS));
- ret = ops->shared_action_query(&rte_eth_devices[port_id], action,
+ ret = ops->action_handle_query(&rte_eth_devices[port_id], handle,
data, error);
return flow_err(port_id, ret, error);
}
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 6cc57136ac..880e0b50fb 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -2267,6 +2267,16 @@ enum rte_flow_action_type {
* See struct rte_flow_action_modify_field.
*/
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
+
+ /**
+ * Describe indirect action that could be used by a single flow rule
+ * or multiple flow rules.
+ *
+ * Allow flow rule(s) reference the same action by the indirect action
+ * handle (see struct rte_flow_action_handle), rules could be on the
+ * same port or across different ports.
+ */
+ RTE_FLOW_ACTION_TYPE_INDIRECT,
};
/**
@@ -2847,17 +2857,23 @@ struct rte_flow_action_set_dscp {
};
/**
- * RTE_FLOW_ACTION_TYPE_SHARED
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_INDIRECT
*
- * Opaque type returned after successfully creating a shared action.
+ * Opaque type returned after successfully creating an indirect action object.
+ * The definition of the object handle will be different per driver or
+ * per immediate action type.
*
- * This handle can be used to manage and query the related action:
- * - share it across multiple flow rules
- * - update action configuration
- * - query action data
- * - destroy action
+ * This handle can be used to manage and query the related immediate action:
+ * - referenced in single flow rule or across multiple flow rules
+ * over multiple ports
+ * - update action object configuration
+ * - query action object data
+ * - destroy action object
*/
-struct rte_flow_shared_action;
+struct rte_flow_action_handle;
/**
* Field IDs for MODIFY_FIELD action.
@@ -3628,25 +3644,22 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error);
/**
- * Specify shared action configuration
+ * Specify indirect action object configuration
*/
-struct rte_flow_shared_action_conf {
+struct rte_flow_indir_action_conf {
/**
- * Flow direction for shared action configuration.
+ * Flow direction for the indirect action configuration.
*
- * Shared action should be valid at least for one flow direction,
+ * Action should be valid at least for one flow direction,
* otherwise it is invalid for both ingress and egress rules.
*/
uint32_t ingress:1;
/**< Action valid for rules applied to ingress traffic. */
uint32_t egress:1;
/**< Action valid for rules applied to egress traffic. */
-
/**
* When set to 1, indicates that the action is valid for
* transfer traffic; otherwise, for non-transfer traffic.
- *
- * See struct rte_flow_attr.
*/
uint32_t transfer:1;
};
@@ -3655,16 +3668,17 @@ struct rte_flow_shared_action_conf {
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Create shared action for reuse in multiple flow rules.
- * The created shared action has single state and configuration
- * across all flow rules using it.
+ * Create an indirect action object that can be used by flow create, and
+ * could also be shared by different flows.
+ * The created object handle has single state and configuration
+ * across all the flow rules using it.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] conf
- * Shared action configuration.
+ * Action configuration for the indirect action object creation.
* @param[in] action
- * Action configuration for shared action creation.
+ * Specific configuration of the indirect action object.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3678,9 +3692,9 @@ struct rte_flow_shared_action_conf {
* - (ENOTSUP) if *action* valid but unsupported.
*/
__rte_experimental
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
@@ -3688,12 +3702,12 @@ rte_flow_shared_action_create(uint16_t port_id,
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Destroy the shared action by handle.
+ * Destroy indirect action by handle.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be destroyed.
+ * @param[in] handle
+ * Handle for the indirect action object to be destroyed.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3708,27 +3722,30 @@ rte_flow_shared_action_create(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Update in-place the shared action configuration pointed by *action* handle
- * with the configuration provided as *update* argument.
- * The update of the shared action configuration effects all flow rules reusing
- * the action via handle.
+ * Update in-place the action configuration and / or state pointed
+ * by action *handle* with the configuration provided as *update* argument.
+ * The update of the action configuration effects all flow rules reusing
+ * the action via *handle*.
+ * The update general pointer provides the ability of partial updating.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be updated.
+ * @param[in] handle
+ * Handle for the indirect action object to be updated.
* @param[in] update
- * Action specification used to modify the action pointed by handle.
- * *update* should be of same type with the action pointed by the *action*
- * handle argument, otherwise considered as invalid.
+ * Update profile specification used to modify the action pointed by handle.
+ * *update* could be with the same type of the immediate action corresponding
+ * to the *handle* argument when creating, or a wrapper structure includes
+ * action configuration to be updated and bit fields to indicate the member
+ * of fields inside the action to update.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3739,32 +3756,32 @@ rte_flow_shared_action_destroy(uint16_t port_id,
* - (-EIO) if underlying device is removed.
* - (-EINVAL) if *update* invalid.
* - (-ENOTSUP) if *update* valid but unsupported.
- * - (-ENOENT) if action pointed by *ctx* was not found.
+ * - (-ENOENT) if indirect action object pointed by *handle* was not found.
* rte_errno is also set.
*/
__rte_experimental
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Query the shared action by handle.
+ * Query the orginal action by corresponding indirect action object handle.
*
* Retrieve action-specific data such as counters.
* Data is gathered by special action which may be present/referenced in
* more than one flow rule definition.
*
- * \see RTE_FLOW_ACTION_TYPE_COUNT
+ * @see RTE_FLOW_ACTION_TYPE_COUNT
*
* @param port_id
* Port identifier of Ethernet device.
- * @param[in] action
- * Handle for the shared action to query.
+ * @param[in] handle
+ * Handle for the action object to query.
* @param[in, out] data
* Pointer to storage for the associated query data type.
* @param[out] error
@@ -3776,10 +3793,9 @@ rte_flow_shared_action_update(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
- void *data,
- struct rte_flow_error *error);
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
+ void *data, struct rte_flow_error *error);
/* Tunnel has a type and the key information. */
struct rte_flow_tunnel {
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index da594d9256..8d825eb245 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -83,27 +83,27 @@ struct rte_flow_ops {
void **context,
uint32_t nb_contexts,
struct rte_flow_error *err);
- /** See rte_flow_shared_action_create() */
- struct rte_flow_shared_action *(*shared_action_create)
+ /** See rte_flow_action_handle_create() */
+ struct rte_flow_action_handle *(*action_handle_create)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_destroy() */
- int (*shared_action_destroy)
+ /** See rte_flow_action_handle_destroy() */
+ int (*action_handle_destroy)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_update() */
- int (*shared_action_update)
+ /** See rte_flow_action_handle_update() */
+ int (*action_handle_update)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *update,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_query() */
- int (*shared_action_query)
+ /** See rte_flow_action_handle_query() */
+ int (*action_handle_query)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *shared_action,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error);
/** See rte_flow_tunnel_decap_set() */
diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map
index 93ad388e96..4eb561a89a 100644
--- a/lib/librte_ethdev/version.map
+++ b/lib/librte_ethdev/version.map
@@ -231,10 +231,6 @@ EXPERIMENTAL {
rte_eth_fec_get_capability;
rte_eth_fec_get;
rte_eth_fec_set;
- rte_flow_shared_action_create;
- rte_flow_shared_action_destroy;
- rte_flow_shared_action_query;
- rte_flow_shared_action_update;
rte_flow_tunnel_decap_set;
rte_flow_tunnel_match;
rte_flow_get_restore_info;
@@ -246,6 +242,10 @@ EXPERIMENTAL {
# added in 21.05
rte_eth_representor_info_get;
+ rte_flow_action_handle_create;
+ rte_flow_action_handle_destroy;
+ rte_flow_action_handle_update;
+ rte_flow_action_handle_query;
};
INTERNAL {
--
2.30.0.windows.2
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] service: clean references to removed symbol
2021-04-08 14:04 0% ` David Marchand
@ 2021-04-08 14:54 3% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-08 14:54 UTC (permalink / raw)
To: Van Haaren, Harry, David Marchand
Cc: dev, stable, Ray Kinsella, Neil Horman, Dodji Seketeli
08/04/2021 16:04, David Marchand:
> On Thu, Apr 8, 2021 at 3:08 PM Van Haaren, Harry
> <harry.van.haaren@intel.com> wrote:
> > > > For rte_service.h doc changes I'm all fine.
> > > >
> > > > For ABI consistency, this removes a function from the DPDK_21 version map that
> > > didn't exist in
> > > > the shared object itself. I'm not sure if that's an ABI break or not... I see ABI
> > > experts on CC,
> > > > and will let them comment on that topic.
> > >
> > > The symbol is not in the API anymore.
> > > Applications can't have a reference to this symbol without a definition.
> >
> > Agreed, however I'm not familiar enough with linking/ABI stability to
> > know if removing a symbol (even when not available in the API) could
> > affect the resulting shared object's ABI.
>
> After a discussion with Dodji and looking at binutils, I understand
> that the versioning is applied for each symbol found in an elf object.
> So at least with binutils, non-existent nodes in a version script are
> harmless and have no impact on the generated elf.
Yes I don't see how it could break ABI.
Acked-by: Thomas Monjalon <thomas@monjalon.net>
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [RFC PATCH v2] ethdev: introduce indirect action APIs
[not found] <1615967952-228321-1-git-send-email-bingz@nvidia.com>
@ 2021-04-08 14:46 2% ` Bing Zhao
2021-04-09 3:54 4% ` [dpdk-dev] [PATCH] " Bing Zhao
1 sibling, 0 replies; 200+ results
From: Bing Zhao @ 2021-04-08 14:46 UTC (permalink / raw)
To: orika, thomas, ferruh.yigit, andrew.rybchenko; +Cc: dev, ajit.khaparde
Right now, rte_flow_shared_action_* APIs are used for some shared
actions, like RSS, count. The shared action shoule be created before
using it inside a flow. These shared actions sometimes are not
really shared but just some indirect actions decoupled from a flow.
The new functions rte_flow_action_handle_* are added to replace
the current shared functions rte_flow_shared_action_*.
There are two types of flow actions:
1. the direct (normal) actions that could be created and stored
within a flow rule. Such action is tied to its flow rule and
cannot be reused.
2. the indirect action, in the past, named shared_action. It is
created from a direct actioni, like count or rss, and then used
in the flow rules with an object handle. The PMD will take care
of the retrieve from indirect action to the direct action
when it is referenced.
The indirect action is accessed (update / query) w/o any flow rule,
just via the action object handle. For example, when querying or
resetting a counter, it could be done out of any flow using this
counter, but only the handle of the counter action object is
required.
The indirect action object could be shared by different flows or
used by a single flow, depending on the direct action type and
the real-life requirements.
The handle of an indirect action object is opaque and defined in
each driver and possibly different per direct action type.
The old name "shared" is improper in a sense and should be replaced.
All the command lines in testpmd application with "shared_action*"
are replaced with "indirect_action*".
The parameter of "update" interface is also changed. A general
pointer will replace the rte_flow_action struct pointer due to the
facts:
1. Some action may not support fields updating. In the example of a
counter, the only "update" supported should be the reset. So
passing a rte_flow_action struct pointer is meaningless and
there is even no such corresponding action struct. What's more,
if more than one operations should be supported, for some other
action, such pointer paramter may not meet the need.
2. Some action may need conditional or partial update, the current
parameter will not provide the ability to indicate which part(s)
to update.
For different types of indirect action objects, the pointer could
either be the same of rte_flow_action* struct - in order not to
break the current driver implementation, or some wrapper
structures with bits as masks to indicate which part to be
updated, depending on real needs of the corresponding direct
action. For different direct actions, the structures of indirect
action objects updating will be different.
All the underlayer PMD callbacks will be moved to these new APIs.
The RTE_FLOW_ACTION_TYPE_SHARED is kept for now in order not to
break the ABI. All the implementations are changed by using
RTE_FLOW_ACTION_TYPE_INDIRECT.
Signed-off-by: Bing Zhao <bingz@nvidia.com>
---
lib/librte_ethdev/rte_flow.h | 114 ++++++++++++++++------------
lib/librte_ethdev/rte_flow_driver.h | 26 +++----
2 files changed, 78 insertions(+), 62 deletions(-)
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 6cc57136ac..880e0b50fb 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -2267,6 +2267,16 @@ enum rte_flow_action_type {
* See struct rte_flow_action_modify_field.
*/
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
+
+ /**
+ * Describe indirect action that could be used by a single flow rule
+ * or multiple flow rules.
+ *
+ * Allow flow rule(s) reference the same action by the indirect action
+ * handle (see struct rte_flow_action_handle), rules could be on the
+ * same port or across different ports.
+ */
+ RTE_FLOW_ACTION_TYPE_INDIRECT,
};
/**
@@ -2847,17 +2857,23 @@ struct rte_flow_action_set_dscp {
};
/**
- * RTE_FLOW_ACTION_TYPE_SHARED
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_INDIRECT
*
- * Opaque type returned after successfully creating a shared action.
+ * Opaque type returned after successfully creating an indirect action object.
+ * The definition of the object handle will be different per driver or
+ * per immediate action type.
*
- * This handle can be used to manage and query the related action:
- * - share it across multiple flow rules
- * - update action configuration
- * - query action data
- * - destroy action
+ * This handle can be used to manage and query the related immediate action:
+ * - referenced in single flow rule or across multiple flow rules
+ * over multiple ports
+ * - update action object configuration
+ * - query action object data
+ * - destroy action object
*/
-struct rte_flow_shared_action;
+struct rte_flow_action_handle;
/**
* Field IDs for MODIFY_FIELD action.
@@ -3628,25 +3644,22 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error);
/**
- * Specify shared action configuration
+ * Specify indirect action object configuration
*/
-struct rte_flow_shared_action_conf {
+struct rte_flow_indir_action_conf {
/**
- * Flow direction for shared action configuration.
+ * Flow direction for the indirect action configuration.
*
- * Shared action should be valid at least for one flow direction,
+ * Action should be valid at least for one flow direction,
* otherwise it is invalid for both ingress and egress rules.
*/
uint32_t ingress:1;
/**< Action valid for rules applied to ingress traffic. */
uint32_t egress:1;
/**< Action valid for rules applied to egress traffic. */
-
/**
* When set to 1, indicates that the action is valid for
* transfer traffic; otherwise, for non-transfer traffic.
- *
- * See struct rte_flow_attr.
*/
uint32_t transfer:1;
};
@@ -3655,16 +3668,17 @@ struct rte_flow_shared_action_conf {
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Create shared action for reuse in multiple flow rules.
- * The created shared action has single state and configuration
- * across all flow rules using it.
+ * Create an indirect action object that can be used by flow create, and
+ * could also be shared by different flows.
+ * The created object handle has single state and configuration
+ * across all the flow rules using it.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] conf
- * Shared action configuration.
+ * Action configuration for the indirect action object creation.
* @param[in] action
- * Action configuration for shared action creation.
+ * Specific configuration of the indirect action object.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3678,9 +3692,9 @@ struct rte_flow_shared_action_conf {
* - (ENOTSUP) if *action* valid but unsupported.
*/
__rte_experimental
-struct rte_flow_shared_action *
-rte_flow_shared_action_create(uint16_t port_id,
- const struct rte_flow_shared_action_conf *conf,
+struct rte_flow_action_handle *
+rte_flow_action_handle_create(uint16_t port_id,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
@@ -3688,12 +3702,12 @@ rte_flow_shared_action_create(uint16_t port_id,
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Destroy the shared action by handle.
+ * Destroy indirect action by handle.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be destroyed.
+ * @param[in] handle
+ * Handle for the indirect action object to be destroyed.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3708,27 +3722,30 @@ rte_flow_shared_action_create(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_destroy(uint16_t port_id,
- struct rte_flow_shared_action *action,
+rte_flow_action_handle_destroy(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Update in-place the shared action configuration pointed by *action* handle
- * with the configuration provided as *update* argument.
- * The update of the shared action configuration effects all flow rules reusing
- * the action via handle.
+ * Update in-place the action configuration and / or state pointed
+ * by action *handle* with the configuration provided as *update* argument.
+ * The update of the action configuration effects all flow rules reusing
+ * the action via *handle*.
+ * The update general pointer provides the ability of partial updating.
*
* @param[in] port_id
* The port identifier of the Ethernet device.
- * @param[in] action
- * Handle for the shared action to be updated.
+ * @param[in] handle
+ * Handle for the indirect action object to be updated.
* @param[in] update
- * Action specification used to modify the action pointed by handle.
- * *update* should be of same type with the action pointed by the *action*
- * handle argument, otherwise considered as invalid.
+ * Update profile specification used to modify the action pointed by handle.
+ * *update* could be with the same type of the immediate action corresponding
+ * to the *handle* argument when creating, or a wrapper structure includes
+ * action configuration to be updated and bit fields to indicate the member
+ * of fields inside the action to update.
* @param[out] error
* Perform verbose error reporting if not NULL. PMDs initialize this
* structure in case of error only.
@@ -3739,32 +3756,32 @@ rte_flow_shared_action_destroy(uint16_t port_id,
* - (-EIO) if underlying device is removed.
* - (-EINVAL) if *update* invalid.
* - (-ENOTSUP) if *update* valid but unsupported.
- * - (-ENOENT) if action pointed by *ctx* was not found.
+ * - (-ENOENT) if indirect action object pointed by *handle* was not found.
* rte_errno is also set.
*/
__rte_experimental
int
-rte_flow_shared_action_update(uint16_t port_id,
- struct rte_flow_shared_action *action,
- const struct rte_flow_action *update,
+rte_flow_action_handle_update(uint16_t port_id,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice.
*
- * Query the shared action by handle.
+ * Query the orginal action by corresponding indirect action object handle.
*
* Retrieve action-specific data such as counters.
* Data is gathered by special action which may be present/referenced in
* more than one flow rule definition.
*
- * \see RTE_FLOW_ACTION_TYPE_COUNT
+ * @see RTE_FLOW_ACTION_TYPE_COUNT
*
* @param port_id
* Port identifier of Ethernet device.
- * @param[in] action
- * Handle for the shared action to query.
+ * @param[in] handle
+ * Handle for the action object to query.
* @param[in, out] data
* Pointer to storage for the associated query data type.
* @param[out] error
@@ -3776,10 +3793,9 @@ rte_flow_shared_action_update(uint16_t port_id,
*/
__rte_experimental
int
-rte_flow_shared_action_query(uint16_t port_id,
- const struct rte_flow_shared_action *action,
- void *data,
- struct rte_flow_error *error);
+rte_flow_action_handle_query(uint16_t port_id,
+ const struct rte_flow_action_handle *handle,
+ void *data, struct rte_flow_error *error);
/* Tunnel has a type and the key information. */
struct rte_flow_tunnel {
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index da594d9256..8d825eb245 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -83,27 +83,27 @@ struct rte_flow_ops {
void **context,
uint32_t nb_contexts,
struct rte_flow_error *err);
- /** See rte_flow_shared_action_create() */
- struct rte_flow_shared_action *(*shared_action_create)
+ /** See rte_flow_action_handle_create() */
+ struct rte_flow_action_handle *(*action_handle_create)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action_conf *conf,
+ const struct rte_flow_indir_action_conf *conf,
const struct rte_flow_action *action,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_destroy() */
- int (*shared_action_destroy)
+ /** See rte_flow_action_handle_destroy() */
+ int (*action_handle_destroy)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
+ struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_update() */
- int (*shared_action_update)
+ /** See rte_flow_action_handle_update() */
+ int (*action_handle_update)
(struct rte_eth_dev *dev,
- struct rte_flow_shared_action *shared_action,
- const struct rte_flow_action *update,
+ struct rte_flow_action_handle *handle,
+ const void *update,
struct rte_flow_error *error);
- /** See rte_flow_shared_action_query() */
- int (*shared_action_query)
+ /** See rte_flow_action_handle_query() */
+ int (*action_handle_query)
(struct rte_eth_dev *dev,
- const struct rte_flow_shared_action *shared_action,
+ const struct rte_flow_action_handle *handle,
void *data,
struct rte_flow_error *error);
/** See rte_flow_tunnel_decap_set() */
--
2.30.0.windows.2
^ permalink raw reply [relevance 2%]
* Re: [dpdk-dev] [PATCH] service: clean references to removed symbol
2021-04-08 13:06 4% ` Van Haaren, Harry
@ 2021-04-08 14:04 0% ` David Marchand
2021-04-08 14:54 3% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-04-08 14:04 UTC (permalink / raw)
To: Van Haaren, Harry; +Cc: dev, stable, Ray Kinsella, Neil Horman, Dodji Seketeli
On Thu, Apr 8, 2021 at 3:08 PM Van Haaren, Harry
<harry.van.haaren@intel.com> wrote:
> > > For rte_service.h doc changes I'm all fine.
> > >
> > > For ABI consistency, this removes a function from the DPDK_21 version map that
> > didn't exist in
> > > the shared object itself. I'm not sure if that's an ABI break or not... I see ABI
> > experts on CC,
> > > and will let them comment on that topic.
> >
> > The symbol is not in the API anymore.
> > Applications can't have a reference to this symbol without a definition.
>
> Agreed, however I'm not familiar enough with linking/ABI stability to
> know if removing a symbol (even when not available in the API) could
> affect the resulting shared object's ABI.
After a discussion with Dodji and looking at binutils, I understand
that the versioning is applied for each symbol found in an elf object.
So at least with binutils, non-existent nodes in a version script are
harmless and have no impact on the generated elf.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] service: clean references to removed symbol
2021-04-08 12:58 0% ` David Marchand
@ 2021-04-08 13:06 4% ` Van Haaren, Harry
2021-04-08 14:04 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: Van Haaren, Harry @ 2021-04-08 13:06 UTC (permalink / raw)
To: David Marchand; +Cc: dev, stable, Ray Kinsella, Neil Horman
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Thursday, April 8, 2021 1:58 PM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Ray Kinsella <mdr@ashroe.eu>; Neil Horman
> <nhorman@tuxdriver.com>; Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: Re: [PATCH] service: clean references to removed symbol
>
> On Thu, Apr 8, 2021 at 2:54 PM Van Haaren, Harry
> <harry.van.haaren@intel.com> wrote:
> >
> > > -----Original Message-----
> > > From: David Marchand <david.marchand@redhat.com>
> > > Sent: Wednesday, April 7, 2021 10:07 AM
> > > To: dev@dpdk.org
> > > Cc: stable@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>; Ray
> > > Kinsella <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.com>; Pavan
> > > Nikhilesh <pbhagavatula@caviumnetworks.com>
> > > Subject: [PATCH] service: clean references to removed symbol
> > >
> > > rte_service_get_id() was removed in v17.11 but the API description
> > > still referenced it and a version node was still present in EAL map.
> > >
> > > Fixes: 8edc9aaaf217 ("service: use id in get by name function")
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: David Marchand <david.marchand@redhat.com>
> >
> > For rte_service.h doc changes I'm all fine.
> >
> > For ABI consistency, this removes a function from the DPDK_21 version map that
> didn't exist in
> > the shared object itself. I'm not sure if that's an ABI break or not... I see ABI
> experts on CC,
> > and will let them comment on that topic.
>
> The symbol is not in the API anymore.
> Applications can't have a reference to this symbol without a definition.
Agreed, however I'm not familiar enough with linking/ABI stability to
know if removing a symbol (even when not available in the API) could
affect the resulting shared object's ABI.
If somebody says there's no risk in ABI break, go ahead and merge. -Harry
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] service: clean references to removed symbol
2021-04-08 12:54 4% ` Van Haaren, Harry
@ 2021-04-08 12:58 0% ` David Marchand
2021-04-08 13:06 4% ` Van Haaren, Harry
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-04-08 12:58 UTC (permalink / raw)
To: Van Haaren, Harry; +Cc: dev, stable, Ray Kinsella, Neil Horman, Pavan Nikhilesh
On Thu, Apr 8, 2021 at 2:54 PM Van Haaren, Harry
<harry.van.haaren@intel.com> wrote:
>
> > -----Original Message-----
> > From: David Marchand <david.marchand@redhat.com>
> > Sent: Wednesday, April 7, 2021 10:07 AM
> > To: dev@dpdk.org
> > Cc: stable@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>; Ray
> > Kinsella <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.com>; Pavan
> > Nikhilesh <pbhagavatula@caviumnetworks.com>
> > Subject: [PATCH] service: clean references to removed symbol
> >
> > rte_service_get_id() was removed in v17.11 but the API description
> > still referenced it and a version node was still present in EAL map.
> >
> > Fixes: 8edc9aaaf217 ("service: use id in get by name function")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: David Marchand <david.marchand@redhat.com>
>
> For rte_service.h doc changes I'm all fine.
>
> For ABI consistency, this removes a function from the DPDK_21 version map that didn't exist in
> the shared object itself. I'm not sure if that's an ABI break or not... I see ABI experts on CC,
> and will let them comment on that topic.
The symbol is not in the API anymore.
Applications can't have a reference to this symbol without a definition.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] service: clean references to removed symbol
@ 2021-04-08 12:54 4% ` Van Haaren, Harry
2021-04-08 12:58 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: Van Haaren, Harry @ 2021-04-08 12:54 UTC (permalink / raw)
To: David Marchand, dev; +Cc: stable, Ray Kinsella, Neil Horman, Pavan Nikhilesh
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Wednesday, April 7, 2021 10:07 AM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>; Ray
> Kinsella <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.com>; Pavan
> Nikhilesh <pbhagavatula@caviumnetworks.com>
> Subject: [PATCH] service: clean references to removed symbol
>
> rte_service_get_id() was removed in v17.11 but the API description
> still referenced it and a version node was still present in EAL map.
>
> Fixes: 8edc9aaaf217 ("service: use id in get by name function")
> Cc: stable@dpdk.org
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
For rte_service.h doc changes I'm all fine.
For ABI consistency, this removes a function from the DPDK_21 version map that didn't exist in
the shared object itself. I'm not sure if that's an ABI break or not... I see ABI experts on CC,
and will let them comment on that topic.
Reviewed-by: Harry van Haaren <harry.van.haaren@intel.com>
> ---
> lib/librte_eal/include/rte_service.h | 5 +----
> lib/librte_eal/version.map | 1 -
> 2 files changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/lib/librte_eal/include/rte_service.h
> b/lib/librte_eal/include/rte_service.h
> index ca9950d091..c7d037d862 100644
> --- a/lib/librte_eal/include/rte_service.h
> +++ b/lib/librte_eal/include/rte_service.h
> @@ -47,10 +47,7 @@ extern "C" {
> #define RTE_SERVICE_CAP_MT_SAFE (1 << 0)
>
> /**
> - * Return the number of services registered.
> - *
> - * The number of services registered can be passed to *rte_service_get_by_id*,
> - * enabling the application to retrieve the specification of each service.
> + * Return the number of services registered.
> *
> * @return The number of services registered.
> */
> diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map
> index e23745ae6e..0f2a9228b3 100644
> --- a/lib/librte_eal/version.map
> +++ b/lib/librte_eal/version.map
> @@ -159,7 +159,6 @@ DPDK_21 {
> rte_service_component_unregister;
> rte_service_dump;
> rte_service_finalize;
> - rte_service_get_by_id;
> rte_service_get_by_name;
> rte_service_get_count;
> rte_service_get_name;
> --
> 2.23.0
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH 2/5] net/tap: do not touch Tx offload flags
@ 2021-04-08 12:16 3% ` Ananyev, Konstantin
0 siblings, 0 replies; 200+ results
From: Ananyev, Konstantin @ 2021-04-08 12:16 UTC (permalink / raw)
To: Flavio Leitner, Olivier Matz
Cc: David Marchand, dev, maxime.coquelin, i.maximets, Wiles, Keith
>
> On Thu, Apr 08, 2021 at 09:41:59AM +0200, Olivier Matz wrote:
> > On Wed, Apr 07, 2021 at 05:15:39PM -0300, Flavio Leitner wrote:
> > > On Thu, Apr 01, 2021 at 11:52:40AM +0200, David Marchand wrote:
> > > > Tx offload flags are of the application responsibility.
> > > > Leave the mbuf alone and check for TSO where needed.
> > > >
> > > > Signed-off-by: David Marchand <david.marchand@redhat.com>
> > > > ---
> > >
> > > The patch looks good, but maybe a better approach would be
> > > to change the documentation to require the TCP_CKSUM flag
> > > when TCP_SEG is used, otherwise this flag adjusting needs
> > > to be replicated every time TCP_SEG is used.
> > >
> > > The above could break existing applications, so perhaps doing
> > > something like below would be better and backwards compatible?
> > > Then we can remove those places tweaking the flags completely.
> >
> > As a first step, I suggest to document that:
> > - applications must set TCP_CKSUM when setting TCP_SEG
>
> That's what I suggest above.
>
> > - pmds must suppose that TCP_CKSUM is set when TCP_SEG is set
>
> But that keeps the problem of implying the TCP_CKSUM flag in
> various places.
>
> > This is clearer that what we have today, and I think it does not break
> > anything. This will guide apps in the correct direction, facilitating
> > an eventual future PMD change.
> >
> > > diff --git a/lib/librte_mbuf/rte_mbuf_core.h b/lib/librte_mbuf/rte_mbuf_core.h
> > > index c17dc95c5..6a0c2cdd9 100644
> > > --- a/lib/librte_mbuf/rte_mbuf_core.h
> > > +++ b/lib/librte_mbuf/rte_mbuf_core.h
> > > @@ -298,7 +298,7 @@ extern "C" {
> > > * - if it's IPv4, set the PKT_TX_IP_CKSUM flag
> > > * - fill the mbuf offload information: l2_len, l3_len, l4_len, tso_segsz
> > > */
> > > -#define PKT_TX_TCP_SEG (1ULL << 50)
> > > +#define PKT_TX_TCP_SEG (1ULL << 50) | PKT_TX_TCP_CKSUM
I think that would be an ABI breakage.
> > >
> > > /** TX IEEE1588 packet to timestamp. */
> > > #define PKT_TX_IEEE1588_TMST (1ULL << 51)
> >
> > I'm afraid some applications or drivers use extended bit manipulations
> > to do the conversion from/to another domain (like hardware descriptors
> > or application-specific flags). They may expect this constant to be a
> > uniq flag.
>
> Interesting, do you have an example? Because each flag still has an
> separate meaning.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-04-07 9:58 0% ` Bruce Richardson
@ 2021-04-07 10:29 0% ` Morten Brørup
0 siblings, 0 replies; 200+ results
From: Morten Brørup @ 2021-04-07 10:29 UTC (permalink / raw)
To: Bruce Richardson
Cc: Honnappa Nagarahalli, Tom Barbette, dev, nd, Alireza Farshin,
Van Haaren, Harry
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson
> Sent: Wednesday, April 7, 2021 11:59 AM
>
> On Wed, Apr 07, 2021 at 09:11:23AM +0200, Morten Brørup wrote:
> > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Honnappa
> > > Nagarahalli
> > > Sent: Wednesday, April 7, 2021 2:48 AM
> > >
> > > <snip>
> > > >
> > > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tom
> Barbette
> > > > > Sent: Wednesday, March 31, 2021 10:53 AM
> > > > >
> > > > > Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> > > > > > - Ability to tune the values of #defines
> > > > > > * Few prominent points discussed
> > > > > > - This will result in #ifdefs in the code (for ex: in
> > > testpmd)
> > > > > > - One option is for all the PMDs to document their
> > > configurable
> > > > > #defines in PMD specific header files. Having these distributed
> is
> > > > > much easier to search.
> > > > > > - Can some of the existing #defines be converted to runtime
> > > > > configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> > > > > > * Bruce to think about converting the doc to a blog or an
> > > email
> > > > > on the mailing list. But soliciting feedback is most important.
> > > > >
> > > > > One alternative path worth looking at is to encourage the use
> of
> > > LTO,
> > > > > and modify APIs so the configuration can be provided at linking
> > > time,
> > > > > and propagated by the compiler.
> > > > >
> > > > > E.g. one can define rte_max_lcore as a weak constant symbol,
> equal
> > > to
> > > > > 128. At linking time the user may provide a rte_max_lcore that
> is
> > > more
> > > > > tailored, and still, dynamic arrays[rte_max_lcore] will be
> > > allocatable
> > > > > on the .bss section, avoiding an indirection. The compiler will
> be
> > > > > able to optimize loops etc which is impossible with pure
> runtime
> > > > > configuration.
> > > > >
> > > > > In packetmill.io we actually pushed this to the next level
> where
> > > the
> > > > > driver can completely change its behavior without recompiling
> DPDK
> > > > > itself and spawning ifdefs everywhere.
> > > > >
> > > > > However the price is the slowiness of LTO...
> > > > >
> > > > > My 2 cents.
> > > > >
> > > > > Tom
> > > > >
> > > >
> > > > If we are moving away from Compile Time parameters, I certainly
> > > prefer Tom's
> > > > suggestion of Link Time parameters, rather than Run Time
> parameters.
> > > I think compile time constants are fine if they are not used in
> #ifdef.
> > > For ex: if they are used in 'if (...)', it will help eliminate code
> and
> > > branches.
> >
> > Yes!
> >
> > And "if (...)" is more flexible than #ifdef/#if because it allows the
> expression to be mixed with non-constants.
> >
> > Then perhaps Bruce's script to automatically make C constants out of
> #defines was not so silly anyway. :-)
> >
> > >
> > > >
> > > > This might also provide a middle ground for optimizations where
> > > Compile
> > > > Time parameters are considered unacceptable by the DPDK
> community.
> > > I'm
> > > > thinking about something along the lines of the "constant size"
> > > rte_event
> > > > array presented at the 2020 Userspace Summit by Harry
> > > >
> > >
> (https://static.sched.com/hosted_files/dpdkuserspace2020/d3/dpdk_usersp
> > > ac
> > > > e_20_api_performance_hvh.pdf). Taking this thinking even further
> out,
> > > a Link
> > > > Time parameter could perhaps replace the nb_pkts parameter in on
> > > > optimized rte_eth_rx_burst() function.
> > > >
> >
> > Optimally, I would like to see e.g. the RX burst size being so
> constant that the PMD's RX function knows it and can use vector
> functions and possibly loop unrolling, without having to implement a
> pre-check on nb_pkts and a trailing non-vector loop for receiving any
> remaining odd nb_pkts. All the DPDK examples use #define MAX_PKT_BURST
> 32 or similar, and I assume most DPDK applications do too.
> >
> > I do not trust the compiler to be clever enough to realize that the
> PMD's RX function is always called with a specific nb_pkts and optimize
> all this cruft away at compile time (or at link time), unless it is a
> #define or a compile time constant.
> >
>
> It certainly is not possible to do at compile time, because the calls
> are
> in a different compilation unit from the functions themselves, not to
> mention that a link-time the RX functions are called via a function
> pointer.
Exactly. It would only work with a global #define or global compile time constant.
> Therefore the only way to do this that I am aware of, is to
> have a
> wrapper function use for the common values inside the drivers
> themselves.
>
> For example, inside the i40e driver (which I'm using because it's the
> one
> I'm most familiar with), the main receive function is already a wrapper
> around a raw receive function, using constant-expansion by the compiler
> of
> the final parameter (NULL) to automatically remove the code for
> tracking
> scattered packets.
>
> uint16_t
> i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
> uint16_t nb_pkts)
> {
> return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, nb_pkts, NULL);
> }
>
> We can produce a version of this optimized for 32-element dequeues by
> special-casing where nb_pkts == 32:
>
> uint16_t
> i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
> uint16_t nb_pkts)
> {
> if (nb_pkts == 32)
> return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, 32,
> NULL);
> return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, nb_pkts, NULL);
> }
>
> Now the compiler when inlining the _raw_ function, can see that it
> needs
> two copies, and for the first, that nb_pkts is compile-time constant of
> 32.
Great example! Now, consider this modification to your example, where rte_eth_rx_burst_size is a global constant variable that can be evaluated at compile time:
uint16_t
i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts)
{
- if (nb_pkts == 32)
- return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, 32, NULL);
+ if (rte_eth_rx_burst_size)
+ return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, rte_eth_rx_burst_size, NULL);
return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, nb_pkts, NULL);
}
> However, I'm not sure how useful an optimization like this is, and I'd
> be interested to see what benefits testing shows.
Yes, performance test results would be beneficial.
> Beyond the loop iteration
> count of 32, there is also the check after each burst of 8 dequeues in
> the
> driver to check that we have a full set of 8 - and abort the loop if
> not.
That loop could be optimized too, going from 8 to 32 - or going all the way to global_rx_burst_size.
> It's also the case that unless an app is already at maximum load (or
> overloaded), one would probably not expect to always get a full set of
> 32
> packets each time, as you have no additional headroom for more.
>
Except if the application is designed to call rte_eth_rx_burst() less frequently to get a full burst as often as possible, using the NIC's many RX descriptors as burst buffer. Working with full bursts throughout the application provides higher total performance per clock cycle.
> /Bruce
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-04-07 7:11 0% ` Morten Brørup
@ 2021-04-07 9:58 0% ` Bruce Richardson
2021-04-07 10:29 0% ` Morten Brørup
0 siblings, 1 reply; 200+ results
From: Bruce Richardson @ 2021-04-07 9:58 UTC (permalink / raw)
To: Morten Brørup
Cc: Honnappa Nagarahalli, Tom Barbette, dev, nd, Alireza Farshin,
Van Haaren, Harry
On Wed, Apr 07, 2021 at 09:11:23AM +0200, Morten Brørup wrote:
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Honnappa
> > Nagarahalli
> > Sent: Wednesday, April 7, 2021 2:48 AM
> >
> > <snip>
> > >
> > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tom Barbette
> > > > Sent: Wednesday, March 31, 2021 10:53 AM
> > > >
> > > > Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> > > > > - Ability to tune the values of #defines
> > > > > * Few prominent points discussed
> > > > > - This will result in #ifdefs in the code (for ex: in
> > testpmd)
> > > > > - One option is for all the PMDs to document their
> > configurable
> > > > #defines in PMD specific header files. Having these distributed is
> > > > much easier to search.
> > > > > - Can some of the existing #defines be converted to runtime
> > > > configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> > > > > * Bruce to think about converting the doc to a blog or an
> > email
> > > > on the mailing list. But soliciting feedback is most important.
> > > >
> > > > One alternative path worth looking at is to encourage the use of
> > LTO,
> > > > and modify APIs so the configuration can be provided at linking
> > time,
> > > > and propagated by the compiler.
> > > >
> > > > E.g. one can define rte_max_lcore as a weak constant symbol, equal
> > to
> > > > 128. At linking time the user may provide a rte_max_lcore that is
> > more
> > > > tailored, and still, dynamic arrays[rte_max_lcore] will be
> > allocatable
> > > > on the .bss section, avoiding an indirection. The compiler will be
> > > > able to optimize loops etc which is impossible with pure runtime
> > > > configuration.
> > > >
> > > > In packetmill.io we actually pushed this to the next level where
> > the
> > > > driver can completely change its behavior without recompiling DPDK
> > > > itself and spawning ifdefs everywhere.
> > > >
> > > > However the price is the slowiness of LTO...
> > > >
> > > > My 2 cents.
> > > >
> > > > Tom
> > > >
> > >
> > > If we are moving away from Compile Time parameters, I certainly
> > prefer Tom's
> > > suggestion of Link Time parameters, rather than Run Time parameters.
> > I think compile time constants are fine if they are not used in #ifdef.
> > For ex: if they are used in 'if (...)', it will help eliminate code and
> > branches.
>
> Yes!
>
> And "if (...)" is more flexible than #ifdef/#if because it allows the expression to be mixed with non-constants.
>
> Then perhaps Bruce's script to automatically make C constants out of #defines was not so silly anyway. :-)
>
> >
> > >
> > > This might also provide a middle ground for optimizations where
> > Compile
> > > Time parameters are considered unacceptable by the DPDK community.
> > I'm
> > > thinking about something along the lines of the "constant size"
> > rte_event
> > > array presented at the 2020 Userspace Summit by Harry
> > >
> > (https://static.sched.com/hosted_files/dpdkuserspace2020/d3/dpdk_usersp
> > ac
> > > e_20_api_performance_hvh.pdf). Taking this thinking even further out,
> > a Link
> > > Time parameter could perhaps replace the nb_pkts parameter in on
> > > optimized rte_eth_rx_burst() function.
> > >
>
> Optimally, I would like to see e.g. the RX burst size being so constant that the PMD's RX function knows it and can use vector functions and possibly loop unrolling, without having to implement a pre-check on nb_pkts and a trailing non-vector loop for receiving any remaining odd nb_pkts. All the DPDK examples use #define MAX_PKT_BURST 32 or similar, and I assume most DPDK applications do too.
>
> I do not trust the compiler to be clever enough to realize that the PMD's RX function is always called with a specific nb_pkts and optimize all this cruft away at compile time (or at link time), unless it is a #define or a compile time constant.
>
It certainly is not possible to do at compile time, because the calls are
in a different compilation unit from the functions themselves, not to
mention that a link-time the RX functions are called via a function
pointer. Therefore the only way to do this that I am aware of, is to have a
wrapper function use for the common values inside the drivers themselves.
For example, inside the i40e driver (which I'm using because it's the one
I'm most familiar with), the main receive function is already a wrapper
around a raw receive function, using constant-expansion by the compiler of
the final parameter (NULL) to automatically remove the code for tracking
scattered packets.
uint16_t
i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts)
{
return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, nb_pkts, NULL);
}
We can produce a version of this optimized for 32-element dequeues by
special-casing where nb_pkts == 32:
uint16_t
i40e_recv_pkts_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts,
uint16_t nb_pkts)
{
if (nb_pkts == 32)
return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, 32, NULL);
return _recv_raw_pkts_vec_avx2(rx_queue, rx_pkts, nb_pkts, NULL);
}
Now the compiler when inlining the _raw_ function, can see that it needs
two copies, and for the first, that nb_pkts is compile-time constant of 32.
However, I'm not sure how useful an optimization like this is, and I'd be
interested to see what benefits testing shows. Beyond the loop iteration
count of 32, there is also the check after each burst of 8 dequeues in the
driver to check that we have a full set of 8 - and abort the loop if not.
It's also the case that unless an app is already at maximum load (or
overloaded), one would probably not expect to always get a full set of 32
packets each time, as you have no additional headroom for more.
/Bruce
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-04-07 0:47 0% ` Honnappa Nagarahalli
@ 2021-04-07 7:11 0% ` Morten Brørup
2021-04-07 9:58 0% ` Bruce Richardson
0 siblings, 1 reply; 200+ results
From: Morten Brørup @ 2021-04-07 7:11 UTC (permalink / raw)
To: Honnappa Nagarahalli, Tom Barbette, dev
Cc: nd, Alireza Farshin, Van Haaren, Harry, Bruce Richardson, nd
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Honnappa
> Nagarahalli
> Sent: Wednesday, April 7, 2021 2:48 AM
>
> <snip>
> >
> > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tom Barbette
> > > Sent: Wednesday, March 31, 2021 10:53 AM
> > >
> > > Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> > > > - Ability to tune the values of #defines
> > > > * Few prominent points discussed
> > > > - This will result in #ifdefs in the code (for ex: in
> testpmd)
> > > > - One option is for all the PMDs to document their
> configurable
> > > #defines in PMD specific header files. Having these distributed is
> > > much easier to search.
> > > > - Can some of the existing #defines be converted to runtime
> > > configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> > > > * Bruce to think about converting the doc to a blog or an
> email
> > > on the mailing list. But soliciting feedback is most important.
> > >
> > > One alternative path worth looking at is to encourage the use of
> LTO,
> > > and modify APIs so the configuration can be provided at linking
> time,
> > > and propagated by the compiler.
> > >
> > > E.g. one can define rte_max_lcore as a weak constant symbol, equal
> to
> > > 128. At linking time the user may provide a rte_max_lcore that is
> more
> > > tailored, and still, dynamic arrays[rte_max_lcore] will be
> allocatable
> > > on the .bss section, avoiding an indirection. The compiler will be
> > > able to optimize loops etc which is impossible with pure runtime
> > > configuration.
> > >
> > > In packetmill.io we actually pushed this to the next level where
> the
> > > driver can completely change its behavior without recompiling DPDK
> > > itself and spawning ifdefs everywhere.
> > >
> > > However the price is the slowiness of LTO...
> > >
> > > My 2 cents.
> > >
> > > Tom
> > >
> >
> > If we are moving away from Compile Time parameters, I certainly
> prefer Tom's
> > suggestion of Link Time parameters, rather than Run Time parameters.
> I think compile time constants are fine if they are not used in #ifdef.
> For ex: if they are used in 'if (...)', it will help eliminate code and
> branches.
Yes!
And "if (...)" is more flexible than #ifdef/#if because it allows the expression to be mixed with non-constants.
Then perhaps Bruce's script to automatically make C constants out of #defines was not so silly anyway. :-)
>
> >
> > This might also provide a middle ground for optimizations where
> Compile
> > Time parameters are considered unacceptable by the DPDK community.
> I'm
> > thinking about something along the lines of the "constant size"
> rte_event
> > array presented at the 2020 Userspace Summit by Harry
> >
> (https://static.sched.com/hosted_files/dpdkuserspace2020/d3/dpdk_usersp
> ac
> > e_20_api_performance_hvh.pdf). Taking this thinking even further out,
> a Link
> > Time parameter could perhaps replace the nb_pkts parameter in on
> > optimized rte_eth_rx_burst() function.
> >
Optimally, I would like to see e.g. the RX burst size being so constant that the PMD's RX function knows it and can use vector functions and possibly loop unrolling, without having to implement a pre-check on nb_pkts and a trailing non-vector loop for receiving any remaining odd nb_pkts. All the DPDK examples use #define MAX_PKT_BURST 32 or similar, and I assume most DPDK applications do too.
I do not trust the compiler to be clever enough to realize that the PMD's RX function is always called with a specific nb_pkts and optimize all this cruft away at compile time (or at link time), unless it is a #define or a compile time constant.
> >
> > Med venlig hilsen / kind regards
> > - Morten Brørup
> >
> >
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v2 5/5] doc: add single flow dump to guides
@ 2021-04-07 6:09 4% ` Haifei Luo
0 siblings, 0 replies; 200+ results
From: Haifei Luo @ 2021-04-07 6:09 UTC (permalink / raw)
To: dev
Cc: orika, viacheslavo, rasland, xuemingl, haifeil, Ferruh Yigit,
Matan Azrad, Shahaf Shuler
Add "Flow dump" in features/default.ini and features/mlx5.ini.
Add testpmd CLI and API changes in release_notes.
Signed-off-by: Haifei Luo <haifeil@nvidia.com>
---
doc/guides/nics/features/default.ini | 1 +
doc/guides/nics/features/mlx5.ini | 1 +
doc/guides/rel_notes/release_21_05.rst | 5 ++++-
3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/doc/guides/nics/features/default.ini b/doc/guides/nics/features/default.ini
index 8046bd1..49aaf17 100644
--- a/doc/guides/nics/features/default.ini
+++ b/doc/guides/nics/features/default.ini
@@ -39,6 +39,7 @@ DCB =
VLAN filter =
Flow control =
Flow API =
+Flow dump =
Rate limitation =
Traffic mirroring =
Inline crypto =
diff --git a/doc/guides/nics/features/mlx5.ini b/doc/guides/nics/features/mlx5.ini
index ddd131d..3c5fcff 100644
--- a/doc/guides/nics/features/mlx5.ini
+++ b/doc/guides/nics/features/mlx5.ini
@@ -29,6 +29,7 @@ SR-IOV = Y
VLAN filter = Y
Flow control = Y
Flow API = Y
+Flow dump = Y
CRC offload = Y
VLAN offload = Y
L3 checksum offload = Y
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 873140b..f256324 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -125,7 +125,8 @@ New Features
``dpdk-testpmd -- --eth-link-speed N``
* Added command to display Rx queue used descriptor count.
``show port (port_id) rxq (queue_id) desc used count``
-
+ * Added command to dump internal representation information of single flow.
+ ``flow dump (port_id) rule (rule_id)``
Removed Items
-------------
@@ -155,6 +156,8 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* ethdev: Added a rte_flow pointer parameter to the function
+ ``rte_flow_dev_dump()`` allowing dump for single flow.
ABI Changes
-----------
--
1.8.3.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-04-06 13:13 0% ` Morten Brørup
@ 2021-04-07 0:47 0% ` Honnappa Nagarahalli
2021-04-07 7:11 0% ` Morten Brørup
0 siblings, 1 reply; 200+ results
From: Honnappa Nagarahalli @ 2021-04-07 0:47 UTC (permalink / raw)
To: Morten Brørup, Tom Barbette, dev
Cc: nd, Alireza Farshin, Van Haaren, Harry, Bruce Richardson,
Honnappa Nagarahalli, nd
<snip>
>
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tom Barbette
> > Sent: Wednesday, March 31, 2021 10:53 AM
> >
> > Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> > > - Ability to tune the values of #defines
> > > * Few prominent points discussed
> > > - This will result in #ifdefs in the code (for ex: in testpmd)
> > > - One option is for all the PMDs to document their configurable
> > #defines in PMD specific header files. Having these distributed is
> > much easier to search.
> > > - Can some of the existing #defines be converted to runtime
> > configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> > > * Bruce to think about converting the doc to a blog or an email
> > on the mailing list. But soliciting feedback is most important.
> >
> > One alternative path worth looking at is to encourage the use of LTO,
> > and modify APIs so the configuration can be provided at linking time,
> > and propagated by the compiler.
> >
> > E.g. one can define rte_max_lcore as a weak constant symbol, equal to
> > 128. At linking time the user may provide a rte_max_lcore that is more
> > tailored, and still, dynamic arrays[rte_max_lcore] will be allocatable
> > on the .bss section, avoiding an indirection. The compiler will be
> > able to optimize loops etc which is impossible with pure runtime
> > configuration.
> >
> > In packetmill.io we actually pushed this to the next level where the
> > driver can completely change its behavior without recompiling DPDK
> > itself and spawning ifdefs everywhere.
> >
> > However the price is the slowiness of LTO...
> >
> > My 2 cents.
> >
> > Tom
> >
>
> If we are moving away from Compile Time parameters, I certainly prefer Tom's
> suggestion of Link Time parameters, rather than Run Time parameters.
I think compile time constants are fine if they are not used in #ifdef. For ex: if they are used in 'if (...)', it will help eliminate code and branches.
>
> This might also provide a middle ground for optimizations where Compile
> Time parameters are considered unacceptable by the DPDK community. I'm
> thinking about something along the lines of the "constant size" rte_event
> array presented at the 2020 Userspace Summit by Harry
> (https://static.sched.com/hosted_files/dpdkuserspace2020/d3/dpdk_userspac
> e_20_api_performance_hvh.pdf). Taking this thinking even further out, a Link
> Time parameter could perhaps replace the nb_pkts parameter in on
> optimized rte_eth_rx_burst() function.
>
>
> Med venlig hilsen / kind regards
> - Morten Brørup
>
>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v2] build: list symbols exports in a single file
@ 2021-04-06 17:59 2% ` David Marchand
0 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-04-06 17:59 UTC (permalink / raw)
To: dev
Cc: thomas, bruce.richardson, Dmitry Kozlyuk,
Narcisa Ana Maria Vasile, Dmitry Malloy, Pallavi Kadam,
Ray Kinsella, Neil Horman, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko
Rather than have two files that keeps getting out of sync, let's
annotate the version.map to generate the Windows export file.
Note: Existing version.map annotation achieved with:
$ for dir in lib/librte_eal drivers/common/mlx5; do
./buildtools/map-list-symbol.sh $dir/*.map |
while read file version sym; do
! git grep -qw $sym $dir/*.def || continue;
sed -i -e "s/$sym;/$sym; # WINDOWS_NO_EXPORT/" $dir/*.map;
done;
done
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since v1:
- removed unused python imports in map_to_win.py,
- fixed symbol map check to ignore comments,
- aligned common/mlx5 map with exports.def (all symbols exported by
Windows are available in Linux too),
- annotated common/mlx5 map,
- updated SPDX check,
- updated ABI update tool,
---
MAINTAINERS | 1 -
buildtools/map_to_win.py | 9 +-
devtools/check-spdx-tag.sh | 2 +-
devtools/check-symbol-maps.sh | 22 +-
devtools/update_version_map_abi.py | 12 +-
.../common/mlx5/rte_common_mlx5_exports.def | 75 ----
drivers/common/mlx5/version.map | 79 ++--
lib/librte_eal/rte_eal_exports.def | 336 ------------------
lib/librte_eal/version.map | 136 +++----
9 files changed, 123 insertions(+), 549 deletions(-)
delete mode 100644 drivers/common/mlx5/rte_common_mlx5_exports.def
delete mode 100644 lib/librte_eal/rte_eal_exports.def
diff --git a/MAINTAINERS b/MAINTAINERS
index 0ec5588540..f2d600d0cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -333,7 +333,6 @@ M: Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>
M: Dmitry Malloy <dmitrym@microsoft.com>
M: Pallavi Kadam <pallavi.kadam@intel.com>
F: lib/librte_eal/windows/
-F: lib/librte_eal/rte_eal_exports.def
F: buildtools/map_to_win.py
F: doc/guides/windows_gsg/
diff --git a/buildtools/map_to_win.py b/buildtools/map_to_win.py
index 2a6cb88605..aa1752cacd 100644
--- a/buildtools/map_to_win.py
+++ b/buildtools/map_to_win.py
@@ -3,11 +3,10 @@
# Copyright(c) 2019 Intel Corporation
import sys
-from os.path import dirname, basename, join, exists
def is_function_line(ln):
- return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln
+ return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln and "# WINDOWS_NO_EXPORT" not in ln
# MinGW keeps the original .map file but replaces per_lcore* to __emutls_v.per_lcore*
def create_mingw_map_file(input_map, output_map):
@@ -24,12 +23,6 @@ def main(args):
create_mingw_map_file(args[1], args[2])
return 0
-# special case, allow override if an def file already exists alongside map file
- override_file = join(dirname(args[1]), basename(args[2]))
- if exists(override_file):
- with open(override_file) as f_in:
- functions = f_in.readlines()
-
# generate def file from map file.
# This works taking indented lines only which end with a ";" and which don't
# have a colon in them, i.e. the lines defining functions only.
diff --git a/devtools/check-spdx-tag.sh b/devtools/check-spdx-tag.sh
index a0ec1ed5b6..3f2912e922 100755
--- a/devtools/check-spdx-tag.sh
+++ b/devtools/check-spdx-tag.sh
@@ -25,7 +25,7 @@ check_spdx() {
':^*/Kbuild' ':^*/README' \
':^license/' ':^config/' ':^buildtools/' \
':^*.cocci' ':^*.abignore' \
- ':^*.def' ':^*.map' ':^*.ini' ':^*.data' ':^*.cfg' ':^*.txt' \
+ ':^*.map' ':^*.ini' ':^*.data' ':^*.cfg' ':^*.txt' \
':^*.svg' ':^*.png'\
> $tmpfile
diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
index c3cbcaf720..f06353fc75 100755
--- a/devtools/check-symbol-maps.sh
+++ b/devtools/check-symbol-maps.sh
@@ -12,7 +12,7 @@ ret=0
find_orphan_symbols ()
{
for map in $(find lib drivers -name '*.map') ; do
- for sym in $(sed -rn 's,^([^}]*_.*);,\1,p' $map) ; do
+ for sym in $(sed -rn 's,^([^}]*_.*);.*$,\1,p' $map) ; do
if echo $sym | grep -q '^per_lcore_' ; then
symsrc=${sym#per_lcore_}
elif echo $sym | grep -q '^__rte_.*_trace_' ; then
@@ -35,24 +35,4 @@ if [ -n "$orphan_symbols" ] ; then
ret=1
fi
-find_orphan_windows_symbols ()
-{
- for def in $(find lib drivers -name '*_exports.def') ; do
- if echo $def | grep -q 'common_mlx5' ; then
- continue # mlx5 exports different symbols per OS
- fi
- map=$(dirname $def)/version.map
- for sym in $(grep -v ^EXPORTS $def); do
- grep -q $sym $map || echo $sym
- done
- done
-}
-
-orphan_windows_symbols=$(find_orphan_windows_symbols)
-if [ -n "$orphan_windows_symbols" ] ; then
- echo "Found only in Windows export file:"
- echo "$orphan_windows_symbols" | sed 's,^,\t,'
- ret=1
-fi
-
exit $ret
diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
index d3068bbd2d..d17b02a327 100755
--- a/devtools/update_version_map_abi.py
+++ b/devtools/update_version_map_abi.py
@@ -15,13 +15,17 @@
def __parse_map_file(f_in):
- # match function name, followed by semicolon, followed by EOL, optionally
- # with whitespace in between each item
+ # match function name, followed by semicolon, followed by EOL or comments,
+ # optionally with whitespace in between each item
func_line_regex = re.compile(r"\s*"
+ r"(?P<line>"
r"(?P<func>[a-zA-Z_0-9]+)"
r"\s*"
r";"
r"\s*"
+ r"(?P<comment>#.+)?"
+ r")"
+ r"\s*"
r"$")
# match section name, followed by opening bracked, followed by EOL,
# optionally with whitespace in between each item
@@ -99,7 +103,7 @@ def __parse_map_file(f_in):
# is this a function?
match = func_line_regex.match(line)
if match:
- stable_lines.add(match.group("func"))
+ stable_lines.add(match.group("line"))
return has_stable, stable_lines, experimental_lines, internal_lines
@@ -116,7 +120,7 @@ def __generate_stable_abi(f_out, abi_major, lines):
# print all stable lines, alphabetically sorted
for line in sorted(lines):
- print("\t{};".format(line), file=f_out)
+ print("\t{}".format(line), file=f_out)
# another blank line
print(file=f_out)
diff --git a/drivers/common/mlx5/rte_common_mlx5_exports.def b/drivers/common/mlx5/rte_common_mlx5_exports.def
deleted file mode 100644
index fd62b806ca..0000000000
--- a/drivers/common/mlx5/rte_common_mlx5_exports.def
+++ /dev/null
@@ -1,75 +0,0 @@
-EXPORTS
- haswell_broadwell_cpu
-
- mlx5_common_init
-
- mlx5_create_mr_ext
-
- mlx5_devx_cmd_alloc_pd
- mlx5_devx_cmd_create_cq
- mlx5_devx_cmd_create_flex_parser
- mlx5_devx_cmd_create_qp
- mlx5_devx_cmd_create_rq
- mlx5_devx_cmd_create_rqt
- mlx5_devx_cmd_create_sq
- mlx5_devx_cmd_create_tir
- mlx5_devx_cmd_create_td
- mlx5_devx_cmd_create_tis
- mlx5_devx_cmd_create_virtq
- mlx5_devx_cmd_destroy
- mlx5_devx_cmd_flow_counter_alloc
- mlx5_devx_cmd_flow_counter_query
- mlx5_devx_cmd_flow_dump
- mlx5_devx_cmd_mkey_create
- mlx5_devx_cmd_modify_qp_state
- mlx5_devx_cmd_modify_rq
- mlx5_devx_cmd_modify_rqt
- mlx5_devx_cmd_modify_sq
- mlx5_devx_cmd_modify_tir
- mlx5_devx_cmd_modify_virtq
- mlx5_devx_cmd_qp_query_tis_td
- mlx5_devx_cmd_query_hca_attr
- mlx5_devx_cmd_query_parse_samples
- mlx5_devx_cmd_query_virtq
- mlx5_devx_cmd_register_read
- mlx5_devx_get_out_command_status
- mlx5_devx_cmd_create_flow_hit_aso_obj
- mlx5_devx_cmd_create_geneve_tlv_option
-
- mlx5_devx_cq_create
- mlx5_devx_cq_destroy
- mlx5_devx_rq_create
- mlx5_devx_rq_destroy
- mlx5_devx_sq_create
- mlx5_devx_sq_destroy
-
- mlx5_glue
-
- mlx5_malloc_mem_select
- mlx5_mr_btree_init
- mlx5_mr_btree_free
- mlx5_mr_btree_dump
- mlx5_mr_addr2mr_bh
- mlx5_mr_release_cache
- mlx5_mr_dump_cache
- mlx5_mr_rebuild_cache
- mlx5_mr_insert_cache
- mlx5_mr_lookup_cache
- mlx5_mr_lookup_list
- mlx5_mr_create_primary
- mlx5_mr_flush_local_cache
- mlx5_mp_req_queue_state_modify
- mlx5_mr_free
-
- mlx5_pci_driver_register
-
- mlx5_malloc
- mlx5_realloc
- mlx5_free
-
- mlx5_os_alloc_pd
- mlx5_os_dealloc_pd
- mlx5_os_dereg_mr
- mlx5_os_reg_mr
- mlx5_os_umem_reg
- mlx5_os_umem_dereg
diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
index 91f3fa5779..299c17cd26 100644
--- a/drivers/common/mlx5/version.map
+++ b/drivers/common/mlx5/version.map
@@ -3,12 +3,12 @@ INTERNAL {
mlx5_common_init;
- mlx5_common_verbs_reg_mr;
- mlx5_common_verbs_dereg_mr;
+ mlx5_common_verbs_reg_mr; # WINDOWS_NO_EXPORT
+ mlx5_common_verbs_dereg_mr; # WINDOWS_NO_EXPORT
mlx5_create_mr_ext;
- mlx5_dev_to_pci_addr;
+ mlx5_dev_to_pci_addr; # WINDOWS_NO_EXPORT
mlx5_devx_cmd_alloc_pd;
mlx5_devx_cmd_create_cq;
@@ -20,7 +20,7 @@ INTERNAL {
mlx5_devx_cmd_create_tir;
mlx5_devx_cmd_create_td;
mlx5_devx_cmd_create_tis;
- mlx5_devx_cmd_create_virtio_q_counters;
+ mlx5_devx_cmd_create_virtio_q_counters; # WINDOWS_NO_EXPORT
mlx5_devx_cmd_create_virtq;
mlx5_devx_cmd_create_flow_hit_aso_obj;
mlx5_devx_cmd_create_geneve_tlv_option;
@@ -38,14 +38,14 @@ INTERNAL {
mlx5_devx_cmd_qp_query_tis_td;
mlx5_devx_cmd_query_hca_attr;
mlx5_devx_cmd_query_parse_samples;
- mlx5_devx_cmd_query_virtio_q_counters;
+ mlx5_devx_cmd_query_virtio_q_counters; # WINDOWS_NO_EXPORT
mlx5_devx_cmd_query_virtq;
- mlx5_devx_cmd_queue_counter_alloc;
- mlx5_devx_cmd_queue_counter_query;
+ mlx5_devx_cmd_queue_counter_alloc; # WINDOWS_NO_EXPORT
+ mlx5_devx_cmd_queue_counter_query; # WINDOWS_NO_EXPORT
mlx5_devx_cmd_register_read;
- mlx5_devx_cmd_wq_query;
+ mlx5_devx_cmd_wq_query; # WINDOWS_NO_EXPORT
mlx5_devx_get_out_command_status;
- mlx5_devx_alloc_uar;
+ mlx5_devx_alloc_uar; # WINDOWS_NO_EXPORT
mlx5_devx_cq_create;
mlx5_devx_cq_destroy;
@@ -54,15 +54,15 @@ INTERNAL {
mlx5_devx_sq_create;
mlx5_devx_sq_destroy;
- mlx5_get_ifname_sysfs;
+ mlx5_get_ifname_sysfs; # WINDOWS_NO_EXPORT
- mlx5_mp_init_primary;
- mlx5_mp_uninit_primary;
- mlx5_mp_init_secondary;
- mlx5_mp_uninit_secondary;
- mlx5_mp_req_mr_create;
+ mlx5_mp_init_primary; # WINDOWS_NO_EXPORT
+ mlx5_mp_uninit_primary; # WINDOWS_NO_EXPORT
+ mlx5_mp_init_secondary; # WINDOWS_NO_EXPORT
+ mlx5_mp_uninit_secondary; # WINDOWS_NO_EXPORT
+ mlx5_mp_req_mr_create; # WINDOWS_NO_EXPORT
mlx5_mp_req_queue_state_modify;
- mlx5_mp_req_verbs_cmd_fd;
+ mlx5_mp_req_verbs_cmd_fd; # WINDOWS_NO_EXPORT
mlx5_mr_btree_init;
mlx5_mr_btree_free;
@@ -78,31 +78,40 @@ INTERNAL {
mlx5_mr_flush_local_cache;
mlx5_mr_free;
- mlx5_nl_allmulti;
- mlx5_nl_devlink_family_id_get;
- mlx5_nl_driver_reload;
- mlx5_nl_enable_roce_get;
- mlx5_nl_enable_roce_set;
- mlx5_nl_ifindex;
- mlx5_nl_init;
- mlx5_nl_mac_addr_add;
- mlx5_nl_mac_addr_flush;
- mlx5_nl_mac_addr_remove;
- mlx5_nl_mac_addr_sync;
- mlx5_nl_portnum;
- mlx5_nl_promisc;
- mlx5_nl_switch_info;
- mlx5_nl_vf_mac_addr_modify;
- mlx5_nl_vlan_vmwa_create;
- mlx5_nl_vlan_vmwa_delete;
+ mlx5_nl_allmulti; # WINDOWS_NO_EXPORT
+ mlx5_nl_devlink_family_id_get; # WINDOWS_NO_EXPORT
+ mlx5_nl_driver_reload; # WINDOWS_NO_EXPORT
+ mlx5_nl_enable_roce_get; # WINDOWS_NO_EXPORT
+ mlx5_nl_enable_roce_set; # WINDOWS_NO_EXPORT
+ mlx5_nl_ifindex; # WINDOWS_NO_EXPORT
+ mlx5_nl_init; # WINDOWS_NO_EXPORT
+ mlx5_nl_mac_addr_add; # WINDOWS_NO_EXPORT
+ mlx5_nl_mac_addr_flush; # WINDOWS_NO_EXPORT
+ mlx5_nl_mac_addr_remove; # WINDOWS_NO_EXPORT
+ mlx5_nl_mac_addr_sync; # WINDOWS_NO_EXPORT
+ mlx5_nl_portnum; # WINDOWS_NO_EXPORT
+ mlx5_nl_promisc; # WINDOWS_NO_EXPORT
+ mlx5_nl_switch_info; # WINDOWS_NO_EXPORT
+ mlx5_nl_vf_mac_addr_modify; # WINDOWS_NO_EXPORT
+ mlx5_nl_vlan_vmwa_create; # WINDOWS_NO_EXPORT
+ mlx5_nl_vlan_vmwa_delete; # WINDOWS_NO_EXPORT
- mlx5_translate_port_name;
+ mlx5_translate_port_name; # WINDOWS_NO_EXPORT
mlx5_malloc_mem_select;
- mlx5_memory_stat_dump;
+ mlx5_memory_stat_dump; # WINDOWS_NO_EXPORT
mlx5_malloc;
mlx5_realloc;
mlx5_free;
mlx5_pci_driver_register;
+
+ haswell_broadwell_cpu;
+ mlx5_glue;
+ mlx5_os_alloc_pd;
+ mlx5_os_dealloc_pd;
+ mlx5_os_dereg_mr;
+ mlx5_os_reg_mr;
+ mlx5_os_umem_reg;
+ mlx5_os_umem_dereg;
};
diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def
deleted file mode 100644
index c320077547..0000000000
--- a/lib/librte_eal/rte_eal_exports.def
+++ /dev/null
@@ -1,336 +0,0 @@
-EXPORTS
- __rte_panic
- per_lcore__lcore_id
- per_lcore__rte_errno
- per_lcore__thread_id
- rte_bus_dump
- rte_bus_find
- rte_bus_find_by_device
- rte_bus_find_by_name
- rte_bus_get_iommu_class
- rte_bus_probe
- rte_bus_register
- rte_bus_scan
- rte_bus_unregister
- rte_calloc
- rte_calloc_socket
- rte_cpu_get_flag_enabled
- rte_cpu_get_flag_name
- rte_ctrl_thread_create
- rte_delay_us
- rte_delay_us_block
- rte_delay_us_callback_register
- rte_dev_is_probed
- rte_dev_probe
- rte_dev_remove
- rte_devargs_add
- rte_devargs_dump
- rte_devargs_insert
- rte_devargs_next
- rte_devargs_parse
- rte_devargs_parsef
- rte_devargs_remove
- rte_devargs_type_count
- rte_dump_physmem_layout
- rte_dump_stack
- rte_dump_tailq
- rte_eal_alarm_cancel
- rte_eal_alarm_set
- rte_eal_cleanup
- rte_eal_get_lcore_state
- rte_eal_get_physmem_size
- rte_eal_get_runtime_dir
- rte_eal_has_hugepages
- rte_eal_has_pci
- rte_eal_hotplug_add
- rte_eal_hotplug_remove
- rte_eal_init
- rte_eal_iova_mode
- rte_eal_lcore_role
- rte_eal_mbuf_user_pool_ops
- rte_eal_mp_remote_launch
- rte_eal_mp_wait_lcore
- rte_eal_process_type
- rte_eal_remote_launch
- rte_eal_tailq_lookup
- rte_eal_tailq_register
- rte_eal_using_phys_addrs
- rte_eal_wait_lcore
- rte_epoll_ctl
- rte_epoll_wait
- rte_exit
- rte_free
- rte_get_main_lcore
- rte_get_next_lcore
- rte_get_tsc_hz
- rte_hexdump
- rte_hypervisor_get
- rte_intr_allow_others
- rte_intr_callback_register
- rte_intr_callback_unregister
- rte_intr_cap_multiple
- rte_intr_disable
- rte_intr_dp_is_en
- rte_intr_efd_disable
- rte_intr_efd_enable
- rte_intr_enable
- rte_intr_free_epoll_fd
- rte_intr_rx_ctl
- rte_intr_tls_epfd
- rte_lcore_count
- rte_lcore_has_role
- rte_lcore_index
- rte_lcore_is_enabled
- rte_lcore_to_socket_id
- rte_log
- rte_log_cur_msg_loglevel
- rte_log_cur_msg_logtype
- rte_log_dump
- rte_log_get_global_level
- rte_log_get_level
- rte_log_get_stream
- rte_log_register
- rte_log_set_global_level
- rte_log_set_level
- rte_log_set_level_pattern
- rte_log_set_level_regexp
- rte_malloc
- rte_malloc_dump_stats
- rte_malloc_get_socket_stats
- rte_malloc_set_limit
- rte_malloc_socket
- rte_malloc_validate
- rte_malloc_virt2iova
- rte_mcfg_mem_read_lock
- rte_mcfg_mem_read_unlock
- rte_mcfg_mem_write_lock
- rte_mcfg_mem_write_unlock
- rte_mcfg_mempool_read_lock
- rte_mcfg_mempool_read_unlock
- rte_mcfg_mempool_write_lock
- rte_mcfg_mempool_write_unlock
- rte_mcfg_tailq_read_lock
- rte_mcfg_tailq_read_unlock
- rte_mcfg_tailq_write_lock
- rte_mcfg_tailq_write_unlock
- rte_mem_lock_page
- rte_mem_virt2iova
- rte_mem_virt2phy
- rte_memdump
- rte_memory_get_nchannel
- rte_memory_get_nrank
- rte_memzone_dump
- rte_memzone_free
- rte_memzone_lookup
- rte_memzone_reserve
- rte_memzone_reserve_aligned
- rte_memzone_reserve_bounded
- rte_memzone_walk
- rte_openlog_stream
- rte_rand
- rte_realloc
- rte_reciprocal_value
- rte_reciprocal_value_u64
- rte_rtm_supported
- rte_service_attr_get
- rte_service_attr_reset_all
- rte_service_component_register
- rte_service_component_runstate_set
- rte_service_component_unregister
- rte_service_dump
- rte_service_finalize
- rte_service_get_by_name
- rte_service_get_count
- rte_service_get_name
- rte_service_lcore_add
- rte_service_lcore_attr_get
- rte_service_lcore_attr_reset_all
- rte_service_lcore_count
- rte_service_lcore_count_services
- rte_service_lcore_del
- rte_service_lcore_list
- rte_service_lcore_reset_all
- rte_service_lcore_start
- rte_service_lcore_stop
- rte_service_map_lcore_get
- rte_service_map_lcore_set
- rte_service_may_be_active
- rte_service_probe_capability
- rte_service_run_iter_on_app_lcore
- rte_service_runstate_get
- rte_service_runstate_set
- rte_service_set_runstate_mapped_check
- rte_service_set_stats_enable
- rte_service_start_with_defaults
- rte_set_application_usage_hook
- rte_socket_count
- rte_socket_id
- rte_socket_id_by_idx
- rte_strerror
- rte_strscpy
- rte_strsplit
- rte_sys_gettid
- rte_thread_get_affinity
- rte_thread_set_affinity
- rte_thread_setname
- rte_vfio_container_dma_map
- rte_vfio_container_dma_unmap
- rte_vlog
- rte_zmalloc
- rte_zmalloc_socket
-
- rte_mp_action_register
- rte_mp_action_unregister
- rte_mp_reply
- rte_mp_sendmsg
-
- rte_dev_event_callback_register
- rte_dev_event_callback_unregister
- rte_fbarray_attach
- rte_fbarray_destroy
- rte_fbarray_detach
- rte_fbarray_dump_metadata
- rte_fbarray_find_contig_free
- rte_fbarray_find_contig_used
- rte_fbarray_find_idx
- rte_fbarray_find_next_free
- rte_fbarray_find_next_n_free
- rte_fbarray_find_next_n_used
- rte_fbarray_find_next_used
- rte_fbarray_get
- rte_fbarray_init
- rte_fbarray_is_used
- rte_fbarray_set_free
- rte_fbarray_set_used
- rte_log_register_type_and_pick_level
- rte_malloc_dump_heaps
- rte_mem_alloc_validator_register
- rte_mem_alloc_validator_unregister
- rte_mem_check_dma_mask
- rte_mem_event_callback_register
- rte_mem_event_callback_unregister
- rte_mem_iova2virt
- rte_mem_virt2memseg
- rte_mem_virt2memseg_list
- rte_memseg_contig_walk
- rte_memseg_list_walk
- rte_memseg_walk
- rte_mp_request_async
- rte_mp_request_sync
-
- rte_class_find
- rte_class_find_by_name
- rte_class_register
- rte_class_unregister
- rte_dev_iterator_init
- rte_dev_iterator_next
- rte_fbarray_find_prev_free
- rte_fbarray_find_prev_n_free
- rte_fbarray_find_prev_n_used
- rte_fbarray_find_prev_used
- rte_fbarray_find_rev_contig_free
- rte_fbarray_find_rev_contig_used
- rte_memseg_contig_walk_thread_unsafe
- rte_memseg_list_walk_thread_unsafe
- rte_memseg_walk_thread_unsafe
-
- rte_delay_us_sleep
- rte_dev_event_callback_process
- rte_malloc_heap_create
- rte_malloc_heap_destroy
- rte_malloc_heap_get_socket
- rte_malloc_heap_memory_add
- rte_malloc_heap_memory_attach
- rte_malloc_heap_memory_detach
- rte_malloc_heap_memory_remove
- rte_malloc_heap_socket_is_external
- rte_mem_check_dma_mask_thread_unsafe
- rte_mem_set_dma_mask
- rte_memseg_get_fd
- rte_memseg_get_fd_offset
- rte_memseg_get_fd_offset_thread_unsafe
- rte_memseg_get_fd_thread_unsafe
-
- rte_extmem_attach
- rte_extmem_detach
- rte_extmem_register
- rte_extmem_unregister
-
- rte_dev_dma_map
- rte_dev_dma_unmap
- rte_fbarray_find_biggest_free
- rte_fbarray_find_biggest_used
- rte_fbarray_find_rev_biggest_free
- rte_fbarray_find_rev_biggest_used
- rte_intr_callback_unregister_pending
- rte_realloc_socket
-
- rte_intr_ack
- rte_lcore_cpuset
- rte_lcore_to_cpu_id
- rte_mcfg_timer_lock
- rte_mcfg_timer_unlock
- rte_mcfg_get_single_file_segments
-
- rte_thread_is_intr
-
- __rte_eal_trace_alarm_cancel
- __rte_eal_trace_alarm_set
- __rte_eal_trace_generic_double
- __rte_eal_trace_generic_float
- __rte_eal_trace_generic_func
- __rte_eal_trace_generic_i16
- __rte_eal_trace_generic_i32
- __rte_eal_trace_generic_i64
- __rte_eal_trace_generic_i8
- __rte_eal_trace_generic_int
- __rte_eal_trace_generic_long
- __rte_eal_trace_generic_ptr
- __rte_eal_trace_generic_str
- __rte_eal_trace_generic_u16
- __rte_eal_trace_generic_u32
- __rte_eal_trace_generic_u64
- __rte_eal_trace_generic_u8
- __rte_eal_trace_generic_void
- __rte_eal_trace_intr_callback_register
- __rte_eal_trace_intr_callback_unregister
- __rte_eal_trace_intr_enable
- __rte_eal_trace_intr_disable
- __rte_eal_trace_mem_free
- __rte_eal_trace_mem_malloc
- __rte_eal_trace_mem_realloc
- __rte_eal_trace_mem_zmalloc
- __rte_eal_trace_memzone_free
- __rte_eal_trace_memzone_lookup
- __rte_eal_trace_memzone_reserve
- __rte_eal_trace_thread_lcore_ready
- __rte_eal_trace_thread_remote_launch
- __rte_trace_mem_per_thread_alloc
- __rte_trace_point_emit_field
- __rte_trace_point_register
- per_lcore_trace_mem
- per_lcore_trace_point_sz
- rte_log_can_log
-
- rte_lcore_callback_register
- rte_lcore_callback_unregister
- rte_lcore_dump
- rte_lcore_iterate
- rte_mp_disable
- rte_service_lcore_may_be_active
- rte_thread_register
- rte_thread_unregister
-
- rte_epoll_wait_interruptible
- rte_vect_get_max_simd_bitwidth
- rte_vect_set_max_simd_bitwidth
-
- rte_thread_key_create
- rte_thread_key_delete
- rte_thread_value_get
- rte_thread_value_set
-
- rte_mem_lock
- rte_mem_map
- rte_mem_page_size
- rte_mem_unmap
diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map
index e23745ae6e..151330b1b5 100644
--- a/lib/librte_eal/version.map
+++ b/lib/librte_eal/version.map
@@ -2,8 +2,8 @@ DPDK_21 {
global:
__rte_panic;
- eal_parse_sysfs_value;
- eal_timer_source;
+ eal_parse_sysfs_value; # WINDOWS_NO_EXPORT
+ eal_timer_source; # WINDOWS_NO_EXPORT
per_lcore__lcore_id;
per_lcore__rte_errno;
per_lcore__thread_id;
@@ -20,9 +20,9 @@ DPDK_21 {
rte_calloc_socket;
rte_cpu_get_flag_enabled;
rte_cpu_get_flag_name;
- rte_cpu_is_supported;
+ rte_cpu_is_supported; # WINDOWS_NO_EXPORT
rte_ctrl_thread_create;
- rte_cycles_vmware_tsc_map;
+ rte_cycles_vmware_tsc_map; # WINDOWS_NO_EXPORT
rte_delay_us;
rte_delay_us_block;
rte_delay_us_callback_register;
@@ -43,7 +43,7 @@ DPDK_21 {
rte_eal_alarm_cancel;
rte_eal_alarm_set;
rte_eal_cleanup;
- rte_eal_create_uio_dev;
+ rte_eal_create_uio_dev; # WINDOWS_NO_EXPORT
rte_eal_get_lcore_state;
rte_eal_get_physmem_size;
rte_eal_get_runtime_dir;
@@ -51,34 +51,34 @@ DPDK_21 {
rte_eal_has_pci;
rte_eal_hotplug_add;
rte_eal_hotplug_remove;
- rte_eal_hpet_init;
+ rte_eal_hpet_init; # WINDOWS_NO_EXPORT
rte_eal_init;
- rte_eal_iopl_init;
+ rte_eal_iopl_init; # WINDOWS_NO_EXPORT
rte_eal_iova_mode;
rte_eal_lcore_role;
rte_eal_mbuf_user_pool_ops;
rte_eal_mp_remote_launch;
rte_eal_mp_wait_lcore;
- rte_eal_primary_proc_alive;
+ rte_eal_primary_proc_alive; # WINDOWS_NO_EXPORT
rte_eal_process_type;
rte_eal_remote_launch;
rte_eal_tailq_lookup;
rte_eal_tailq_register;
rte_eal_using_phys_addrs;
- rte_eal_vfio_intr_mode;
+ rte_eal_vfio_intr_mode; # WINDOWS_NO_EXPORT
rte_eal_wait_lcore;
rte_epoll_ctl;
rte_epoll_wait;
rte_exit;
rte_free;
- rte_get_hpet_cycles;
- rte_get_hpet_hz;
+ rte_get_hpet_cycles; # WINDOWS_NO_EXPORT
+ rte_get_hpet_hz; # WINDOWS_NO_EXPORT
rte_get_main_lcore;
rte_get_next_lcore;
rte_get_tsc_hz;
rte_hexdump;
rte_hypervisor_get;
- rte_hypervisor_get_name;
+ rte_hypervisor_get_name; # WINDOWS_NO_EXPORT
rte_intr_allow_others;
rte_intr_callback_register;
rte_intr_callback_unregister;
@@ -91,12 +91,12 @@ DPDK_21 {
rte_intr_free_epoll_fd;
rte_intr_rx_ctl;
rte_intr_tls_epfd;
- rte_keepalive_create;
- rte_keepalive_dispatch_pings;
- rte_keepalive_mark_alive;
- rte_keepalive_mark_sleep;
- rte_keepalive_register_core;
- rte_keepalive_register_relay_callback;
+ rte_keepalive_create; # WINDOWS_NO_EXPORT
+ rte_keepalive_dispatch_pings; # WINDOWS_NO_EXPORT
+ rte_keepalive_mark_alive; # WINDOWS_NO_EXPORT
+ rte_keepalive_mark_sleep; # WINDOWS_NO_EXPORT
+ rte_keepalive_register_core; # WINDOWS_NO_EXPORT
+ rte_keepalive_register_relay_callback; # WINDOWS_NO_EXPORT
rte_lcore_count;
rte_lcore_has_role;
rte_lcore_index;
@@ -159,7 +159,7 @@ DPDK_21 {
rte_service_component_unregister;
rte_service_dump;
rte_service_finalize;
- rte_service_get_by_id;
+ rte_service_get_by_id; # WINDOWS_NO_EXPORT
rte_service_get_by_name;
rte_service_get_count;
rte_service_get_name;
@@ -187,7 +187,7 @@ DPDK_21 {
rte_socket_count;
rte_socket_id;
rte_socket_id_by_idx;
- rte_srand;
+ rte_srand; # WINDOWS_NO_EXPORT
rte_strerror;
rte_strscpy;
rte_strsplit;
@@ -195,26 +195,26 @@ DPDK_21 {
rte_thread_get_affinity;
rte_thread_set_affinity;
rte_thread_setname;
- rte_uuid_compare;
- rte_uuid_is_null;
- rte_uuid_parse;
- rte_uuid_unparse;
- rte_version;
- rte_vfio_clear_group;
- rte_vfio_container_create;
- rte_vfio_container_destroy;
+ rte_uuid_compare; # WINDOWS_NO_EXPORT
+ rte_uuid_is_null; # WINDOWS_NO_EXPORT
+ rte_uuid_parse; # WINDOWS_NO_EXPORT
+ rte_uuid_unparse; # WINDOWS_NO_EXPORT
+ rte_version; # WINDOWS_NO_EXPORT
+ rte_vfio_clear_group; # WINDOWS_NO_EXPORT
+ rte_vfio_container_create; # WINDOWS_NO_EXPORT
+ rte_vfio_container_destroy; # WINDOWS_NO_EXPORT
rte_vfio_container_dma_map;
rte_vfio_container_dma_unmap;
- rte_vfio_container_group_bind;
- rte_vfio_container_group_unbind;
- rte_vfio_enable;
- rte_vfio_get_container_fd;
- rte_vfio_get_group_fd;
- rte_vfio_get_group_num;
- rte_vfio_is_enabled;
- rte_vfio_noiommu_is_enabled;
- rte_vfio_release_device;
- rte_vfio_setup_device;
+ rte_vfio_container_group_bind; # WINDOWS_NO_EXPORT
+ rte_vfio_container_group_unbind; # WINDOWS_NO_EXPORT
+ rte_vfio_enable; # WINDOWS_NO_EXPORT
+ rte_vfio_get_container_fd; # WINDOWS_NO_EXPORT
+ rte_vfio_get_group_fd; # WINDOWS_NO_EXPORT
+ rte_vfio_get_group_num; # WINDOWS_NO_EXPORT
+ rte_vfio_is_enabled; # WINDOWS_NO_EXPORT
+ rte_vfio_noiommu_is_enabled; # WINDOWS_NO_EXPORT
+ rte_vfio_release_device; # WINDOWS_NO_EXPORT
+ rte_vfio_setup_device; # WINDOWS_NO_EXPORT
rte_vlog;
rte_zmalloc;
rte_zmalloc_socket;
@@ -234,8 +234,8 @@ EXPERIMENTAL {
# added in 18.05
rte_dev_event_callback_register;
rte_dev_event_callback_unregister;
- rte_dev_event_monitor_start;
- rte_dev_event_monitor_stop;
+ rte_dev_event_monitor_start; # WINDOWS_NO_EXPORT
+ rte_dev_event_monitor_stop; # WINDOWS_NO_EXPORT
rte_fbarray_attach;
rte_fbarray_destroy;
rte_fbarray_detach;
@@ -288,8 +288,8 @@ EXPERIMENTAL {
# added in 18.11
rte_delay_us_sleep;
rte_dev_event_callback_process;
- rte_dev_hotplug_handle_disable;
- rte_dev_hotplug_handle_enable;
+ rte_dev_hotplug_handle_disable; # WINDOWS_NO_EXPORT
+ rte_dev_hotplug_handle_enable; # WINDOWS_NO_EXPORT
rte_malloc_heap_create;
rte_malloc_heap_destroy;
rte_malloc_heap_get_socket;
@@ -327,7 +327,7 @@ EXPERIMENTAL {
rte_lcore_to_cpu_id;
rte_mcfg_timer_lock;
rte_mcfg_timer_unlock;
- rte_rand_max;
+ rte_rand_max; # WINDOWS_NO_EXPORT
# added in 19.11
rte_mcfg_get_single_file_segments;
@@ -373,22 +373,22 @@ EXPERIMENTAL {
per_lcore_trace_mem;
per_lcore_trace_point_sz;
rte_log_can_log;
- rte_thread_getname;
- rte_trace_dump;
- rte_trace_is_enabled;
- rte_trace_metadata_dump;
- rte_trace_mode_get;
- rte_trace_mode_set;
- rte_trace_pattern;
- rte_trace_point_disable;
- rte_trace_point_enable;
- rte_trace_point_is_enabled;
- rte_trace_point_lookup;
- rte_trace_regexp;
- rte_trace_save;
+ rte_thread_getname; # WINDOWS_NO_EXPORT
+ rte_trace_dump; # WINDOWS_NO_EXPORT
+ rte_trace_is_enabled; # WINDOWS_NO_EXPORT
+ rte_trace_metadata_dump; # WINDOWS_NO_EXPORT
+ rte_trace_mode_get; # WINDOWS_NO_EXPORT
+ rte_trace_mode_set; # WINDOWS_NO_EXPORT
+ rte_trace_pattern; # WINDOWS_NO_EXPORT
+ rte_trace_point_disable; # WINDOWS_NO_EXPORT
+ rte_trace_point_enable; # WINDOWS_NO_EXPORT
+ rte_trace_point_is_enabled; # WINDOWS_NO_EXPORT
+ rte_trace_point_lookup; # WINDOWS_NO_EXPORT
+ rte_trace_regexp; # WINDOWS_NO_EXPORT
+ rte_trace_save; # WINDOWS_NO_EXPORT
# added in 20.08
- rte_eal_vfio_get_vf_token;
+ rte_eal_vfio_get_vf_token; # WINDOWS_NO_EXPORT
rte_lcore_callback_register;
rte_lcore_callback_unregister;
rte_lcore_dump;
@@ -398,29 +398,29 @@ EXPERIMENTAL {
rte_thread_unregister;
# added in 20.11
- __rte_eal_trace_generic_size_t;
- rte_cpu_get_intrinsics_support;
+ __rte_eal_trace_generic_size_t; # WINDOWS_NO_EXPORT
+ rte_cpu_get_intrinsics_support; # WINDOWS_NO_EXPORT
rte_epoll_wait_interruptible;
rte_service_lcore_may_be_active;
rte_vect_get_max_simd_bitwidth;
rte_vect_set_max_simd_bitwidth;
# added in 21.02
- rte_power_monitor;
- rte_power_monitor_wakeup;
- rte_power_pause;
+ rte_power_monitor; # WINDOWS_NO_EXPORT
+ rte_power_monitor_wakeup; # WINDOWS_NO_EXPORT
+ rte_power_pause; # WINDOWS_NO_EXPORT
# added in 21.05
rte_thread_key_create;
rte_thread_key_delete;
rte_thread_value_get;
rte_thread_value_set;
- rte_version_minor;
- rte_version_month;
- rte_version_prefix;
- rte_version_release;
- rte_version_suffix;
- rte_version_year;
+ rte_version_minor; # WINDOWS_NO_EXPORT
+ rte_version_month; # WINDOWS_NO_EXPORT
+ rte_version_prefix; # WINDOWS_NO_EXPORT
+ rte_version_release; # WINDOWS_NO_EXPORT
+ rte_version_suffix; # WINDOWS_NO_EXPORT
+ rte_version_year; # WINDOWS_NO_EXPORT
};
INTERNAL {
--
2.23.0
^ permalink raw reply [relevance 2%]
* Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
2021-04-06 0:49 0% ` oulijun
@ 2021-04-06 14:02 0% ` Ananyev, Konstantin
2021-04-14 10:40 0% ` Ferruh Yigit
2021-04-15 2:40 8% ` [dpdk-dev] [PATCH V3] " Lijun Ou
2 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2021-04-06 14:02 UTC (permalink / raw)
To: Lijun Ou, thomas, Yigit, Ferruh; +Cc: dev, linuxarm
Hi,
> Currently, upper-layer application could get queue state only
> through pointers such as dev->data->tx_queue_state[queue_id],
> this is not the recommended way to access it. So this patch
> add get queue state when call rte_eth_rx_queue_info_get and
> rte_eth_tx_queue_info_get API.
>
> Note: The hairpin queue is not supported with above
> rte_eth_*x_queue_info_get, so the queue state could be
> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
I wonder why RTE_ETH_QUEUE_STATE_HAIRPIN Is not supported?
Obviously what we do - copy internal queue state to the user provided buffer.
> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> it could be ABI compatible.
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> ---
> V1->V2:
> - move queue state defines to public file
> ---
> doc/guides/rel_notes/release_21_05.rst | 6 ++++++
> lib/librte_ethdev/ethdev_driver.h | 7 -------
> lib/librte_ethdev/rte_ethdev.c | 3 +++
> lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++
> 4 files changed, 20 insertions(+), 7 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
> index 22aa80a..503daf9 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -164,6 +164,12 @@ ABI Changes
>
> * No ABI change that would break compatibility with 20.11.
>
> +* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
> + to provide indicated rxq queue state.
> +
> +* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
> + to provide indicated txq queue state.
> +
>
> Known Issues
> ------------
> diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
> index cdd4b43..ec5a17d 100644
> --- a/lib/librte_ethdev/ethdev_driver.h
> +++ b/lib/librte_ethdev/ethdev_driver.h
> @@ -970,13 +970,6 @@ struct eth_dev_ops {
> };
>
> /**
> - * RX/TX queue states
> - */
> -#define RTE_ETH_QUEUE_STATE_STOPPED 0
> -#define RTE_ETH_QUEUE_STATE_STARTED 1
> -#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> -
> -/**
> * @internal
> * Check if the selected Rx queue is hairpin queue.
> *
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 3059aa5..fbd10b2 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>
> memset(qinfo, 0, sizeof(*qinfo));
> dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
> + qinfo->queue_state = dev->data->rx_queue_state[queue_id];
> +
> return 0;
> }
>
> @@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>
> memset(qinfo, 0, sizeof(*qinfo));
> dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
> + qinfo->queue_state = dev->data->tx_queue_state[queue_id];
>
> return 0;
> }
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index efda313..4f0b1b2 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -1582,6 +1582,13 @@ struct rte_eth_dev_info {
> };
>
> /**
> + * RX/TX queue states
> + */
> +#define RTE_ETH_QUEUE_STATE_STOPPED 0
> +#define RTE_ETH_QUEUE_STATE_STARTED 1
> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> +
> +/**
> * Ethernet device RX queue information structure.
> * Used to retrieve information about configured queue.
> */
> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
> uint8_t scattered_rx; /**< scattered packets RX supported. */
> uint16_t nb_desc; /**< configured number of RXDs. */
> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
I think comment has to state that possible values are one of
RTE_ETH_QUEUE_STATE_*.
About previous discussion about new field in this struct vs new API function,
I still think new function will be a bit cleaner, but could live with both.
> + uint8_t queue_state;
If we'll go with new 1B field, then as Stephen pointed,
it is probably worth to fill the hole between scattered_rx
and nb_desc with this new filed.
> } __rte_cache_min_aligned;
>
> /**
> @@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info {
> struct rte_eth_txq_info {
> struct rte_eth_txconf conf; /**< queue config parameters. */
> uint16_t nb_desc; /**< configured number of TXDs. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
Same about comment here.
> + uint8_t queue_state;
> } __rte_cache_min_aligned;
>
> /* Generic Burst mode flag definition, values can be ORed. */
> --
> 2.7.4
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-03-31 8:52 0% ` Tom Barbette
@ 2021-04-06 13:13 0% ` Morten Brørup
2021-04-07 0:47 0% ` Honnappa Nagarahalli
0 siblings, 1 reply; 200+ results
From: Morten Brørup @ 2021-04-06 13:13 UTC (permalink / raw)
To: Tom Barbette, Honnappa Nagarahalli, dev
Cc: nd, Alireza Farshin, Van Haaren, Harry, Bruce Richardson
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tom Barbette
> Sent: Wednesday, March 31, 2021 10:53 AM
>
> Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> > - Ability to tune the values of #defines
> > * Few prominent points discussed
> > - This will result in #ifdefs in the code (for ex: in testpmd)
> > - One option is for all the PMDs to document their configurable
> #defines in PMD specific header files. Having these distributed is much
> easier to search.
> > - Can some of the existing #defines be converted to runtime
> configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> > * Bruce to think about converting the doc to a blog or an email
> on the mailing list. But soliciting feedback is most important.
>
> One alternative path worth looking at is to encourage the use of LTO,
> and modify APIs so the configuration can be provided at linking time,
> and propagated by the compiler.
>
> E.g. one can define rte_max_lcore as a weak constant symbol, equal to
> 128. At linking time the user may provide a rte_max_lcore that is more
> tailored, and still, dynamic arrays[rte_max_lcore] will be allocatable
> on the .bss section, avoiding an indirection. The compiler will be able
> to optimize loops etc which is impossible with pure runtime
> configuration.
>
> In packetmill.io we actually pushed this to the next level where the
> driver can completely change its behavior without recompiling DPDK
> itself and spawning ifdefs everywhere.
>
> However the price is the slowiness of LTO...
>
> My 2 cents.
>
> Tom
>
If we are moving away from Compile Time parameters, I certainly prefer Tom's suggestion of Link Time parameters, rather than Run Time parameters.
This might also provide a middle ground for optimizations where Compile Time parameters are considered unacceptable by the DPDK community. I'm thinking about something along the lines of the "constant size" rte_event array presented at the 2020 Userspace Summit by Harry (https://static.sched.com/hosted_files/dpdkuserspace2020/d3/dpdk_userspace_20_api_performance_hvh.pdf). Taking this thinking even further out, a Link Time parameter could perhaps replace the nb_pkts parameter in on optimized rte_eth_rx_burst() function.
Med venlig hilsen / kind regards
- Morten Brørup
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v3 1/2] pci: rename catch-all ID
@ 2021-04-06 10:28 4% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-04-06 10:28 UTC (permalink / raw)
To: dev
Cc: Parav Pandit, David Marchand, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko, Gaetan Rivet
The name of the constant PCI_ANY_ID was missing RTE_ prefix.
It is renamed, and the old name becomes a deprecated alias.
While renaming, the duplicate definitions in rte_bus_pci.h
are removed to keep only those in rte_pci.h.
Note: rte_pci.h is included in rte_bus_pci.h
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
---
doc/guides/rel_notes/release_21_05.rst | 3 +++
drivers/bus/pci/pci_common.c | 8 ++++----
drivers/bus/pci/rte_bus_pci.h | 12 ++++--------
drivers/common/mlx5/mlx5_common_pci.c | 8 ++++----
lib/librte_pci/rte_pci.h | 12 +++++++-----
5 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 19cec62c73..61b6575949 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -159,6 +159,9 @@ API Changes
from ``rte_thread_tls_*`` to ``rte_thread_*`` to avoid naming redundancy
and confusion with the transport layer security term.
+* pci: The value ``PCI_ANY_ID`` is marked as deprecated,
+ and can be replaced with ``RTE_PCI_ANY_ID``.
+
ABI Changes
-----------
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 9b8d769287..ee7f966358 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -133,18 +133,18 @@ rte_pci_match(const struct rte_pci_driver *pci_drv,
id_table++) {
/* check if device's identifiers match the driver's ones */
if (id_table->vendor_id != pci_dev->id.vendor_id &&
- id_table->vendor_id != PCI_ANY_ID)
+ id_table->vendor_id != RTE_PCI_ANY_ID)
continue;
if (id_table->device_id != pci_dev->id.device_id &&
- id_table->device_id != PCI_ANY_ID)
+ id_table->device_id != RTE_PCI_ANY_ID)
continue;
if (id_table->subsystem_vendor_id !=
pci_dev->id.subsystem_vendor_id &&
- id_table->subsystem_vendor_id != PCI_ANY_ID)
+ id_table->subsystem_vendor_id != RTE_PCI_ANY_ID)
continue;
if (id_table->subsystem_device_id !=
pci_dev->id.subsystem_device_id &&
- id_table->subsystem_device_id != PCI_ANY_ID)
+ id_table->subsystem_device_id != RTE_PCI_ANY_ID)
continue;
if (id_table->class_id != pci_dev->id.class_id &&
id_table->class_id != RTE_CLASS_ANY_ID)
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index 876abddefb..3a092bc6d5 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -91,26 +91,22 @@ struct rte_pci_device {
#define RTE_ETH_DEV_TO_PCI(eth_dev) RTE_DEV_TO_PCI((eth_dev)->device)
-/** Any PCI device identifier (vendor, device, ...) */
-#define PCI_ANY_ID (0xffff)
-#define RTE_CLASS_ANY_ID (0xffffff)
-
#ifdef __cplusplus
/** C++ macro used to help building up tables of device IDs */
#define RTE_PCI_DEVICE(vend, dev) \
RTE_CLASS_ANY_ID, \
(vend), \
(dev), \
- PCI_ANY_ID, \
- PCI_ANY_ID
+ RTE_PCI_ANY_ID, \
+ RTE_PCI_ANY_ID
#else
/** Macro used to help building up tables of device IDs */
#define RTE_PCI_DEVICE(vend, dev) \
.class_id = RTE_CLASS_ANY_ID, \
.vendor_id = (vend), \
.device_id = (dev), \
- .subsystem_vendor_id = PCI_ANY_ID, \
- .subsystem_device_id = PCI_ANY_ID
+ .subsystem_vendor_id = RTE_PCI_ANY_ID, \
+ .subsystem_device_id = RTE_PCI_ANY_ID
#endif
/**
diff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c
index a7f541a90c..9689ca86fc 100644
--- a/drivers/common/mlx5/mlx5_common_pci.c
+++ b/drivers/common/mlx5/mlx5_common_pci.c
@@ -142,18 +142,18 @@ mlx5_bus_match(const struct mlx5_pci_driver *drv,
id_table++) {
/* Check if device's ids match the class driver's ids. */
if (id_table->vendor_id != pci_dev->id.vendor_id &&
- id_table->vendor_id != PCI_ANY_ID)
+ id_table->vendor_id != RTE_PCI_ANY_ID)
continue;
if (id_table->device_id != pci_dev->id.device_id &&
- id_table->device_id != PCI_ANY_ID)
+ id_table->device_id != RTE_PCI_ANY_ID)
continue;
if (id_table->subsystem_vendor_id !=
pci_dev->id.subsystem_vendor_id &&
- id_table->subsystem_vendor_id != PCI_ANY_ID)
+ id_table->subsystem_vendor_id != RTE_PCI_ANY_ID)
continue;
if (id_table->subsystem_device_id !=
pci_dev->id.subsystem_device_id &&
- id_table->subsystem_device_id != PCI_ANY_ID)
+ id_table->subsystem_device_id != RTE_PCI_ANY_ID)
continue;
if (id_table->class_id != pci_dev->id.class_id &&
id_table->class_id != RTE_CLASS_ANY_ID)
diff --git a/lib/librte_pci/rte_pci.h b/lib/librte_pci/rte_pci.h
index f89c7dbbea..a8f8e404a9 100644
--- a/lib/librte_pci/rte_pci.h
+++ b/lib/librte_pci/rte_pci.h
@@ -78,10 +78,10 @@ extern "C" {
*/
struct rte_pci_id {
uint32_t class_id; /**< Class ID or RTE_CLASS_ANY_ID. */
- uint16_t vendor_id; /**< Vendor ID or PCI_ANY_ID. */
- uint16_t device_id; /**< Device ID or PCI_ANY_ID. */
- uint16_t subsystem_vendor_id; /**< Subsystem vendor ID or PCI_ANY_ID. */
- uint16_t subsystem_device_id; /**< Subsystem device ID or PCI_ANY_ID. */
+ uint16_t vendor_id; /**< Vendor ID or RTE_PCI_ANY_ID. */
+ uint16_t device_id; /**< Device ID or RTE_PCI_ANY_ID. */
+ uint16_t subsystem_vendor_id; /**< Subsystem vendor ID or RTE_PCI_ANY_ID. */
+ uint16_t subsystem_device_id; /**< Subsystem device ID or RTE_PCI_ANY_ID. */
};
/**
@@ -95,7 +95,9 @@ struct rte_pci_addr {
};
/** Any PCI device identifier (vendor, device, ...) */
-#define PCI_ANY_ID (0xffff)
+#define RTE_PCI_ANY_ID (0xffff)
+/** @deprecated Replaced with RTE_PCI_ANY_ID */
+#define PCI_ANY_ID RTE_DEPRECATED(PCI_ANY_ID) RTE_PCI_ANY_ID
#define RTE_CLASS_ANY_ID (0xffffff)
/**
--
2.31.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
@ 2021-04-06 0:49 0% ` oulijun
2021-04-06 14:02 0% ` Ananyev, Konstantin
2021-04-15 2:40 8% ` [dpdk-dev] [PATCH V3] " Lijun Ou
2 siblings, 1 reply; 200+ results
From: oulijun @ 2021-04-06 0:49 UTC (permalink / raw)
To: dev, Thomas Monjalon, Ferruh Yigit
Hi, all,
any comments for this patch?
Hope for your reply.
Thanks
在 2021/3/25 19:09, Lijun Ou 写道:
> Currently, upper-layer application could get queue state only
> through pointers such as dev->data->tx_queue_state[queue_id],
> this is not the recommended way to access it. So this patch
> add get queue state when call rte_eth_rx_queue_info_get and
> rte_eth_tx_queue_info_get API.
>
> Note: The hairpin queue is not supported with above
> rte_eth_*x_queue_info_get, so the queue state could be
> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> it could be ABI compatible.
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> ---
> V1->V2:
> - move queue state defines to public file
> ---
> doc/guides/rel_notes/release_21_05.rst | 6 ++++++
> lib/librte_ethdev/ethdev_driver.h | 7 -------
> lib/librte_ethdev/rte_ethdev.c | 3 +++
> lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++
> 4 files changed, 20 insertions(+), 7 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
> index 22aa80a..503daf9 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -164,6 +164,12 @@ ABI Changes
>
> * No ABI change that would break compatibility with 20.11.
>
> +* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
> + to provide indicated rxq queue state.
> +
> +* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
> + to provide indicated txq queue state.
> +
>
> Known Issues
> ------------
> diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
> index cdd4b43..ec5a17d 100644
> --- a/lib/librte_ethdev/ethdev_driver.h
> +++ b/lib/librte_ethdev/ethdev_driver.h
> @@ -970,13 +970,6 @@ struct eth_dev_ops {
> };
>
> /**
> - * RX/TX queue states
> - */
> -#define RTE_ETH_QUEUE_STATE_STOPPED 0
> -#define RTE_ETH_QUEUE_STATE_STARTED 1
> -#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> -
> -/**
> * @internal
> * Check if the selected Rx queue is hairpin queue.
> *
> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 3059aa5..fbd10b2 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>
> memset(qinfo, 0, sizeof(*qinfo));
> dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
> + qinfo->queue_state = dev->data->rx_queue_state[queue_id];
> +
> return 0;
> }
>
> @@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
>
> memset(qinfo, 0, sizeof(*qinfo));
> dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
> + qinfo->queue_state = dev->data->tx_queue_state[queue_id];
>
> return 0;
> }
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index efda313..4f0b1b2 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -1582,6 +1582,13 @@ struct rte_eth_dev_info {
> };
>
> /**
> + * RX/TX queue states
> + */
> +#define RTE_ETH_QUEUE_STATE_STOPPED 0
> +#define RTE_ETH_QUEUE_STATE_STARTED 1
> +#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> +
> +/**
> * Ethernet device RX queue information structure.
> * Used to retrieve information about configured queue.
> */
> @@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
> uint8_t scattered_rx; /**< scattered packets RX supported. */
> uint16_t nb_desc; /**< configured number of RXDs. */
> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
> + uint8_t queue_state;
> } __rte_cache_min_aligned;
>
> /**
> @@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info {
> struct rte_eth_txq_info {
> struct rte_eth_txconf conf; /**< queue config parameters. */
> uint16_t nb_desc; /**< configured number of TXDs. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
> + uint8_t queue_state;
> } __rte_cache_min_aligned;
>
> /* Generic Burst mode flag definition, values can be ORed. */
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v10 0/8] Introduce event vectorization
2021-03-31 9:29 4% ` [dpdk-dev] [PATCH v10 " pbhagavatula
@ 2021-04-03 9:44 0% ` Jerin Jacob
0 siblings, 0 replies; 200+ results
From: Jerin Jacob @ 2021-04-03 9:44 UTC (permalink / raw)
To: Pavan Nikhilesh
Cc: Jerin Jacob, Jayatheerthan, Jay, Erik Gabriel Carrillo, Gujjar,
Abhinandan S, McDaniel, Timothy, Hemant Agrawal, Van Haaren,
Harry, Mattias Rönnblom, Liang Ma, dpdk-dev
On Wed, Mar 31, 2021 at 3:00 PM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> In traditional event programming model, events are identified by a
> flow-id and a uintptr_t. The flow-id uniquely identifies a given event
> and determines the order of scheduling based on schedule type, the
> uintptr_t holds a single object.
>
> Event devices also support burst mode with configurable dequeue depth,
> i.e. each dequeue call would return multiple events and each event
> might be at a different stage of the pipeline.
> Having a burst of events belonging to different stages in a dequeue
> burst is not only difficult to vectorize but also increases the scheduler
> overhead and application overhead of pipelining events further.
> Using event vectors we see a performance gain of ~742.3% as shown in [1].
>
> By introducing event vectorization, each event will be capable of holding
> multiple uintptr_t of the same flow thereby allowing applications
> to vectorize their pipeline and reduce the complexity of pipelining
> events across multiple stages. This also reduces the complexity of handling
> enqueue and dequeue on an event device.
>
> Since event devices are transparent to the events they are scheduling
> so the event producers such as eth_rx_adapter, crypto_adapter , etc..
> are responsible for vectorizing the buffers of the same flow into a single
> event.
>
> The series also breaks ABI in the patch [8/8] which is targetted to the
> v21.11 release.
>
> The dpdk-test-eventdev application has been updated with options to test
> multiple vector sizes and timeouts.
>
> [1]
> As for performance improvement, with a ARM Cortex-A72 equivalent processer,
> software event device (--vdev=event_sw0), single worker core, single stage
> and using one service core for Rx adapter, Tx adapter, Scheduling.
>
> Without this patchset applied:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 5.071 mpps
>
> With the patchset applied and Without event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 5.123 mpps
>
> With event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
> --vector_size 256
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 42.715 mpps
>
> Having dedicated service cores for each Rx queues and tweaking the vector,
> dequeue burst size would further improve performance.
>
> API usage is shown below:
>
> Configuration:
>
> struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
>
> vector_pool = rte_event_vector_pool_create("vector_pool",
> nb_elem, 0, vector_size, socket_id);
>
> rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
> rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
> if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
> vec_conf.vector_sz = vector_size;
> vec_conf.vector_timeout_ns = vector_tmo_nsec;
> vec_conf.vector_mp = vector_pool;
> rte_event_eth_rx_adapter_queue_event_vector_config(id,
> eth_id, -1, &vec_conf);
> }
>
> Fastpath:
>
> num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
> if (!num)
> continue;
>
> if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
> switch (ev.event_type) {
> case RTE_EVENT_TYPE_ETHDEV_VECTOR:
> case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
> struct rte_mbuf **mbufs;
>
> mbufs = ev.vector_ev->mbufs;
> for (i = 0; i < ev.vector_ev->nb_elem; i++)
> //Process mbufs.
> break;
> case ...
> }
> }
> ...
>
Series applied to dpdk-next-net-eventdev/for-main. Thanks
> v10 Changes:
> - Update Rx adapter documentation with flow identifier bitfield format. (Jay)
>
> v9 Changes:
> - Update Rx adapter documentation w.r.t SW event vectorizations. (Jay)
> - Push partial vectors to event device on queue delete. (Jay)
>
> v8 Changes:
> - Fix incorrect shift for vector timeout interval.(Jay)
> - Code reallocation.(Jay)
>
> v7 Changes:
> - More doxygen fixes.(Jay)
> - Reduce code duplication in 4/8.(Jay)
>
> v6 Changes:
> - Make rte_errno sign consistant.(Jay)
> - Gramatical and doxygen fixes. (Jay)
>
> v5 Changes:
> - Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
> - Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
> `rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
> where they are initially defined.(Ray)
> - Multiple gramatical and style fixes.(Jerin)
> - Add missing release notes.(Jerin)
>
> v4 Changes:
> - Fix missing event vector structure in event structure.(Jay)
>
> v3 Changes:
> - Fix unintended formatting changes.
>
> v2 Changes:
> - Multiple gramatical and style fixes.(Jerin)
> - Add parameter to define vector size in power of 2. (Jerin)
> - Redo patch series w/o breaking ABI till the last patch.(David)
> - Add deprication notice to announce ABI break in 21.11.(David)
> - Add vector limits validation to app/test-eventdev.
>
> Pavan Nikhilesh (8):
> eventdev: introduce event vector capability
> eventdev: introduce event vector Rx capability
> eventdev: introduce event vector Tx capability
> eventdev: add Rx adapter event vector support
> eventdev: add Tx adapter event vector support
> app/eventdev: add event vector mode in pipeline test
> doc: announce event Rx adapter config changes
> eventdev: simplify Rx adapter event vector config
>
> app/test-eventdev/evt_common.h | 4 +
> app/test-eventdev/evt_options.c | 52 +++
> app/test-eventdev/evt_options.h | 4 +
> app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
> app/test-eventdev/test_pipeline_common.c | 105 +++++-
> app/test-eventdev/test_pipeline_common.h | 18 +
> app/test-eventdev/test_pipeline_queue.c | 320 +++++++++++++++--
> .../prog_guide/event_ethernet_rx_adapter.rst | 57 +++
> .../prog_guide/event_ethernet_tx_adapter.rst | 12 +
> doc/guides/prog_guide/eventdev.rst | 36 +-
> doc/guides/rel_notes/deprecation.rst | 9 +
> doc/guides/rel_notes/release_21_05.rst | 8 +
> doc/guides/tools/testeventdev.rst | 45 ++-
> lib/librte_eventdev/eventdev_pmd.h | 31 +-
> .../rte_event_eth_rx_adapter.c | 327 +++++++++++++++++-
> .../rte_event_eth_rx_adapter.h | 78 +++++
> .../rte_event_eth_tx_adapter.c | 66 +++-
> lib/librte_eventdev/rte_eventdev.c | 53 ++-
> lib/librte_eventdev/rte_eventdev.h | 114 +++++-
> lib/librte_eventdev/version.map | 4 +
> 20 files changed, 1562 insertions(+), 91 deletions(-)
>
> --
> 2.17.1
>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v6 00/10] eal: Add new API for threading
@ 2021-04-03 1:38 2% ` Narcisa Ana Maria Vasile
0 siblings, 0 replies; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-04-03 1:38 UTC (permalink / raw)
To: dev, thomas, dmitry.kozliuk, khot, navasile, dmitrym, roretzla,
talshn, ocardona
Cc: bruce.richardson, david.marchand, pallavi.kadam
From: Narcisa Vasile <navasile@microsoft.com>
EAL thread API
**Problem Statement**
DPDK currently uses the pthread interface to create and manage threads.
Windows does not support the POSIX thread programming model, so it currently
relies on a header file that hides the Windows calls under
pthread matched interfaces. Given that EAL should isolate the environment
specifics from the applications and libraries and mediate
all the communication with the operating systems, a new EAL interface
is needed for thread management.
**Goals**
* Introduce a generic EAL API for threading support that will remove
the current Windows pthread.h shim.
* Replace references to pthread_* across the DPDK codebase with the new
RTE_THREAD_* API.
* Allow users to choose between using the RTE_THREAD_* API or a
3rd party thread library through a configuration option.
**Design plan**
New API main files:
* rte_thread.h (librte_eal/include)
* rte_thread_types.h (librte_eal/include)
* rte_thread_windows_types.h (librte_eal/windows/include)
* rte_thread.c (librte_eal/windows)
* rte_thread.c (librte_eal/common)
For flexibility, the user is offered the option of either using the RTE_THREAD_* API or
a 3rd party thread library, through a meson flag “use_external_thread_lib”.
By default, this flag is set to FALSE, which means Windows libraries and applications
will use the RTE_THREAD_* API for managing threads.
If compiling on Windows and the “use_external_thread_lib” is *not* set,
the following files will be parsed:
* include/rte_thread.h
* windows/include/rte_thread_windows_types.h
* windows/rte_thread.c
In all other cases, the compilation/parsing includes the following files:
* include/rte_thread.h
* include/rte_thread_types.h
* common/rte_thread.c
**A schematic example of the design**
--------------------------------------------------
lib/librte_eal/include/rte_thread.h
int rte_thread_create();
lib/librte_eal/common/rte_thread.c
int rte_thread_create()
{
return pthread_create();
}
lib/librte_eal/windows/rte_thread.c
int rte_thread_create()
{
return CreateThread();
}
lib/librte_eal/windows/meson.build
if get_option('use_external_thread_lib')
sources += 'librte_eal/common/rte_thread.c'
else
sources += 'librte_eal/windows/rte_thread.c'
endif
-----------------------------------------------------
**Thread attributes**
When or after a thread is created, specific characteristics of the thread
can be adjusted. Given that the thread characteristics that are of interest
for DPDK applications are affinity and priority, the following structure
that represents thread attributes has been defined:
typedef struct
{
enum rte_thread_priority priority;
rte_cpuset_t cpuset;
} rte_thread_attr_t;
The *rte_thread_create()* function can optionally receive an rte_thread_attr_t
object that will cause the thread to be created with the affinity and priority
described by the attributes object. If no rte_thread_attr_t is passed
(parameter is NULL), the default affinity and priority are used.
An rte_thread_attr_t object can also be set to the default values
by calling *rte_thread_attr_init()*.
*Priority* is represented through an enum that currently advertises
two values for priority:
- RTE_THREAD_PRIORITY_NORMAL
- RTE_THREAD_PRIORITY_REALTIME_CRITICAL
The enum can be extended to allow for multiple priority levels.
rte_thread_set_priority - sets the priority of a thread
rte_thread_attr_set_priority - updates an rte_thread_attr_t object
with a new value for priority
The user can choose thread priority through an EAL parameter,
when starting an application. If EAL parameter is not used,
the per-platform default value for thread priority is used.
Otherwise administrator has an option to set one of available options:
--thread-prio normal
--thread-prio realtime
Example:
./dpdk-l2fwd -l 0-3 -n 4 –thread-prio normal -- -q 8 -p ffff
*Affinity* is described by the already known “rte_cpuset_t” type.
rte_thread_attr_set/get_affinity - sets/gets the affinity field in a
rte_thread_attr_t object
rte_thread_set/get_affinity – sets/gets the affinity of a thread
**Errors**
A translation function that maps Windows error codes to errno-style
error codes is provided.
**Future work**
Note that this patchset was focused on introducing new API that will
remove the Windows pthread.h shim. In DPDK, there are still a few references
to pthread_* that were not implemented in the shim.
The long term plan is for EAL to provide full threading support:
* Adding support for conditional variables
* Additional functionality offered by pthread_* (such as pthread_setname_np, etc.)
* Static mutex initializers are not used on Windows. If we must continue
using them, they need to be platform dependent and an implementation will
need to be provided for Windows.
v6:
- improve error-translation function
- call the error translation function in rte_thread_value_get()
v5:
- update cover letter with more details on the priority argument
v4:
- fix function description
- rebase
v3:
- rebase
v2:
- revert changes that break ABI
- break up changes into smaller patches
- fix coding style issues
- fix issues with errors
- fix parameter type in examples/kni.c
Narcisa Vasile (10):
eal: add thread id and simple thread functions
eal: add thread attributes
windows/eal: translate Windows errors to errno-style errors
eal: implement functions for thread affinity management
eal: implement thread priority management functions
eal: add thread lifetime management
eal: implement functions for mutex management
eal: implement functions for thread barrier management
eal: add EAL argument for setting thread priority
Enable the new EAL thread API
app/test/process.h | 6 +-
app/test/test_lcores.c | 16 +-
app/test/test_link_bonding.c | 10 +-
app/test/test_lpm_perf.c | 12 +-
config/meson.build | 4 +
drivers/bus/dpaa/base/qbman/bman_driver.c | 6 +-
drivers/bus/dpaa/base/qbman/dpaa_sys.c | 14 +-
drivers/bus/dpaa/base/qbman/process.c | 6 +-
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 6 +-
drivers/compress/mlx5/mlx5_compress.c | 10 +-
drivers/event/dlb/pf/base/dlb_osdep.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/af_xdp/rte_eth_af_xdp.c | 18 +-
drivers/net/ark/ark_ethdev.c | 4 +-
drivers/net/atlantic/atl_ethdev.c | 4 +-
drivers/net/atlantic/atl_types.h | 5 +-
.../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 24 +-
drivers/net/axgbe/axgbe_dev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.h | 8 +-
drivers/net/axgbe/axgbe_i2c.c | 4 +-
drivers/net/axgbe/axgbe_mdio.c | 8 +-
drivers/net/axgbe/axgbe_phy_impl.c | 6 +-
drivers/net/bnxt/bnxt.h | 16 +-
drivers/net/bnxt/bnxt_cpr.c | 4 +-
drivers/net/bnxt/bnxt_ethdev.c | 52 +-
drivers/net/bnxt/bnxt_irq.c | 8 +-
drivers/net/bnxt/bnxt_reps.c | 10 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 34 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 4 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 24 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h | 2 +-
drivers/net/ena/base/ena_plat_dpdk.h | 8 +-
drivers/net/enic/enic.h | 2 +-
drivers/net/hns3/hns3_ethdev.h | 2 +-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_mbx.c | 2 +-
drivers/net/ice/ice_dcf_parent.c | 4 +-
drivers/net/ipn3ke/ipn3ke_representor.c | 6 +-
drivers/net/ixgbe/ixgbe_ethdev.c | 2 +-
drivers/net/ixgbe/ixgbe_ethdev.h | 2 +-
drivers/net/kni/rte_eth_kni.c | 6 +-
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.c | 20 +-
drivers/net/mlx5/mlx5.h | 2 +-
drivers/net/mlx5/mlx5_txpp.c | 8 +-
drivers/net/mlx5/windows/mlx5_flow_os.c | 10 +-
drivers/net/mlx5/windows/mlx5_os.c | 2 +-
drivers/net/qede/base/bcm_osal.h | 8 +-
drivers/net/vhost/rte_eth_vhost.c | 22 +-
.../net/virtio/virtio_user/virtio_user_dev.c | 30 +-
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 8 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 36 +-
drivers/vdpa/mlx5/mlx5_vdpa.c | 24 +-
drivers/vdpa/mlx5/mlx5_vdpa.h | 6 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 67 +--
examples/kni/main.c | 6 +-
examples/vhost/main.c | 2 +-
examples/vhost_blk/vhost_blk.c | 10 +-
lib/librte_eal/common/eal_common_options.c | 36 +-
lib/librte_eal/common/eal_common_proc.c | 48 +-
lib/librte_eal/common/eal_common_thread.c | 43 +-
lib/librte_eal/common/eal_common_trace.c | 2 +-
lib/librte_eal/common/eal_internal_cfg.h | 2 +
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_private.h | 2 +-
lib/librte_eal/common/malloc_mp.c | 32 +-
lib/librte_eal/common/meson.build | 1 +
lib/librte_eal/common/rte_thread.c | 342 +++++++++++
lib/librte_eal/freebsd/eal.c | 37 +-
lib/librte_eal/freebsd/eal_alarm.c | 12 +-
lib/librte_eal/freebsd/eal_interrupts.c | 4 +-
lib/librte_eal/freebsd/eal_thread.c | 8 +-
lib/librte_eal/include/meson.build | 1 +
lib/librte_eal/include/rte_lcore.h | 8 +-
lib/librte_eal/include/rte_per_lcore.h | 2 -
lib/librte_eal/include/rte_thread.h | 342 ++++++++++-
lib/librte_eal/include/rte_thread_types.h | 20 +
lib/librte_eal/linux/eal.c | 42 +-
lib/librte_eal/linux/eal_alarm.c | 10 +-
lib/librte_eal/linux/eal_interrupts.c | 4 +-
lib/librte_eal/linux/eal_thread.c | 8 +-
lib/librte_eal/linux/eal_timer.c | 2 +-
lib/librte_eal/rte_eal_exports.def | 20 +
lib/librte_eal/unix/meson.build | 1 -
lib/librte_eal/unix/rte_thread.c | 92 ---
lib/librte_eal/version.map | 21 +
lib/librte_eal/windows/eal.c | 26 +-
lib/librte_eal/windows/eal_interrupts.c | 6 +-
lib/librte_eal/windows/eal_lcore.c | 170 ++++--
lib/librte_eal/windows/eal_thread.c | 24 +-
lib/librte_eal/windows/eal_windows.h | 20 +-
lib/librte_eal/windows/include/meson.build | 1 +
lib/librte_eal/windows/include/pthread.h | 186 ------
.../include/rte_windows_thread_types.h | 19 +
lib/librte_eal/windows/include/sched.h | 2 +-
lib/librte_eal/windows/meson.build | 7 +-
lib/librte_eal/windows/rte_thread.c | 532 +++++++++++++++++-
lib/librte_ethdev/rte_ethdev.c | 4 +-
lib/librte_ethdev/rte_ethdev_core.h | 3 +-
lib/librte_ethdev/rte_flow.c | 4 +-
.../rte_event_eth_rx_adapter.c | 6 +-
lib/librte_vhost/fd_man.c | 40 +-
lib/librte_vhost/fd_man.h | 6 +-
lib/librte_vhost/socket.c | 124 ++--
lib/librte_vhost/vhost.c | 10 +-
meson_options.txt | 2 +
108 files changed, 2048 insertions(+), 934 deletions(-)
create mode 100644 lib/librte_eal/common/rte_thread.c
create mode 100644 lib/librte_eal/include/rte_thread_types.h
delete mode 100644 lib/librte_eal/unix/rte_thread.c
delete mode 100644 lib/librte_eal/windows/include/pthread.h
create mode 100644 lib/librte_eal/windows/include/rte_windows_thread_types.h
--
2.30.0.vfs.0.2
^ permalink raw reply [relevance 2%]
* [dpdk-dev] [RFC PATCH 13/14] lib: remove librte_ prefix from directory names
@ 2021-04-01 11:50 1% ` Bruce Richardson
0 siblings, 0 replies; 200+ results
From: Bruce Richardson @ 2021-04-01 11:50 UTC (permalink / raw)
To: dev; +Cc: thomas, david.marchand, bluca, Bruce Richardson
There is no reason for the DPDK libraries to all have 'librte_' prefix on
the directory names. This prefix makes the directory names longer and also
makes it awkward to add features referring to individual libraries in the
build - should the lib names be specified with or without the prefix.
Therefore, we can just remove the library prefix and use the library's
unique name as the directory name, i.e. 'eal' rather than 'librte_eal'
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
MAINTAINERS | 212 +++++++++---------
app/test/test_eal_fs.c | 2 +-
app/test/test_memzone.c | 2 +-
app/test/test_telemetry_json.c | 2 +-
config/arm/meson.build | 2 +-
devtools/build-tags.sh | 14 +-
doc/api/doxy-api.conf.in | 104 ++++-----
doc/guides/contributing/abi_versioning.rst | 12 +-
doc/guides/contributing/coding_style.rst | 4 +-
doc/guides/contributing/documentation.rst | 10 +-
doc/guides/prog_guide/event_timer_adapter.rst | 2 +-
doc/guides/prog_guide/qos_framework.rst | 4 +-
doc/guides/prog_guide/rawdev.rst | 2 +-
doc/guides/rel_notes/known_issues.rst | 2 +-
drivers/common/mlx5/linux/meson.build | 2 +-
drivers/crypto/virtio/meson.build | 2 +-
kernel/linux/kni/meson.build | 4 +-
lib/{librte_acl => acl}/acl.h | 0
lib/{librte_acl => acl}/acl_bld.c | 0
lib/{librte_acl => acl}/acl_gen.c | 0
lib/{librte_acl => acl}/acl_run.h | 0
lib/{librte_acl => acl}/acl_run_altivec.c | 0
lib/{librte_acl => acl}/acl_run_altivec.h | 0
lib/{librte_acl => acl}/acl_run_avx2.c | 0
lib/{librte_acl => acl}/acl_run_avx2.h | 0
lib/{librte_acl => acl}/acl_run_avx512.c | 0
.../acl_run_avx512_common.h | 0
lib/{librte_acl => acl}/acl_run_avx512x16.h | 0
lib/{librte_acl => acl}/acl_run_avx512x8.h | 0
lib/{librte_acl => acl}/acl_run_neon.c | 0
lib/{librte_acl => acl}/acl_run_neon.h | 0
lib/{librte_acl => acl}/acl_run_scalar.c | 0
lib/{librte_acl => acl}/acl_run_sse.c | 0
lib/{librte_acl => acl}/acl_run_sse.h | 0
lib/{librte_acl => acl}/acl_vect.h | 0
lib/{librte_acl => acl}/meson.build | 0
lib/{librte_acl => acl}/rte_acl.c | 0
lib/{librte_acl => acl}/rte_acl.h | 0
lib/{librte_acl => acl}/rte_acl_osdep.h | 0
lib/{librte_acl => acl}/tb_mem.c | 0
lib/{librte_acl => acl}/tb_mem.h | 0
lib/{librte_acl => acl}/version.map | 0
lib/{librte_bbdev => bbdev}/meson.build | 0
lib/{librte_bbdev => bbdev}/rte_bbdev.c | 0
lib/{librte_bbdev => bbdev}/rte_bbdev.h | 0
lib/{librte_bbdev => bbdev}/rte_bbdev_op.h | 0
lib/{librte_bbdev => bbdev}/rte_bbdev_pmd.h | 0
lib/{librte_bbdev => bbdev}/version.map | 0
.../meson.build | 0
.../rte_bitrate.c | 0
.../rte_bitrate.h | 0
.../version.map | 0
lib/{librte_bpf => bpf}/bpf.c | 0
lib/{librte_bpf => bpf}/bpf_def.h | 0
lib/{librte_bpf => bpf}/bpf_exec.c | 0
lib/{librte_bpf => bpf}/bpf_impl.h | 0
lib/{librte_bpf => bpf}/bpf_jit_arm64.c | 0
lib/{librte_bpf => bpf}/bpf_jit_x86.c | 0
lib/{librte_bpf => bpf}/bpf_load.c | 0
lib/{librte_bpf => bpf}/bpf_load_elf.c | 0
lib/{librte_bpf => bpf}/bpf_pkt.c | 0
lib/{librte_bpf => bpf}/bpf_validate.c | 0
lib/{librte_bpf => bpf}/meson.build | 0
lib/{librte_bpf => bpf}/rte_bpf.h | 0
lib/{librte_bpf => bpf}/rte_bpf_ethdev.h | 0
lib/{librte_bpf => bpf}/version.map | 0
lib/{librte_cfgfile => cfgfile}/meson.build | 0
lib/{librte_cfgfile => cfgfile}/rte_cfgfile.c | 0
lib/{librte_cfgfile => cfgfile}/rte_cfgfile.h | 0
lib/{librte_cfgfile => cfgfile}/version.map | 0
lib/{librte_cmdline => cmdline}/cmdline.c | 0
lib/{librte_cmdline => cmdline}/cmdline.h | 0
.../cmdline_cirbuf.c | 0
.../cmdline_cirbuf.h | 0
.../cmdline_os_unix.c | 0
.../cmdline_os_windows.c | 0
.../cmdline_parse.c | 0
.../cmdline_parse.h | 0
.../cmdline_parse_etheraddr.c | 0
.../cmdline_parse_etheraddr.h | 0
.../cmdline_parse_ipaddr.c | 0
.../cmdline_parse_ipaddr.h | 0
.../cmdline_parse_num.c | 0
.../cmdline_parse_num.h | 0
.../cmdline_parse_portlist.c | 0
.../cmdline_parse_portlist.h | 0
.../cmdline_parse_string.c | 0
.../cmdline_parse_string.h | 0
.../cmdline_private.h | 0
.../cmdline_rdline.c | 0
.../cmdline_rdline.h | 0
.../cmdline_socket.c | 0
.../cmdline_socket.h | 0
.../cmdline_vt100.c | 0
.../cmdline_vt100.h | 0
lib/{librte_cmdline => cmdline}/meson.build | 0
lib/{librte_cmdline => cmdline}/version.map | 0
.../meson.build | 0
.../rte_comp.c | 0
.../rte_comp.h | 0
.../rte_compressdev.c | 0
.../rte_compressdev.h | 0
.../rte_compressdev_internal.h | 0
.../rte_compressdev_pmd.c | 0
.../rte_compressdev_pmd.h | 0
.../version.map | 0
.../cryptodev_trace_points.c | 0
.../meson.build | 0
.../rte_crypto.h | 0
.../rte_crypto_asym.h | 0
.../rte_crypto_sym.h | 0
.../rte_cryptodev.c | 0
.../rte_cryptodev.h | 0
.../rte_cryptodev_pmd.c | 0
.../rte_cryptodev_pmd.h | 0
.../rte_cryptodev_trace.h | 0
.../rte_cryptodev_trace_fp.h | 0
.../version.map | 0
.../distributor_private.h | 0
.../meson.build | 0
.../rte_distributor.c | 0
.../rte_distributor.h | 0
.../rte_distributor_match_generic.c | 0
.../rte_distributor_match_sse.c | 0
.../rte_distributor_single.c | 0
.../rte_distributor_single.h | 0
.../version.map | 0
.../arm/include/meson.build | 0
.../arm/include/rte_atomic.h | 0
.../arm/include/rte_atomic_32.h | 0
.../arm/include/rte_atomic_64.h | 0
.../arm/include/rte_byteorder.h | 0
.../arm/include/rte_cpuflags.h | 0
.../arm/include/rte_cpuflags_32.h | 0
.../arm/include/rte_cpuflags_64.h | 0
.../arm/include/rte_cycles.h | 0
.../arm/include/rte_cycles_32.h | 0
.../arm/include/rte_cycles_64.h | 0
lib/{librte_eal => eal}/arm/include/rte_io.h | 0
.../arm/include/rte_io_64.h | 0
.../arm/include/rte_mcslock.h | 0
.../arm/include/rte_memcpy.h | 0
.../arm/include/rte_memcpy_32.h | 0
.../arm/include/rte_memcpy_64.h | 0
.../arm/include/rte_pause.h | 0
.../arm/include/rte_pause_32.h | 0
.../arm/include/rte_pause_64.h | 0
.../arm/include/rte_power_intrinsics.h | 0
.../arm/include/rte_prefetch.h | 0
.../arm/include/rte_prefetch_32.h | 0
.../arm/include/rte_prefetch_64.h | 0
.../arm/include/rte_rwlock.h | 0
.../arm/include/rte_spinlock.h | 0
.../arm/include/rte_ticketlock.h | 0
.../arm/include/rte_vect.h | 0
lib/{librte_eal => eal}/arm/meson.build | 0
lib/{librte_eal => eal}/arm/rte_cpuflags.c | 0
lib/{librte_eal => eal}/arm/rte_cycles.c | 0
lib/{librte_eal => eal}/arm/rte_hypervisor.c | 0
.../arm/rte_power_intrinsics.c | 0
.../common/eal_common_bus.c | 0
.../common/eal_common_class.c | 0
.../common/eal_common_config.c | 0
.../common/eal_common_cpuflags.c | 0
.../common/eal_common_debug.c | 0
.../common/eal_common_dev.c | 0
.../common/eal_common_devargs.c | 0
.../common/eal_common_dynmem.c | 0
.../common/eal_common_errno.c | 0
.../common/eal_common_fbarray.c | 0
.../common/eal_common_hexdump.c | 0
.../common/eal_common_hypervisor.c | 0
.../common/eal_common_launch.c | 0
.../common/eal_common_lcore.c | 0
.../common/eal_common_log.c | 0
.../common/eal_common_mcfg.c | 0
.../common/eal_common_memalloc.c | 0
.../common/eal_common_memory.c | 0
.../common/eal_common_memzone.c | 0
.../common/eal_common_options.c | 0
.../common/eal_common_proc.c | 0
.../common/eal_common_string_fns.c | 0
.../common/eal_common_tailqs.c | 0
.../common/eal_common_thread.c | 0
.../common/eal_common_timer.c | 0
.../common/eal_common_trace.c | 0
.../common/eal_common_trace_ctf.c | 0
.../common/eal_common_trace_points.c | 0
.../common/eal_common_trace_utils.c | 0
.../common/eal_common_uuid.c | 0
.../common/eal_filesystem.h | 0
.../common/eal_hugepages.h | 0
.../common/eal_internal_cfg.h | 0
lib/{librte_eal => eal}/common/eal_memalloc.h | 0
lib/{librte_eal => eal}/common/eal_memcfg.h | 0
lib/{librte_eal => eal}/common/eal_options.h | 0
lib/{librte_eal => eal}/common/eal_private.h | 0
lib/{librte_eal => eal}/common/eal_thread.h | 0
lib/{librte_eal => eal}/common/eal_trace.h | 0
lib/{librte_eal => eal}/common/hotplug_mp.c | 0
lib/{librte_eal => eal}/common/hotplug_mp.h | 0
lib/{librte_eal => eal}/common/malloc_elem.c | 0
lib/{librte_eal => eal}/common/malloc_elem.h | 0
lib/{librte_eal => eal}/common/malloc_heap.c | 0
lib/{librte_eal => eal}/common/malloc_heap.h | 0
lib/{librte_eal => eal}/common/malloc_mp.c | 0
lib/{librte_eal => eal}/common/malloc_mp.h | 0
lib/{librte_eal => eal}/common/meson.build | 0
.../common/rte_keepalive.c | 0
lib/{librte_eal => eal}/common/rte_malloc.c | 0
lib/{librte_eal => eal}/common/rte_random.c | 0
.../common/rte_reciprocal.c | 0
lib/{librte_eal => eal}/common/rte_service.c | 0
lib/{librte_eal => eal}/common/rte_version.c | 0
lib/{librte_eal => eal}/freebsd/eal.c | 0
lib/{librte_eal => eal}/freebsd/eal_alarm.c | 0
.../freebsd/eal_alarm_private.h | 0
.../freebsd/eal_cpuflags.c | 0
lib/{librte_eal => eal}/freebsd/eal_debug.c | 0
lib/{librte_eal => eal}/freebsd/eal_dev.c | 0
.../freebsd/eal_hugepage_info.c | 0
.../freebsd/eal_interrupts.c | 0
lib/{librte_eal => eal}/freebsd/eal_lcore.c | 0
.../freebsd/eal_memalloc.c | 0
lib/{librte_eal => eal}/freebsd/eal_memory.c | 0
lib/{librte_eal => eal}/freebsd/eal_thread.c | 0
lib/{librte_eal => eal}/freebsd/eal_timer.c | 0
.../freebsd/include/meson.build | 0
.../freebsd/include/rte_os.h | 0
lib/{librte_eal => eal}/freebsd/meson.build | 0
.../include/generic/rte_atomic.h | 0
.../include/generic/rte_byteorder.h | 0
.../include/generic/rte_cpuflags.h | 0
.../include/generic/rte_cycles.h | 0
.../include/generic/rte_io.h | 0
.../include/generic/rte_mcslock.h | 0
.../include/generic/rte_memcpy.h | 0
.../include/generic/rte_pause.h | 0
.../include/generic/rte_power_intrinsics.h | 0
.../include/generic/rte_prefetch.h | 0
.../include/generic/rte_rwlock.h | 0
.../include/generic/rte_spinlock.h | 0
.../include/generic/rte_ticketlock.h | 0
.../include/generic/rte_vect.h | 0
lib/{librte_eal => eal}/include/meson.build | 0
lib/{librte_eal => eal}/include/rte_alarm.h | 0
lib/{librte_eal => eal}/include/rte_bitmap.h | 0
lib/{librte_eal => eal}/include/rte_bitops.h | 0
.../include/rte_branch_prediction.h | 0
lib/{librte_eal => eal}/include/rte_bus.h | 0
lib/{librte_eal => eal}/include/rte_class.h | 0
lib/{librte_eal => eal}/include/rte_common.h | 0
lib/{librte_eal => eal}/include/rte_compat.h | 0
lib/{librte_eal => eal}/include/rte_debug.h | 0
lib/{librte_eal => eal}/include/rte_dev.h | 0
lib/{librte_eal => eal}/include/rte_devargs.h | 0
lib/{librte_eal => eal}/include/rte_eal.h | 0
.../include/rte_eal_interrupts.h | 0
.../include/rte_eal_memconfig.h | 0
.../include/rte_eal_paging.h | 0
.../include/rte_eal_trace.h | 0
lib/{librte_eal => eal}/include/rte_errno.h | 0
lib/{librte_eal => eal}/include/rte_fbarray.h | 0
.../include/rte_function_versioning.h | 0
lib/{librte_eal => eal}/include/rte_hexdump.h | 0
.../include/rte_hypervisor.h | 0
.../include/rte_interrupts.h | 0
.../include/rte_keepalive.h | 0
lib/{librte_eal => eal}/include/rte_launch.h | 0
lib/{librte_eal => eal}/include/rte_lcore.h | 0
lib/{librte_eal => eal}/include/rte_log.h | 0
lib/{librte_eal => eal}/include/rte_malloc.h | 0
lib/{librte_eal => eal}/include/rte_memory.h | 0
lib/{librte_eal => eal}/include/rte_memzone.h | 0
.../include/rte_pci_dev_feature_defs.h | 0
.../include/rte_pci_dev_features.h | 0
.../include/rte_per_lcore.h | 0
lib/{librte_eal => eal}/include/rte_random.h | 0
.../include/rte_reciprocal.h | 0
lib/{librte_eal => eal}/include/rte_service.h | 0
.../include/rte_service_component.h | 0
.../include/rte_string_fns.h | 0
lib/{librte_eal => eal}/include/rte_tailq.h | 0
lib/{librte_eal => eal}/include/rte_test.h | 0
lib/{librte_eal => eal}/include/rte_thread.h | 0
lib/{librte_eal => eal}/include/rte_time.h | 0
lib/{librte_eal => eal}/include/rte_trace.h | 0
.../include/rte_trace_point.h | 0
.../include/rte_trace_point_register.h | 0
lib/{librte_eal => eal}/include/rte_uuid.h | 0
lib/{librte_eal => eal}/include/rte_version.h | 0
lib/{librte_eal => eal}/include/rte_vfio.h | 0
lib/{librte_eal => eal}/linux/eal.c | 0
lib/{librte_eal => eal}/linux/eal_alarm.c | 0
lib/{librte_eal => eal}/linux/eal_cpuflags.c | 0
lib/{librte_eal => eal}/linux/eal_debug.c | 0
lib/{librte_eal => eal}/linux/eal_dev.c | 0
.../linux/eal_hugepage_info.c | 0
.../linux/eal_interrupts.c | 0
lib/{librte_eal => eal}/linux/eal_lcore.c | 0
lib/{librte_eal => eal}/linux/eal_log.c | 0
lib/{librte_eal => eal}/linux/eal_memalloc.c | 0
lib/{librte_eal => eal}/linux/eal_memory.c | 0
lib/{librte_eal => eal}/linux/eal_thread.c | 0
lib/{librte_eal => eal}/linux/eal_timer.c | 0
lib/{librte_eal => eal}/linux/eal_vfio.c | 0
lib/{librte_eal => eal}/linux/eal_vfio.h | 0
.../linux/eal_vfio_mp_sync.c | 0
.../linux/include/meson.build | 0
.../linux/include/rte_os.h | 0
lib/{librte_eal => eal}/linux/meson.build | 0
lib/{librte_eal => eal}/meson.build | 0
.../ppc/include/meson.build | 0
.../ppc/include/rte_altivec.h | 0
.../ppc/include/rte_atomic.h | 0
.../ppc/include/rte_byteorder.h | 0
.../ppc/include/rte_cpuflags.h | 0
.../ppc/include/rte_cycles.h | 0
lib/{librte_eal => eal}/ppc/include/rte_io.h | 0
.../ppc/include/rte_mcslock.h | 0
.../ppc/include/rte_memcpy.h | 0
.../ppc/include/rte_pause.h | 0
.../ppc/include/rte_power_intrinsics.h | 0
.../ppc/include/rte_prefetch.h | 0
.../ppc/include/rte_rwlock.h | 0
.../ppc/include/rte_spinlock.h | 0
.../ppc/include/rte_ticketlock.h | 0
.../ppc/include/rte_vect.h | 0
lib/{librte_eal => eal}/ppc/meson.build | 0
lib/{librte_eal => eal}/ppc/rte_cpuflags.c | 0
lib/{librte_eal => eal}/ppc/rte_cycles.c | 0
lib/{librte_eal => eal}/ppc/rte_hypervisor.c | 0
.../ppc/rte_power_intrinsics.c | 0
lib/{librte_eal => eal}/rte_eal_exports.def | 0
lib/{librte_eal => eal}/unix/eal_file.c | 0
.../unix/eal_unix_memory.c | 0
lib/{librte_eal => eal}/unix/eal_unix_timer.c | 0
lib/{librte_eal => eal}/unix/meson.build | 0
lib/{librte_eal => eal}/unix/rte_thread.c | 0
lib/{librte_eal => eal}/version.map | 0
lib/{librte_eal => eal}/windows/eal.c | 0
lib/{librte_eal => eal}/windows/eal_alarm.c | 0
lib/{librte_eal => eal}/windows/eal_debug.c | 0
lib/{librte_eal => eal}/windows/eal_file.c | 0
.../windows/eal_hugepages.c | 0
.../windows/eal_interrupts.c | 0
lib/{librte_eal => eal}/windows/eal_lcore.c | 0
lib/{librte_eal => eal}/windows/eal_log.c | 0
.../windows/eal_memalloc.c | 0
lib/{librte_eal => eal}/windows/eal_memory.c | 0
lib/{librte_eal => eal}/windows/eal_mp.c | 0
lib/{librte_eal => eal}/windows/eal_thread.c | 0
lib/{librte_eal => eal}/windows/eal_timer.c | 0
lib/{librte_eal => eal}/windows/eal_windows.h | 0
lib/{librte_eal => eal}/windows/fnmatch.c | 0
lib/{librte_eal => eal}/windows/getopt.c | 0
.../windows/include/arpa/inet.h | 0
.../windows/include/dirent.h | 0
.../windows/include/fnmatch.h | 0
.../windows/include/getopt.h | 0
.../windows/include/meson.build | 0
.../windows/include/netinet/in.h | 0
.../windows/include/netinet/ip.h | 0
.../windows/include/pthread.h | 0
.../windows/include/regex.h | 0
.../windows/include/rte_os.h | 0
.../windows/include/rte_virt2phys.h | 0
.../windows/include/rte_windows.h | 0
.../windows/include/sched.h | 0
.../windows/include/sys/queue.h | 0
.../windows/include/sys/socket.h | 0
.../windows/include/unistd.h | 0
lib/{librte_eal => eal}/windows/meson.build | 0
lib/{librte_eal => eal}/windows/rte_thread.c | 0
.../x86/include/meson.build | 0
.../x86/include/rte_atomic.h | 0
.../x86/include/rte_atomic_32.h | 0
.../x86/include/rte_atomic_64.h | 0
.../x86/include/rte_byteorder.h | 0
.../x86/include/rte_byteorder_32.h | 0
.../x86/include/rte_byteorder_64.h | 0
.../x86/include/rte_cpuflags.h | 0
.../x86/include/rte_cycles.h | 0
lib/{librte_eal => eal}/x86/include/rte_io.h | 0
.../x86/include/rte_mcslock.h | 0
.../x86/include/rte_memcpy.h | 0
.../x86/include/rte_pause.h | 0
.../x86/include/rte_power_intrinsics.h | 0
.../x86/include/rte_prefetch.h | 0
lib/{librte_eal => eal}/x86/include/rte_rtm.h | 0
.../x86/include/rte_rwlock.h | 0
.../x86/include/rte_spinlock.h | 0
.../x86/include/rte_ticketlock.h | 0
.../x86/include/rte_vect.h | 0
lib/{librte_eal => eal}/x86/meson.build | 0
lib/{librte_eal => eal}/x86/rte_cpuflags.c | 0
lib/{librte_eal => eal}/x86/rte_cpuid.h | 0
lib/{librte_eal => eal}/x86/rte_cycles.c | 0
lib/{librte_eal => eal}/x86/rte_hypervisor.c | 0
.../x86/rte_power_intrinsics.c | 0
lib/{librte_eal => eal}/x86/rte_spinlock.c | 0
lib/{librte_efd => efd}/meson.build | 0
lib/{librte_efd => efd}/rte_efd.c | 0
lib/{librte_efd => efd}/rte_efd.h | 0
lib/{librte_efd => efd}/rte_efd_arm64.h | 0
lib/{librte_efd => efd}/rte_efd_x86.h | 0
lib/{librte_efd => efd}/version.map | 0
lib/{librte_ethdev => ethdev}/ethdev_driver.h | 0
lib/{librte_ethdev => ethdev}/ethdev_pci.h | 0
.../ethdev_private.c | 0
.../ethdev_private.h | 0
.../ethdev_profile.c | 0
.../ethdev_profile.h | 0
.../ethdev_trace_points.c | 0
lib/{librte_ethdev => ethdev}/ethdev_vdev.h | 0
lib/{librte_ethdev => ethdev}/meson.build | 0
lib/{librte_ethdev => ethdev}/rte_class_eth.c | 0
lib/{librte_ethdev => ethdev}/rte_dev_info.h | 0
lib/{librte_ethdev => ethdev}/rte_eth_ctrl.h | 0
lib/{librte_ethdev => ethdev}/rte_ethdev.c | 0
lib/{librte_ethdev => ethdev}/rte_ethdev.h | 0
.../rte_ethdev_core.h | 0
.../rte_ethdev_trace.h | 0
.../rte_ethdev_trace_fp.h | 0
lib/{librte_ethdev => ethdev}/rte_flow.c | 0
lib/{librte_ethdev => ethdev}/rte_flow.h | 0
.../rte_flow_driver.h | 0
lib/{librte_ethdev => ethdev}/rte_mtr.c | 0
lib/{librte_ethdev => ethdev}/rte_mtr.h | 0
.../rte_mtr_driver.h | 0
lib/{librte_ethdev => ethdev}/rte_tm.c | 0
lib/{librte_ethdev => ethdev}/rte_tm.h | 0
lib/{librte_ethdev => ethdev}/rte_tm_driver.h | 0
lib/{librte_ethdev => ethdev}/version.map | 0
.../eventdev_pmd.h | 0
.../eventdev_pmd_pci.h | 0
.../eventdev_pmd_vdev.h | 0
.../eventdev_trace_points.c | 0
lib/{librte_eventdev => eventdev}/meson.build | 0
.../rte_event_crypto_adapter.c | 0
.../rte_event_crypto_adapter.h | 0
.../rte_event_eth_rx_adapter.c | 0
.../rte_event_eth_rx_adapter.h | 0
.../rte_event_eth_tx_adapter.c | 0
.../rte_event_eth_tx_adapter.h | 0
.../rte_event_ring.c | 0
.../rte_event_ring.h | 0
.../rte_event_timer_adapter.c | 0
.../rte_event_timer_adapter.h | 0
.../rte_event_timer_adapter_pmd.h | 0
.../rte_eventdev.c | 0
.../rte_eventdev.h | 0
.../rte_eventdev_trace.h | 0
.../rte_eventdev_trace_fp.h | 0
lib/{librte_eventdev => eventdev}/version.map | 0
lib/{librte_fib => fib}/dir24_8.c | 0
lib/{librte_fib => fib}/dir24_8.h | 0
lib/{librte_fib => fib}/dir24_8_avx512.c | 0
lib/{librte_fib => fib}/dir24_8_avx512.h | 0
lib/{librte_fib => fib}/meson.build | 0
lib/{librte_fib => fib}/rte_fib.c | 0
lib/{librte_fib => fib}/rte_fib.h | 0
lib/{librte_fib => fib}/rte_fib6.c | 0
lib/{librte_fib => fib}/rte_fib6.h | 0
lib/{librte_fib => fib}/trie.c | 0
lib/{librte_fib => fib}/trie.h | 0
lib/{librte_fib => fib}/trie_avx512.c | 0
lib/{librte_fib => fib}/trie_avx512.h | 0
lib/{librte_fib => fib}/version.map | 0
.../meson.build | 0
.../rte_flow_classify.c | 0
.../rte_flow_classify.h | 0
.../rte_flow_classify_parse.c | 0
.../rte_flow_classify_parse.h | 0
.../version.map | 0
lib/{librte_graph => graph}/graph.c | 0
lib/{librte_graph => graph}/graph_debug.c | 0
lib/{librte_graph => graph}/graph_ops.c | 0
lib/{librte_graph => graph}/graph_populate.c | 0
lib/{librte_graph => graph}/graph_private.h | 0
lib/{librte_graph => graph}/graph_stats.c | 0
lib/{librte_graph => graph}/meson.build | 0
lib/{librte_graph => graph}/node.c | 0
lib/{librte_graph => graph}/rte_graph.h | 0
.../rte_graph_worker.h | 0
lib/{librte_graph => graph}/version.map | 0
lib/{librte_gro => gro}/gro_tcp4.c | 0
lib/{librte_gro => gro}/gro_tcp4.h | 0
lib/{librte_gro => gro}/gro_udp4.c | 0
lib/{librte_gro => gro}/gro_udp4.h | 0
lib/{librte_gro => gro}/gro_vxlan_tcp4.c | 0
lib/{librte_gro => gro}/gro_vxlan_tcp4.h | 0
lib/{librte_gro => gro}/gro_vxlan_udp4.c | 0
lib/{librte_gro => gro}/gro_vxlan_udp4.h | 0
lib/{librte_gro => gro}/meson.build | 0
lib/{librte_gro => gro}/rte_gro.c | 0
lib/{librte_gro => gro}/rte_gro.h | 0
lib/{librte_gro => gro}/version.map | 0
lib/{librte_gso => gso}/gso_common.c | 0
lib/{librte_gso => gso}/gso_common.h | 0
lib/{librte_gso => gso}/gso_tcp4.c | 0
lib/{librte_gso => gso}/gso_tcp4.h | 0
lib/{librte_gso => gso}/gso_tunnel_tcp4.c | 0
lib/{librte_gso => gso}/gso_tunnel_tcp4.h | 0
lib/{librte_gso => gso}/gso_tunnel_udp4.c | 0
lib/{librte_gso => gso}/gso_tunnel_udp4.h | 0
lib/{librte_gso => gso}/gso_udp4.c | 0
lib/{librte_gso => gso}/gso_udp4.h | 0
lib/{librte_gso => gso}/meson.build | 0
lib/{librte_gso => gso}/rte_gso.c | 0
lib/{librte_gso => gso}/rte_gso.h | 0
lib/{librte_gso => gso}/version.map | 0
lib/{librte_hash => hash}/meson.build | 0
lib/{librte_hash => hash}/rte_cmp_arm64.h | 0
lib/{librte_hash => hash}/rte_cmp_x86.h | 0
lib/{librte_hash => hash}/rte_crc_arm64.h | 0
lib/{librte_hash => hash}/rte_cuckoo_hash.c | 0
lib/{librte_hash => hash}/rte_cuckoo_hash.h | 0
lib/{librte_hash => hash}/rte_fbk_hash.c | 0
lib/{librte_hash => hash}/rte_fbk_hash.h | 0
lib/{librte_hash => hash}/rte_hash.h | 0
lib/{librte_hash => hash}/rte_hash_crc.h | 0
lib/{librte_hash => hash}/rte_jhash.h | 0
lib/{librte_hash => hash}/rte_thash.h | 0
lib/{librte_hash => hash}/version.map | 0
.../ip_frag_common.h | 0
.../ip_frag_internal.c | 0
lib/{librte_ip_frag => ip_frag}/meson.build | 0
lib/{librte_ip_frag => ip_frag}/rte_ip_frag.h | 0
.../rte_ip_frag_common.c | 0
.../rte_ipv4_fragmentation.c | 0
.../rte_ipv4_reassembly.c | 0
.../rte_ipv6_fragmentation.c | 0
.../rte_ipv6_reassembly.c | 0
lib/{librte_ip_frag => ip_frag}/version.map | 0
lib/{librte_ipsec => ipsec}/crypto.h | 0
lib/{librte_ipsec => ipsec}/esp_inb.c | 0
lib/{librte_ipsec => ipsec}/esp_outb.c | 0
lib/{librte_ipsec => ipsec}/iph.h | 0
lib/{librte_ipsec => ipsec}/ipsec_sad.c | 0
lib/{librte_ipsec => ipsec}/ipsec_sqn.h | 0
lib/{librte_ipsec => ipsec}/meson.build | 0
lib/{librte_ipsec => ipsec}/misc.h | 0
lib/{librte_ipsec => ipsec}/pad.h | 0
lib/{librte_ipsec => ipsec}/rte_ipsec.h | 0
lib/{librte_ipsec => ipsec}/rte_ipsec_group.h | 0
lib/{librte_ipsec => ipsec}/rte_ipsec_sa.h | 0
lib/{librte_ipsec => ipsec}/rte_ipsec_sad.h | 0
lib/{librte_ipsec => ipsec}/sa.c | 0
lib/{librte_ipsec => ipsec}/sa.h | 0
lib/{librte_ipsec => ipsec}/ses.c | 0
lib/{librte_ipsec => ipsec}/version.map | 0
lib/{librte_jobstats => jobstats}/meson.build | 0
.../rte_jobstats.c | 0
.../rte_jobstats.h | 0
lib/{librte_jobstats => jobstats}/version.map | 0
lib/{librte_kni => kni}/meson.build | 0
lib/{librte_kni => kni}/rte_kni.c | 0
lib/{librte_kni => kni}/rte_kni.h | 0
lib/{librte_kni => kni}/rte_kni_common.h | 0
lib/{librte_kni => kni}/rte_kni_fifo.h | 0
lib/{librte_kni => kni}/version.map | 0
lib/{librte_kvargs => kvargs}/meson.build | 0
lib/{librte_kvargs => kvargs}/rte_kvargs.c | 0
lib/{librte_kvargs => kvargs}/rte_kvargs.h | 0
lib/{librte_kvargs => kvargs}/version.map | 0
.../meson.build | 0
.../rte_latencystats.c | 0
.../rte_latencystats.h | 0
.../version.map | 0
lib/{librte_lpm => lpm}/meson.build | 0
lib/{librte_lpm => lpm}/rte_lpm.c | 0
lib/{librte_lpm => lpm}/rte_lpm.h | 0
lib/{librte_lpm => lpm}/rte_lpm6.c | 0
lib/{librte_lpm => lpm}/rte_lpm6.h | 0
lib/{librte_lpm => lpm}/rte_lpm_altivec.h | 0
lib/{librte_lpm => lpm}/rte_lpm_neon.h | 0
lib/{librte_lpm => lpm}/rte_lpm_sse.h | 0
lib/{librte_lpm => lpm}/rte_lpm_sve.h | 0
lib/{librte_lpm => lpm}/version.map | 0
lib/{librte_mbuf => mbuf}/meson.build | 0
lib/{librte_mbuf => mbuf}/rte_mbuf.c | 0
lib/{librte_mbuf => mbuf}/rte_mbuf.h | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_core.h | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_dyn.c | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_dyn.h | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_pool_ops.c | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_pool_ops.h | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_ptype.c | 0
lib/{librte_mbuf => mbuf}/rte_mbuf_ptype.h | 0
lib/{librte_mbuf => mbuf}/version.map | 0
lib/{librte_member => member}/meson.build | 0
lib/{librte_member => member}/rte_member.c | 0
lib/{librte_member => member}/rte_member.h | 0
lib/{librte_member => member}/rte_member_ht.c | 0
lib/{librte_member => member}/rte_member_ht.h | 0
.../rte_member_vbf.c | 0
.../rte_member_vbf.h | 0
.../rte_member_x86.h | 0
lib/{librte_member => member}/version.map | 0
.../mempool_trace_points.c | 0
lib/{librte_mempool => mempool}/meson.build | 0
lib/{librte_mempool => mempool}/rte_mempool.c | 0
lib/{librte_mempool => mempool}/rte_mempool.h | 0
.../rte_mempool_ops.c | 0
.../rte_mempool_ops_default.c | 0
.../rte_mempool_trace.h | 0
.../rte_mempool_trace_fp.h | 0
lib/{librte_mempool => mempool}/version.map | 0
lib/meson.build | 16 +-
lib/{librte_meter => meter}/meson.build | 0
lib/{librte_meter => meter}/rte_meter.c | 0
lib/{librte_meter => meter}/rte_meter.h | 0
lib/{librte_meter => meter}/version.map | 0
lib/{librte_metrics => metrics}/meson.build | 0
lib/{librte_metrics => metrics}/rte_metrics.c | 0
lib/{librte_metrics => metrics}/rte_metrics.h | 0
.../rte_metrics_telemetry.c | 0
.../rte_metrics_telemetry.h | 0
lib/{librte_metrics => metrics}/version.map | 0
lib/{librte_net => net}/meson.build | 0
lib/{librte_net => net}/net_crc.h | 0
lib/{librte_net => net}/net_crc_avx512.c | 0
lib/{librte_net => net}/net_crc_neon.c | 0
lib/{librte_net => net}/net_crc_sse.c | 0
lib/{librte_net => net}/rte_arp.c | 0
lib/{librte_net => net}/rte_arp.h | 0
lib/{librte_net => net}/rte_ecpri.h | 0
lib/{librte_net => net}/rte_esp.h | 0
lib/{librte_net => net}/rte_ether.c | 0
lib/{librte_net => net}/rte_ether.h | 0
lib/{librte_net => net}/rte_geneve.h | 0
lib/{librte_net => net}/rte_gre.h | 0
lib/{librte_net => net}/rte_gtp.h | 0
lib/{librte_net => net}/rte_higig.h | 0
lib/{librte_net => net}/rte_icmp.h | 0
lib/{librte_net => net}/rte_ip.h | 0
lib/{librte_net => net}/rte_mpls.h | 0
lib/{librte_net => net}/rte_net.c | 0
lib/{librte_net => net}/rte_net.h | 0
lib/{librte_net => net}/rte_net_crc.c | 0
lib/{librte_net => net}/rte_net_crc.h | 0
lib/{librte_net => net}/rte_sctp.h | 0
lib/{librte_net => net}/rte_tcp.h | 0
lib/{librte_net => net}/rte_udp.h | 0
lib/{librte_net => net}/rte_vxlan.h | 0
lib/{librte_net => net}/version.map | 0
lib/{librte_node => node}/ethdev_ctrl.c | 0
lib/{librte_node => node}/ethdev_rx.c | 0
lib/{librte_node => node}/ethdev_rx_priv.h | 0
lib/{librte_node => node}/ethdev_tx.c | 0
lib/{librte_node => node}/ethdev_tx_priv.h | 0
lib/{librte_node => node}/ip4_lookup.c | 0
lib/{librte_node => node}/ip4_lookup_neon.h | 0
lib/{librte_node => node}/ip4_lookup_sse.h | 0
lib/{librte_node => node}/ip4_rewrite.c | 0
lib/{librte_node => node}/ip4_rewrite_priv.h | 0
lib/{librte_node => node}/log.c | 0
lib/{librte_node => node}/meson.build | 0
lib/{librte_node => node}/node_private.h | 0
lib/{librte_node => node}/null.c | 0
lib/{librte_node => node}/pkt_cls.c | 0
lib/{librte_node => node}/pkt_cls_priv.h | 0
lib/{librte_node => node}/pkt_drop.c | 0
lib/{librte_node => node}/rte_node_eth_api.h | 0
lib/{librte_node => node}/rte_node_ip4_api.h | 0
lib/{librte_node => node}/version.map | 0
lib/{librte_pci => pci}/meson.build | 0
lib/{librte_pci => pci}/rte_pci.c | 0
lib/{librte_pci => pci}/rte_pci.h | 0
lib/{librte_pci => pci}/version.map | 0
lib/{librte_pdump => pdump}/meson.build | 0
lib/{librte_pdump => pdump}/rte_pdump.c | 0
lib/{librte_pdump => pdump}/rte_pdump.h | 0
lib/{librte_pdump => pdump}/version.map | 0
lib/{librte_pipeline => pipeline}/meson.build | 0
.../rte_pipeline.c | 0
.../rte_pipeline.h | 0
.../rte_port_in_action.c | 0
.../rte_port_in_action.h | 0
.../rte_swx_ctl.c | 0
.../rte_swx_ctl.h | 0
.../rte_swx_extern.h | 0
.../rte_swx_pipeline.c | 0
.../rte_swx_pipeline.h | 0
.../rte_swx_pipeline_spec.c | 0
.../rte_table_action.c | 0
.../rte_table_action.h | 0
lib/{librte_pipeline => pipeline}/version.map | 0
lib/{librte_port => port}/meson.build | 0
lib/{librte_port => port}/rte_port.h | 0
lib/{librte_port => port}/rte_port_ethdev.c | 0
lib/{librte_port => port}/rte_port_ethdev.h | 0
lib/{librte_port => port}/rte_port_eventdev.c | 0
lib/{librte_port => port}/rte_port_eventdev.h | 0
lib/{librte_port => port}/rte_port_fd.c | 0
lib/{librte_port => port}/rte_port_fd.h | 0
lib/{librte_port => port}/rte_port_frag.c | 0
lib/{librte_port => port}/rte_port_frag.h | 0
lib/{librte_port => port}/rte_port_kni.c | 0
lib/{librte_port => port}/rte_port_kni.h | 0
lib/{librte_port => port}/rte_port_ras.c | 0
lib/{librte_port => port}/rte_port_ras.h | 0
lib/{librte_port => port}/rte_port_ring.c | 0
lib/{librte_port => port}/rte_port_ring.h | 0
lib/{librte_port => port}/rte_port_sched.c | 0
lib/{librte_port => port}/rte_port_sched.h | 0
.../rte_port_source_sink.c | 0
.../rte_port_source_sink.h | 0
.../rte_port_sym_crypto.c | 0
.../rte_port_sym_crypto.h | 0
lib/{librte_port => port}/rte_swx_port.h | 0
.../rte_swx_port_ethdev.c | 0
.../rte_swx_port_ethdev.h | 0
lib/{librte_port => port}/rte_swx_port_fd.c | 0
lib/{librte_port => port}/rte_swx_port_fd.h | 0
lib/{librte_port => port}/rte_swx_port_ring.c | 0
lib/{librte_port => port}/rte_swx_port_ring.h | 0
.../rte_swx_port_source_sink.c | 0
.../rte_swx_port_source_sink.h | 0
lib/{librte_port => port}/version.map | 0
lib/{librte_power => power}/guest_channel.c | 0
lib/{librte_power => power}/guest_channel.h | 0
lib/{librte_power => power}/meson.build | 0
.../power_acpi_cpufreq.c | 0
.../power_acpi_cpufreq.h | 0
lib/{librte_power => power}/power_common.c | 0
lib/{librte_power => power}/power_common.h | 0
lib/{librte_power => power}/power_kvm_vm.c | 0
lib/{librte_power => power}/power_kvm_vm.h | 0
.../power_pstate_cpufreq.c | 0
.../power_pstate_cpufreq.h | 0
lib/{librte_power => power}/rte_power.c | 0
lib/{librte_power => power}/rte_power.h | 0
.../rte_power_empty_poll.c | 0
.../rte_power_empty_poll.h | 0
.../rte_power_guest_channel.h | 0
.../rte_power_pmd_mgmt.c | 0
.../rte_power_pmd_mgmt.h | 0
lib/{librte_power => power}/version.map | 0
lib/{librte_rawdev => rawdev}/meson.build | 0
lib/{librte_rawdev => rawdev}/rte_rawdev.c | 0
lib/{librte_rawdev => rawdev}/rte_rawdev.h | 0
.../rte_rawdev_pmd.h | 0
lib/{librte_rawdev => rawdev}/version.map | 0
lib/{librte_rcu => rcu}/meson.build | 0
lib/{librte_rcu => rcu}/rcu_qsbr_pvt.h | 0
lib/{librte_rcu => rcu}/rte_rcu_qsbr.c | 0
lib/{librte_rcu => rcu}/rte_rcu_qsbr.h | 0
lib/{librte_rcu => rcu}/version.map | 0
lib/{librte_regexdev => regexdev}/meson.build | 0
.../rte_regexdev.c | 0
.../rte_regexdev.h | 0
.../rte_regexdev_core.h | 0
.../rte_regexdev_driver.h | 0
lib/{librte_regexdev => regexdev}/version.map | 0
lib/{librte_reorder => reorder}/meson.build | 0
lib/{librte_reorder => reorder}/rte_reorder.c | 0
lib/{librte_reorder => reorder}/rte_reorder.h | 0
lib/{librte_reorder => reorder}/version.map | 0
lib/{librte_rib => rib}/meson.build | 0
lib/{librte_rib => rib}/rte_rib.c | 0
lib/{librte_rib => rib}/rte_rib.h | 0
lib/{librte_rib => rib}/rte_rib6.c | 0
lib/{librte_rib => rib}/rte_rib6.h | 0
lib/{librte_rib => rib}/version.map | 0
lib/{librte_ring => ring}/meson.build | 0
lib/{librte_ring => ring}/rte_ring.c | 0
lib/{librte_ring => ring}/rte_ring.h | 0
lib/{librte_ring => ring}/rte_ring_c11_pvt.h | 0
lib/{librte_ring => ring}/rte_ring_core.h | 0
lib/{librte_ring => ring}/rte_ring_elem.h | 0
lib/{librte_ring => ring}/rte_ring_elem_pvt.h | 0
.../rte_ring_generic_pvt.h | 0
lib/{librte_ring => ring}/rte_ring_hts.h | 0
.../rte_ring_hts_elem_pvt.h | 0
lib/{librte_ring => ring}/rte_ring_peek.h | 0
.../rte_ring_peek_elem_pvt.h | 0
lib/{librte_ring => ring}/rte_ring_peek_zc.h | 0
lib/{librte_ring => ring}/rte_ring_rts.h | 0
.../rte_ring_rts_elem_pvt.h | 0
lib/{librte_ring => ring}/version.map | 0
lib/{librte_sched => sched}/meson.build | 0
lib/{librte_sched => sched}/rte_approx.c | 0
lib/{librte_sched => sched}/rte_approx.h | 0
lib/{librte_sched => sched}/rte_red.c | 0
lib/{librte_sched => sched}/rte_red.h | 0
lib/{librte_sched => sched}/rte_sched.c | 0
lib/{librte_sched => sched}/rte_sched.h | 0
.../rte_sched_common.h | 0
lib/{librte_sched => sched}/version.map | 0
lib/{librte_security => security}/meson.build | 0
.../rte_security.c | 0
.../rte_security.h | 0
.../rte_security_driver.h | 0
lib/{librte_security => security}/version.map | 0
lib/{librte_stack => stack}/meson.build | 0
lib/{librte_stack => stack}/rte_stack.c | 0
lib/{librte_stack => stack}/rte_stack.h | 0
lib/{librte_stack => stack}/rte_stack_lf.c | 0
lib/{librte_stack => stack}/rte_stack_lf.h | 0
.../rte_stack_lf_c11.h | 0
.../rte_stack_lf_generic.h | 0
.../rte_stack_lf_stubs.h | 0
lib/{librte_stack => stack}/rte_stack_std.c | 0
lib/{librte_stack => stack}/rte_stack_std.h | 0
lib/{librte_stack => stack}/stack_pvt.h | 0
lib/{librte_stack => stack}/version.map | 0
lib/{librte_table => table}/meson.build | 0
lib/{librte_table => table}/rte_lru.h | 0
lib/{librte_table => table}/rte_lru_arm64.h | 0
lib/{librte_table => table}/rte_lru_x86.h | 0
lib/{librte_table => table}/rte_swx_table.h | 0
.../rte_swx_table_em.c | 0
.../rte_swx_table_em.h | 0
.../rte_swx_table_wm.c | 0
.../rte_swx_table_wm.h | 0
lib/{librte_table => table}/rte_table.h | 0
lib/{librte_table => table}/rte_table_acl.c | 0
lib/{librte_table => table}/rte_table_acl.h | 0
lib/{librte_table => table}/rte_table_array.c | 0
lib/{librte_table => table}/rte_table_array.h | 0
lib/{librte_table => table}/rte_table_hash.h | 0
.../rte_table_hash_cuckoo.c | 0
.../rte_table_hash_cuckoo.h | 0
.../rte_table_hash_ext.c | 0
.../rte_table_hash_func.h | 0
.../rte_table_hash_func_arm64.h | 0
.../rte_table_hash_key16.c | 0
.../rte_table_hash_key32.c | 0
.../rte_table_hash_key8.c | 0
.../rte_table_hash_lru.c | 0
lib/{librte_table => table}/rte_table_lpm.c | 0
lib/{librte_table => table}/rte_table_lpm.h | 0
.../rte_table_lpm_ipv6.c | 0
.../rte_table_lpm_ipv6.h | 0
lib/{librte_table => table}/rte_table_stub.c | 0
lib/{librte_table => table}/rte_table_stub.h | 0
lib/{librte_table => table}/version.map | 0
.../meson.build | 2 +-
.../rte_telemetry.h | 0
.../telemetry.c | 0
.../telemetry_data.c | 0
.../telemetry_data.h | 0
.../telemetry_internal.h | 0
.../telemetry_json.h | 0
.../telemetry_legacy.c | 0
.../version.map | 0
lib/{librte_timer => timer}/meson.build | 0
lib/{librte_timer => timer}/rte_timer.c | 0
lib/{librte_timer => timer}/rte_timer.h | 0
lib/{librte_timer => timer}/version.map | 0
lib/{librte_vhost => vhost}/fd_man.c | 0
lib/{librte_vhost => vhost}/fd_man.h | 0
lib/{librte_vhost => vhost}/iotlb.c | 0
lib/{librte_vhost => vhost}/iotlb.h | 0
lib/{librte_vhost => vhost}/meson.build | 0
lib/{librte_vhost => vhost}/rte_vdpa.h | 0
lib/{librte_vhost => vhost}/rte_vdpa_dev.h | 0
lib/{librte_vhost => vhost}/rte_vhost.h | 0
lib/{librte_vhost => vhost}/rte_vhost_async.h | 0
.../rte_vhost_crypto.h | 0
lib/{librte_vhost => vhost}/socket.c | 0
lib/{librte_vhost => vhost}/vdpa.c | 0
lib/{librte_vhost => vhost}/version.map | 0
lib/{librte_vhost => vhost}/vhost.c | 0
lib/{librte_vhost => vhost}/vhost.h | 0
lib/{librte_vhost => vhost}/vhost_crypto.c | 0
lib/{librte_vhost => vhost}/vhost_user.c | 0
lib/{librte_vhost => vhost}/vhost_user.h | 0
lib/{librte_vhost => vhost}/virtio_crypto.h | 0
lib/{librte_vhost => vhost}/virtio_net.c | 0
license/exceptions.txt | 6 +-
meson.build | 6 +-
874 files changed, 207 insertions(+), 205 deletions(-)
rename lib/{librte_acl => acl}/acl.h (100%)
rename lib/{librte_acl => acl}/acl_bld.c (100%)
rename lib/{librte_acl => acl}/acl_gen.c (100%)
rename lib/{librte_acl => acl}/acl_run.h (100%)
rename lib/{librte_acl => acl}/acl_run_altivec.c (100%)
rename lib/{librte_acl => acl}/acl_run_altivec.h (100%)
rename lib/{librte_acl => acl}/acl_run_avx2.c (100%)
rename lib/{librte_acl => acl}/acl_run_avx2.h (100%)
rename lib/{librte_acl => acl}/acl_run_avx512.c (100%)
rename lib/{librte_acl => acl}/acl_run_avx512_common.h (100%)
rename lib/{librte_acl => acl}/acl_run_avx512x16.h (100%)
rename lib/{librte_acl => acl}/acl_run_avx512x8.h (100%)
rename lib/{librte_acl => acl}/acl_run_neon.c (100%)
rename lib/{librte_acl => acl}/acl_run_neon.h (100%)
rename lib/{librte_acl => acl}/acl_run_scalar.c (100%)
rename lib/{librte_acl => acl}/acl_run_sse.c (100%)
rename lib/{librte_acl => acl}/acl_run_sse.h (100%)
rename lib/{librte_acl => acl}/acl_vect.h (100%)
rename lib/{librte_acl => acl}/meson.build (100%)
rename lib/{librte_acl => acl}/rte_acl.c (100%)
rename lib/{librte_acl => acl}/rte_acl.h (100%)
rename lib/{librte_acl => acl}/rte_acl_osdep.h (100%)
rename lib/{librte_acl => acl}/tb_mem.c (100%)
rename lib/{librte_acl => acl}/tb_mem.h (100%)
rename lib/{librte_acl => acl}/version.map (100%)
rename lib/{librte_bbdev => bbdev}/meson.build (100%)
rename lib/{librte_bbdev => bbdev}/rte_bbdev.c (100%)
rename lib/{librte_bbdev => bbdev}/rte_bbdev.h (100%)
rename lib/{librte_bbdev => bbdev}/rte_bbdev_op.h (100%)
rename lib/{librte_bbdev => bbdev}/rte_bbdev_pmd.h (100%)
rename lib/{librte_bbdev => bbdev}/version.map (100%)
rename lib/{librte_bitratestats => bitratestats}/meson.build (100%)
rename lib/{librte_bitratestats => bitratestats}/rte_bitrate.c (100%)
rename lib/{librte_bitratestats => bitratestats}/rte_bitrate.h (100%)
rename lib/{librte_bitratestats => bitratestats}/version.map (100%)
rename lib/{librte_bpf => bpf}/bpf.c (100%)
rename lib/{librte_bpf => bpf}/bpf_def.h (100%)
rename lib/{librte_bpf => bpf}/bpf_exec.c (100%)
rename lib/{librte_bpf => bpf}/bpf_impl.h (100%)
rename lib/{librte_bpf => bpf}/bpf_jit_arm64.c (100%)
rename lib/{librte_bpf => bpf}/bpf_jit_x86.c (100%)
rename lib/{librte_bpf => bpf}/bpf_load.c (100%)
rename lib/{librte_bpf => bpf}/bpf_load_elf.c (100%)
rename lib/{librte_bpf => bpf}/bpf_pkt.c (100%)
rename lib/{librte_bpf => bpf}/bpf_validate.c (100%)
rename lib/{librte_bpf => bpf}/meson.build (100%)
rename lib/{librte_bpf => bpf}/rte_bpf.h (100%)
rename lib/{librte_bpf => bpf}/rte_bpf_ethdev.h (100%)
rename lib/{librte_bpf => bpf}/version.map (100%)
rename lib/{librte_cfgfile => cfgfile}/meson.build (100%)
rename lib/{librte_cfgfile => cfgfile}/rte_cfgfile.c (100%)
rename lib/{librte_cfgfile => cfgfile}/rte_cfgfile.h (100%)
rename lib/{librte_cfgfile => cfgfile}/version.map (100%)
rename lib/{librte_cmdline => cmdline}/cmdline.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_cirbuf.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_cirbuf.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_os_unix.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_os_windows.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_etheraddr.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_etheraddr.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_ipaddr.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_ipaddr.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_num.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_num.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_portlist.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_portlist.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_string.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_parse_string.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_private.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_rdline.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_rdline.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_socket.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_socket.h (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_vt100.c (100%)
rename lib/{librte_cmdline => cmdline}/cmdline_vt100.h (100%)
rename lib/{librte_cmdline => cmdline}/meson.build (100%)
rename lib/{librte_cmdline => cmdline}/version.map (100%)
rename lib/{librte_compressdev => compressdev}/meson.build (100%)
rename lib/{librte_compressdev => compressdev}/rte_comp.c (100%)
rename lib/{librte_compressdev => compressdev}/rte_comp.h (100%)
rename lib/{librte_compressdev => compressdev}/rte_compressdev.c (100%)
rename lib/{librte_compressdev => compressdev}/rte_compressdev.h (100%)
rename lib/{librte_compressdev => compressdev}/rte_compressdev_internal.h (100%)
rename lib/{librte_compressdev => compressdev}/rte_compressdev_pmd.c (100%)
rename lib/{librte_compressdev => compressdev}/rte_compressdev_pmd.h (100%)
rename lib/{librte_compressdev => compressdev}/version.map (100%)
rename lib/{librte_cryptodev => cryptodev}/cryptodev_trace_points.c (100%)
rename lib/{librte_cryptodev => cryptodev}/meson.build (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_crypto.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_crypto_asym.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_crypto_sym.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev.c (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev_pmd.c (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev_pmd.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev_trace.h (100%)
rename lib/{librte_cryptodev => cryptodev}/rte_cryptodev_trace_fp.h (100%)
rename lib/{librte_cryptodev => cryptodev}/version.map (100%)
rename lib/{librte_distributor => distributor}/distributor_private.h (100%)
rename lib/{librte_distributor => distributor}/meson.build (100%)
rename lib/{librte_distributor => distributor}/rte_distributor.c (100%)
rename lib/{librte_distributor => distributor}/rte_distributor.h (100%)
rename lib/{librte_distributor => distributor}/rte_distributor_match_generic.c (100%)
rename lib/{librte_distributor => distributor}/rte_distributor_match_sse.c (100%)
rename lib/{librte_distributor => distributor}/rte_distributor_single.c (100%)
rename lib/{librte_distributor => distributor}/rte_distributor_single.h (100%)
rename lib/{librte_distributor => distributor}/version.map (100%)
rename lib/{librte_eal => eal}/arm/include/meson.build (100%)
rename lib/{librte_eal => eal}/arm/include/rte_atomic.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_atomic_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_atomic_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_byteorder.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cpuflags.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cpuflags_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cpuflags_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cycles.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cycles_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_cycles_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_io.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_io_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_mcslock.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_memcpy.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_memcpy_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_memcpy_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_pause.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_pause_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_pause_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_power_intrinsics.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_prefetch.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_prefetch_32.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_prefetch_64.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_rwlock.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_spinlock.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_ticketlock.h (100%)
rename lib/{librte_eal => eal}/arm/include/rte_vect.h (100%)
rename lib/{librte_eal => eal}/arm/meson.build (100%)
rename lib/{librte_eal => eal}/arm/rte_cpuflags.c (100%)
rename lib/{librte_eal => eal}/arm/rte_cycles.c (100%)
rename lib/{librte_eal => eal}/arm/rte_hypervisor.c (100%)
rename lib/{librte_eal => eal}/arm/rte_power_intrinsics.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_bus.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_class.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_config.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_cpuflags.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_debug.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_dev.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_devargs.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_dynmem.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_errno.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_fbarray.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_hexdump.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_hypervisor.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_launch.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_lcore.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_log.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_mcfg.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_memalloc.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_memory.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_memzone.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_options.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_proc.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_string_fns.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_tailqs.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_thread.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_timer.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_trace.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_trace_ctf.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_trace_points.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_trace_utils.c (100%)
rename lib/{librte_eal => eal}/common/eal_common_uuid.c (100%)
rename lib/{librte_eal => eal}/common/eal_filesystem.h (100%)
rename lib/{librte_eal => eal}/common/eal_hugepages.h (100%)
rename lib/{librte_eal => eal}/common/eal_internal_cfg.h (100%)
rename lib/{librte_eal => eal}/common/eal_memalloc.h (100%)
rename lib/{librte_eal => eal}/common/eal_memcfg.h (100%)
rename lib/{librte_eal => eal}/common/eal_options.h (100%)
rename lib/{librte_eal => eal}/common/eal_private.h (100%)
rename lib/{librte_eal => eal}/common/eal_thread.h (100%)
rename lib/{librte_eal => eal}/common/eal_trace.h (100%)
rename lib/{librte_eal => eal}/common/hotplug_mp.c (100%)
rename lib/{librte_eal => eal}/common/hotplug_mp.h (100%)
rename lib/{librte_eal => eal}/common/malloc_elem.c (100%)
rename lib/{librte_eal => eal}/common/malloc_elem.h (100%)
rename lib/{librte_eal => eal}/common/malloc_heap.c (100%)
rename lib/{librte_eal => eal}/common/malloc_heap.h (100%)
rename lib/{librte_eal => eal}/common/malloc_mp.c (100%)
rename lib/{librte_eal => eal}/common/malloc_mp.h (100%)
rename lib/{librte_eal => eal}/common/meson.build (100%)
rename lib/{librte_eal => eal}/common/rte_keepalive.c (100%)
rename lib/{librte_eal => eal}/common/rte_malloc.c (100%)
rename lib/{librte_eal => eal}/common/rte_random.c (100%)
rename lib/{librte_eal => eal}/common/rte_reciprocal.c (100%)
rename lib/{librte_eal => eal}/common/rte_service.c (100%)
rename lib/{librte_eal => eal}/common/rte_version.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_alarm.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_alarm_private.h (100%)
rename lib/{librte_eal => eal}/freebsd/eal_cpuflags.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_debug.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_dev.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_hugepage_info.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_interrupts.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_lcore.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_memalloc.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_memory.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_thread.c (100%)
rename lib/{librte_eal => eal}/freebsd/eal_timer.c (100%)
rename lib/{librte_eal => eal}/freebsd/include/meson.build (100%)
rename lib/{librte_eal => eal}/freebsd/include/rte_os.h (100%)
rename lib/{librte_eal => eal}/freebsd/meson.build (100%)
rename lib/{librte_eal => eal}/include/generic/rte_atomic.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_byteorder.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_cpuflags.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_cycles.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_io.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_mcslock.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_memcpy.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_pause.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_power_intrinsics.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_prefetch.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_rwlock.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_spinlock.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_ticketlock.h (100%)
rename lib/{librte_eal => eal}/include/generic/rte_vect.h (100%)
rename lib/{librte_eal => eal}/include/meson.build (100%)
rename lib/{librte_eal => eal}/include/rte_alarm.h (100%)
rename lib/{librte_eal => eal}/include/rte_bitmap.h (100%)
rename lib/{librte_eal => eal}/include/rte_bitops.h (100%)
rename lib/{librte_eal => eal}/include/rte_branch_prediction.h (100%)
rename lib/{librte_eal => eal}/include/rte_bus.h (100%)
rename lib/{librte_eal => eal}/include/rte_class.h (100%)
rename lib/{librte_eal => eal}/include/rte_common.h (100%)
rename lib/{librte_eal => eal}/include/rte_compat.h (100%)
rename lib/{librte_eal => eal}/include/rte_debug.h (100%)
rename lib/{librte_eal => eal}/include/rte_dev.h (100%)
rename lib/{librte_eal => eal}/include/rte_devargs.h (100%)
rename lib/{librte_eal => eal}/include/rte_eal.h (100%)
rename lib/{librte_eal => eal}/include/rte_eal_interrupts.h (100%)
rename lib/{librte_eal => eal}/include/rte_eal_memconfig.h (100%)
rename lib/{librte_eal => eal}/include/rte_eal_paging.h (100%)
rename lib/{librte_eal => eal}/include/rte_eal_trace.h (100%)
rename lib/{librte_eal => eal}/include/rte_errno.h (100%)
rename lib/{librte_eal => eal}/include/rte_fbarray.h (100%)
rename lib/{librte_eal => eal}/include/rte_function_versioning.h (100%)
rename lib/{librte_eal => eal}/include/rte_hexdump.h (100%)
rename lib/{librte_eal => eal}/include/rte_hypervisor.h (100%)
rename lib/{librte_eal => eal}/include/rte_interrupts.h (100%)
rename lib/{librte_eal => eal}/include/rte_keepalive.h (100%)
rename lib/{librte_eal => eal}/include/rte_launch.h (100%)
rename lib/{librte_eal => eal}/include/rte_lcore.h (100%)
rename lib/{librte_eal => eal}/include/rte_log.h (100%)
rename lib/{librte_eal => eal}/include/rte_malloc.h (100%)
rename lib/{librte_eal => eal}/include/rte_memory.h (100%)
rename lib/{librte_eal => eal}/include/rte_memzone.h (100%)
rename lib/{librte_eal => eal}/include/rte_pci_dev_feature_defs.h (100%)
rename lib/{librte_eal => eal}/include/rte_pci_dev_features.h (100%)
rename lib/{librte_eal => eal}/include/rte_per_lcore.h (100%)
rename lib/{librte_eal => eal}/include/rte_random.h (100%)
rename lib/{librte_eal => eal}/include/rte_reciprocal.h (100%)
rename lib/{librte_eal => eal}/include/rte_service.h (100%)
rename lib/{librte_eal => eal}/include/rte_service_component.h (100%)
rename lib/{librte_eal => eal}/include/rte_string_fns.h (100%)
rename lib/{librte_eal => eal}/include/rte_tailq.h (100%)
rename lib/{librte_eal => eal}/include/rte_test.h (100%)
rename lib/{librte_eal => eal}/include/rte_thread.h (100%)
rename lib/{librte_eal => eal}/include/rte_time.h (100%)
rename lib/{librte_eal => eal}/include/rte_trace.h (100%)
rename lib/{librte_eal => eal}/include/rte_trace_point.h (100%)
rename lib/{librte_eal => eal}/include/rte_trace_point_register.h (100%)
rename lib/{librte_eal => eal}/include/rte_uuid.h (100%)
rename lib/{librte_eal => eal}/include/rte_version.h (100%)
rename lib/{librte_eal => eal}/include/rte_vfio.h (100%)
rename lib/{librte_eal => eal}/linux/eal.c (100%)
rename lib/{librte_eal => eal}/linux/eal_alarm.c (100%)
rename lib/{librte_eal => eal}/linux/eal_cpuflags.c (100%)
rename lib/{librte_eal => eal}/linux/eal_debug.c (100%)
rename lib/{librte_eal => eal}/linux/eal_dev.c (100%)
rename lib/{librte_eal => eal}/linux/eal_hugepage_info.c (100%)
rename lib/{librte_eal => eal}/linux/eal_interrupts.c (100%)
rename lib/{librte_eal => eal}/linux/eal_lcore.c (100%)
rename lib/{librte_eal => eal}/linux/eal_log.c (100%)
rename lib/{librte_eal => eal}/linux/eal_memalloc.c (100%)
rename lib/{librte_eal => eal}/linux/eal_memory.c (100%)
rename lib/{librte_eal => eal}/linux/eal_thread.c (100%)
rename lib/{librte_eal => eal}/linux/eal_timer.c (100%)
rename lib/{librte_eal => eal}/linux/eal_vfio.c (100%)
rename lib/{librte_eal => eal}/linux/eal_vfio.h (100%)
rename lib/{librte_eal => eal}/linux/eal_vfio_mp_sync.c (100%)
rename lib/{librte_eal => eal}/linux/include/meson.build (100%)
rename lib/{librte_eal => eal}/linux/include/rte_os.h (100%)
rename lib/{librte_eal => eal}/linux/meson.build (100%)
rename lib/{librte_eal => eal}/meson.build (100%)
rename lib/{librte_eal => eal}/ppc/include/meson.build (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_altivec.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_atomic.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_byteorder.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_cpuflags.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_cycles.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_io.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_mcslock.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_memcpy.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_pause.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_power_intrinsics.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_prefetch.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_rwlock.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_spinlock.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_ticketlock.h (100%)
rename lib/{librte_eal => eal}/ppc/include/rte_vect.h (100%)
rename lib/{librte_eal => eal}/ppc/meson.build (100%)
rename lib/{librte_eal => eal}/ppc/rte_cpuflags.c (100%)
rename lib/{librte_eal => eal}/ppc/rte_cycles.c (100%)
rename lib/{librte_eal => eal}/ppc/rte_hypervisor.c (100%)
rename lib/{librte_eal => eal}/ppc/rte_power_intrinsics.c (100%)
rename lib/{librte_eal => eal}/rte_eal_exports.def (100%)
rename lib/{librte_eal => eal}/unix/eal_file.c (100%)
rename lib/{librte_eal => eal}/unix/eal_unix_memory.c (100%)
rename lib/{librte_eal => eal}/unix/eal_unix_timer.c (100%)
rename lib/{librte_eal => eal}/unix/meson.build (100%)
rename lib/{librte_eal => eal}/unix/rte_thread.c (100%)
rename lib/{librte_eal => eal}/version.map (100%)
rename lib/{librte_eal => eal}/windows/eal.c (100%)
rename lib/{librte_eal => eal}/windows/eal_alarm.c (100%)
rename lib/{librte_eal => eal}/windows/eal_debug.c (100%)
rename lib/{librte_eal => eal}/windows/eal_file.c (100%)
rename lib/{librte_eal => eal}/windows/eal_hugepages.c (100%)
rename lib/{librte_eal => eal}/windows/eal_interrupts.c (100%)
rename lib/{librte_eal => eal}/windows/eal_lcore.c (100%)
rename lib/{librte_eal => eal}/windows/eal_log.c (100%)
rename lib/{librte_eal => eal}/windows/eal_memalloc.c (100%)
rename lib/{librte_eal => eal}/windows/eal_memory.c (100%)
rename lib/{librte_eal => eal}/windows/eal_mp.c (100%)
rename lib/{librte_eal => eal}/windows/eal_thread.c (100%)
rename lib/{librte_eal => eal}/windows/eal_timer.c (100%)
rename lib/{librte_eal => eal}/windows/eal_windows.h (100%)
rename lib/{librte_eal => eal}/windows/fnmatch.c (100%)
rename lib/{librte_eal => eal}/windows/getopt.c (100%)
rename lib/{librte_eal => eal}/windows/include/arpa/inet.h (100%)
rename lib/{librte_eal => eal}/windows/include/dirent.h (100%)
rename lib/{librte_eal => eal}/windows/include/fnmatch.h (100%)
rename lib/{librte_eal => eal}/windows/include/getopt.h (100%)
rename lib/{librte_eal => eal}/windows/include/meson.build (100%)
rename lib/{librte_eal => eal}/windows/include/netinet/in.h (100%)
rename lib/{librte_eal => eal}/windows/include/netinet/ip.h (100%)
rename lib/{librte_eal => eal}/windows/include/pthread.h (100%)
rename lib/{librte_eal => eal}/windows/include/regex.h (100%)
rename lib/{librte_eal => eal}/windows/include/rte_os.h (100%)
rename lib/{librte_eal => eal}/windows/include/rte_virt2phys.h (100%)
rename lib/{librte_eal => eal}/windows/include/rte_windows.h (100%)
rename lib/{librte_eal => eal}/windows/include/sched.h (100%)
rename lib/{librte_eal => eal}/windows/include/sys/queue.h (100%)
rename lib/{librte_eal => eal}/windows/include/sys/socket.h (100%)
rename lib/{librte_eal => eal}/windows/include/unistd.h (100%)
rename lib/{librte_eal => eal}/windows/meson.build (100%)
rename lib/{librte_eal => eal}/windows/rte_thread.c (100%)
rename lib/{librte_eal => eal}/x86/include/meson.build (100%)
rename lib/{librte_eal => eal}/x86/include/rte_atomic.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_atomic_32.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_atomic_64.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_byteorder.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_byteorder_32.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_byteorder_64.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_cpuflags.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_cycles.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_io.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_mcslock.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_memcpy.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_pause.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_power_intrinsics.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_prefetch.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_rtm.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_rwlock.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_spinlock.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_ticketlock.h (100%)
rename lib/{librte_eal => eal}/x86/include/rte_vect.h (100%)
rename lib/{librte_eal => eal}/x86/meson.build (100%)
rename lib/{librte_eal => eal}/x86/rte_cpuflags.c (100%)
rename lib/{librte_eal => eal}/x86/rte_cpuid.h (100%)
rename lib/{librte_eal => eal}/x86/rte_cycles.c (100%)
rename lib/{librte_eal => eal}/x86/rte_hypervisor.c (100%)
rename lib/{librte_eal => eal}/x86/rte_power_intrinsics.c (100%)
rename lib/{librte_eal => eal}/x86/rte_spinlock.c (100%)
rename lib/{librte_efd => efd}/meson.build (100%)
rename lib/{librte_efd => efd}/rte_efd.c (100%)
rename lib/{librte_efd => efd}/rte_efd.h (100%)
rename lib/{librte_efd => efd}/rte_efd_arm64.h (100%)
rename lib/{librte_efd => efd}/rte_efd_x86.h (100%)
rename lib/{librte_efd => efd}/version.map (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_driver.h (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_pci.h (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_private.c (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_private.h (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_profile.c (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_profile.h (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_trace_points.c (100%)
rename lib/{librte_ethdev => ethdev}/ethdev_vdev.h (100%)
rename lib/{librte_ethdev => ethdev}/meson.build (100%)
rename lib/{librte_ethdev => ethdev}/rte_class_eth.c (100%)
rename lib/{librte_ethdev => ethdev}/rte_dev_info.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_eth_ctrl.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_ethdev.c (100%)
rename lib/{librte_ethdev => ethdev}/rte_ethdev.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_ethdev_core.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_ethdev_trace.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_ethdev_trace_fp.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_flow.c (100%)
rename lib/{librte_ethdev => ethdev}/rte_flow.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_flow_driver.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_mtr.c (100%)
rename lib/{librte_ethdev => ethdev}/rte_mtr.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_mtr_driver.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_tm.c (100%)
rename lib/{librte_ethdev => ethdev}/rte_tm.h (100%)
rename lib/{librte_ethdev => ethdev}/rte_tm_driver.h (100%)
rename lib/{librte_ethdev => ethdev}/version.map (100%)
rename lib/{librte_eventdev => eventdev}/eventdev_pmd.h (100%)
rename lib/{librte_eventdev => eventdev}/eventdev_pmd_pci.h (100%)
rename lib/{librte_eventdev => eventdev}/eventdev_pmd_vdev.h (100%)
rename lib/{librte_eventdev => eventdev}/eventdev_trace_points.c (100%)
rename lib/{librte_eventdev => eventdev}/meson.build (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_crypto_adapter.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_crypto_adapter.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_eth_rx_adapter.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_eth_rx_adapter.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_eth_tx_adapter.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_eth_tx_adapter.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_ring.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_ring.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_timer_adapter.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_timer_adapter.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_event_timer_adapter_pmd.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_eventdev.c (100%)
rename lib/{librte_eventdev => eventdev}/rte_eventdev.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_eventdev_trace.h (100%)
rename lib/{librte_eventdev => eventdev}/rte_eventdev_trace_fp.h (100%)
rename lib/{librte_eventdev => eventdev}/version.map (100%)
rename lib/{librte_fib => fib}/dir24_8.c (100%)
rename lib/{librte_fib => fib}/dir24_8.h (100%)
rename lib/{librte_fib => fib}/dir24_8_avx512.c (100%)
rename lib/{librte_fib => fib}/dir24_8_avx512.h (100%)
rename lib/{librte_fib => fib}/meson.build (100%)
rename lib/{librte_fib => fib}/rte_fib.c (100%)
rename lib/{librte_fib => fib}/rte_fib.h (100%)
rename lib/{librte_fib => fib}/rte_fib6.c (100%)
rename lib/{librte_fib => fib}/rte_fib6.h (100%)
rename lib/{librte_fib => fib}/trie.c (100%)
rename lib/{librte_fib => fib}/trie.h (100%)
rename lib/{librte_fib => fib}/trie_avx512.c (100%)
rename lib/{librte_fib => fib}/trie_avx512.h (100%)
rename lib/{librte_fib => fib}/version.map (100%)
rename lib/{librte_flow_classify => flow_classify}/meson.build (100%)
rename lib/{librte_flow_classify => flow_classify}/rte_flow_classify.c (100%)
rename lib/{librte_flow_classify => flow_classify}/rte_flow_classify.h (100%)
rename lib/{librte_flow_classify => flow_classify}/rte_flow_classify_parse.c (100%)
rename lib/{librte_flow_classify => flow_classify}/rte_flow_classify_parse.h (100%)
rename lib/{librte_flow_classify => flow_classify}/version.map (100%)
rename lib/{librte_graph => graph}/graph.c (100%)
rename lib/{librte_graph => graph}/graph_debug.c (100%)
rename lib/{librte_graph => graph}/graph_ops.c (100%)
rename lib/{librte_graph => graph}/graph_populate.c (100%)
rename lib/{librte_graph => graph}/graph_private.h (100%)
rename lib/{librte_graph => graph}/graph_stats.c (100%)
rename lib/{librte_graph => graph}/meson.build (100%)
rename lib/{librte_graph => graph}/node.c (100%)
rename lib/{librte_graph => graph}/rte_graph.h (100%)
rename lib/{librte_graph => graph}/rte_graph_worker.h (100%)
rename lib/{librte_graph => graph}/version.map (100%)
rename lib/{librte_gro => gro}/gro_tcp4.c (100%)
rename lib/{librte_gro => gro}/gro_tcp4.h (100%)
rename lib/{librte_gro => gro}/gro_udp4.c (100%)
rename lib/{librte_gro => gro}/gro_udp4.h (100%)
rename lib/{librte_gro => gro}/gro_vxlan_tcp4.c (100%)
rename lib/{librte_gro => gro}/gro_vxlan_tcp4.h (100%)
rename lib/{librte_gro => gro}/gro_vxlan_udp4.c (100%)
rename lib/{librte_gro => gro}/gro_vxlan_udp4.h (100%)
rename lib/{librte_gro => gro}/meson.build (100%)
rename lib/{librte_gro => gro}/rte_gro.c (100%)
rename lib/{librte_gro => gro}/rte_gro.h (100%)
rename lib/{librte_gro => gro}/version.map (100%)
rename lib/{librte_gso => gso}/gso_common.c (100%)
rename lib/{librte_gso => gso}/gso_common.h (100%)
rename lib/{librte_gso => gso}/gso_tcp4.c (100%)
rename lib/{librte_gso => gso}/gso_tcp4.h (100%)
rename lib/{librte_gso => gso}/gso_tunnel_tcp4.c (100%)
rename lib/{librte_gso => gso}/gso_tunnel_tcp4.h (100%)
rename lib/{librte_gso => gso}/gso_tunnel_udp4.c (100%)
rename lib/{librte_gso => gso}/gso_tunnel_udp4.h (100%)
rename lib/{librte_gso => gso}/gso_udp4.c (100%)
rename lib/{librte_gso => gso}/gso_udp4.h (100%)
rename lib/{librte_gso => gso}/meson.build (100%)
rename lib/{librte_gso => gso}/rte_gso.c (100%)
rename lib/{librte_gso => gso}/rte_gso.h (100%)
rename lib/{librte_gso => gso}/version.map (100%)
rename lib/{librte_hash => hash}/meson.build (100%)
rename lib/{librte_hash => hash}/rte_cmp_arm64.h (100%)
rename lib/{librte_hash => hash}/rte_cmp_x86.h (100%)
rename lib/{librte_hash => hash}/rte_crc_arm64.h (100%)
rename lib/{librte_hash => hash}/rte_cuckoo_hash.c (100%)
rename lib/{librte_hash => hash}/rte_cuckoo_hash.h (100%)
rename lib/{librte_hash => hash}/rte_fbk_hash.c (100%)
rename lib/{librte_hash => hash}/rte_fbk_hash.h (100%)
rename lib/{librte_hash => hash}/rte_hash.h (100%)
rename lib/{librte_hash => hash}/rte_hash_crc.h (100%)
rename lib/{librte_hash => hash}/rte_jhash.h (100%)
rename lib/{librte_hash => hash}/rte_thash.h (100%)
rename lib/{librte_hash => hash}/version.map (100%)
rename lib/{librte_ip_frag => ip_frag}/ip_frag_common.h (100%)
rename lib/{librte_ip_frag => ip_frag}/ip_frag_internal.c (100%)
rename lib/{librte_ip_frag => ip_frag}/meson.build (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ip_frag.h (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ip_frag_common.c (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ipv4_fragmentation.c (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ipv4_reassembly.c (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ipv6_fragmentation.c (100%)
rename lib/{librte_ip_frag => ip_frag}/rte_ipv6_reassembly.c (100%)
rename lib/{librte_ip_frag => ip_frag}/version.map (100%)
rename lib/{librte_ipsec => ipsec}/crypto.h (100%)
rename lib/{librte_ipsec => ipsec}/esp_inb.c (100%)
rename lib/{librte_ipsec => ipsec}/esp_outb.c (100%)
rename lib/{librte_ipsec => ipsec}/iph.h (100%)
rename lib/{librte_ipsec => ipsec}/ipsec_sad.c (100%)
rename lib/{librte_ipsec => ipsec}/ipsec_sqn.h (100%)
rename lib/{librte_ipsec => ipsec}/meson.build (100%)
rename lib/{librte_ipsec => ipsec}/misc.h (100%)
rename lib/{librte_ipsec => ipsec}/pad.h (100%)
rename lib/{librte_ipsec => ipsec}/rte_ipsec.h (100%)
rename lib/{librte_ipsec => ipsec}/rte_ipsec_group.h (100%)
rename lib/{librte_ipsec => ipsec}/rte_ipsec_sa.h (100%)
rename lib/{librte_ipsec => ipsec}/rte_ipsec_sad.h (100%)
rename lib/{librte_ipsec => ipsec}/sa.c (100%)
rename lib/{librte_ipsec => ipsec}/sa.h (100%)
rename lib/{librte_ipsec => ipsec}/ses.c (100%)
rename lib/{librte_ipsec => ipsec}/version.map (100%)
rename lib/{librte_jobstats => jobstats}/meson.build (100%)
rename lib/{librte_jobstats => jobstats}/rte_jobstats.c (100%)
rename lib/{librte_jobstats => jobstats}/rte_jobstats.h (100%)
rename lib/{librte_jobstats => jobstats}/version.map (100%)
rename lib/{librte_kni => kni}/meson.build (100%)
rename lib/{librte_kni => kni}/rte_kni.c (100%)
rename lib/{librte_kni => kni}/rte_kni.h (100%)
rename lib/{librte_kni => kni}/rte_kni_common.h (100%)
rename lib/{librte_kni => kni}/rte_kni_fifo.h (100%)
rename lib/{librte_kni => kni}/version.map (100%)
rename lib/{librte_kvargs => kvargs}/meson.build (100%)
rename lib/{librte_kvargs => kvargs}/rte_kvargs.c (100%)
rename lib/{librte_kvargs => kvargs}/rte_kvargs.h (100%)
rename lib/{librte_kvargs => kvargs}/version.map (100%)
rename lib/{librte_latencystats => latencystats}/meson.build (100%)
rename lib/{librte_latencystats => latencystats}/rte_latencystats.c (100%)
rename lib/{librte_latencystats => latencystats}/rte_latencystats.h (100%)
rename lib/{librte_latencystats => latencystats}/version.map (100%)
rename lib/{librte_lpm => lpm}/meson.build (100%)
rename lib/{librte_lpm => lpm}/rte_lpm.c (100%)
rename lib/{librte_lpm => lpm}/rte_lpm.h (100%)
rename lib/{librte_lpm => lpm}/rte_lpm6.c (100%)
rename lib/{librte_lpm => lpm}/rte_lpm6.h (100%)
rename lib/{librte_lpm => lpm}/rte_lpm_altivec.h (100%)
rename lib/{librte_lpm => lpm}/rte_lpm_neon.h (100%)
rename lib/{librte_lpm => lpm}/rte_lpm_sse.h (100%)
rename lib/{librte_lpm => lpm}/rte_lpm_sve.h (100%)
rename lib/{librte_lpm => lpm}/version.map (100%)
rename lib/{librte_mbuf => mbuf}/meson.build (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf.c (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf.h (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_core.h (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_dyn.c (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_dyn.h (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_pool_ops.c (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_pool_ops.h (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_ptype.c (100%)
rename lib/{librte_mbuf => mbuf}/rte_mbuf_ptype.h (100%)
rename lib/{librte_mbuf => mbuf}/version.map (100%)
rename lib/{librte_member => member}/meson.build (100%)
rename lib/{librte_member => member}/rte_member.c (100%)
rename lib/{librte_member => member}/rte_member.h (100%)
rename lib/{librte_member => member}/rte_member_ht.c (100%)
rename lib/{librte_member => member}/rte_member_ht.h (100%)
rename lib/{librte_member => member}/rte_member_vbf.c (100%)
rename lib/{librte_member => member}/rte_member_vbf.h (100%)
rename lib/{librte_member => member}/rte_member_x86.h (100%)
rename lib/{librte_member => member}/version.map (100%)
rename lib/{librte_mempool => mempool}/mempool_trace_points.c (100%)
rename lib/{librte_mempool => mempool}/meson.build (100%)
rename lib/{librte_mempool => mempool}/rte_mempool.c (100%)
rename lib/{librte_mempool => mempool}/rte_mempool.h (100%)
rename lib/{librte_mempool => mempool}/rte_mempool_ops.c (100%)
rename lib/{librte_mempool => mempool}/rte_mempool_ops_default.c (100%)
rename lib/{librte_mempool => mempool}/rte_mempool_trace.h (100%)
rename lib/{librte_mempool => mempool}/rte_mempool_trace_fp.h (100%)
rename lib/{librte_mempool => mempool}/version.map (100%)
rename lib/{librte_meter => meter}/meson.build (100%)
rename lib/{librte_meter => meter}/rte_meter.c (100%)
rename lib/{librte_meter => meter}/rte_meter.h (100%)
rename lib/{librte_meter => meter}/version.map (100%)
rename lib/{librte_metrics => metrics}/meson.build (100%)
rename lib/{librte_metrics => metrics}/rte_metrics.c (100%)
rename lib/{librte_metrics => metrics}/rte_metrics.h (100%)
rename lib/{librte_metrics => metrics}/rte_metrics_telemetry.c (100%)
rename lib/{librte_metrics => metrics}/rte_metrics_telemetry.h (100%)
rename lib/{librte_metrics => metrics}/version.map (100%)
rename lib/{librte_net => net}/meson.build (100%)
rename lib/{librte_net => net}/net_crc.h (100%)
rename lib/{librte_net => net}/net_crc_avx512.c (100%)
rename lib/{librte_net => net}/net_crc_neon.c (100%)
rename lib/{librte_net => net}/net_crc_sse.c (100%)
rename lib/{librte_net => net}/rte_arp.c (100%)
rename lib/{librte_net => net}/rte_arp.h (100%)
rename lib/{librte_net => net}/rte_ecpri.h (100%)
rename lib/{librte_net => net}/rte_esp.h (100%)
rename lib/{librte_net => net}/rte_ether.c (100%)
rename lib/{librte_net => net}/rte_ether.h (100%)
rename lib/{librte_net => net}/rte_geneve.h (100%)
rename lib/{librte_net => net}/rte_gre.h (100%)
rename lib/{librte_net => net}/rte_gtp.h (100%)
rename lib/{librte_net => net}/rte_higig.h (100%)
rename lib/{librte_net => net}/rte_icmp.h (100%)
rename lib/{librte_net => net}/rte_ip.h (100%)
rename lib/{librte_net => net}/rte_mpls.h (100%)
rename lib/{librte_net => net}/rte_net.c (100%)
rename lib/{librte_net => net}/rte_net.h (100%)
rename lib/{librte_net => net}/rte_net_crc.c (100%)
rename lib/{librte_net => net}/rte_net_crc.h (100%)
rename lib/{librte_net => net}/rte_sctp.h (100%)
rename lib/{librte_net => net}/rte_tcp.h (100%)
rename lib/{librte_net => net}/rte_udp.h (100%)
rename lib/{librte_net => net}/rte_vxlan.h (100%)
rename lib/{librte_net => net}/version.map (100%)
rename lib/{librte_node => node}/ethdev_ctrl.c (100%)
rename lib/{librte_node => node}/ethdev_rx.c (100%)
rename lib/{librte_node => node}/ethdev_rx_priv.h (100%)
rename lib/{librte_node => node}/ethdev_tx.c (100%)
rename lib/{librte_node => node}/ethdev_tx_priv.h (100%)
rename lib/{librte_node => node}/ip4_lookup.c (100%)
rename lib/{librte_node => node}/ip4_lookup_neon.h (100%)
rename lib/{librte_node => node}/ip4_lookup_sse.h (100%)
rename lib/{librte_node => node}/ip4_rewrite.c (100%)
rename lib/{librte_node => node}/ip4_rewrite_priv.h (100%)
rename lib/{librte_node => node}/log.c (100%)
rename lib/{librte_node => node}/meson.build (100%)
rename lib/{librte_node => node}/node_private.h (100%)
rename lib/{librte_node => node}/null.c (100%)
rename lib/{librte_node => node}/pkt_cls.c (100%)
rename lib/{librte_node => node}/pkt_cls_priv.h (100%)
rename lib/{librte_node => node}/pkt_drop.c (100%)
rename lib/{librte_node => node}/rte_node_eth_api.h (100%)
rename lib/{librte_node => node}/rte_node_ip4_api.h (100%)
rename lib/{librte_node => node}/version.map (100%)
rename lib/{librte_pci => pci}/meson.build (100%)
rename lib/{librte_pci => pci}/rte_pci.c (100%)
rename lib/{librte_pci => pci}/rte_pci.h (100%)
rename lib/{librte_pci => pci}/version.map (100%)
rename lib/{librte_pdump => pdump}/meson.build (100%)
rename lib/{librte_pdump => pdump}/rte_pdump.c (100%)
rename lib/{librte_pdump => pdump}/rte_pdump.h (100%)
rename lib/{librte_pdump => pdump}/version.map (100%)
rename lib/{librte_pipeline => pipeline}/meson.build (100%)
rename lib/{librte_pipeline => pipeline}/rte_pipeline.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_pipeline.h (100%)
rename lib/{librte_pipeline => pipeline}/rte_port_in_action.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_port_in_action.h (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_ctl.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_ctl.h (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_extern.h (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_pipeline.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_pipeline.h (100%)
rename lib/{librte_pipeline => pipeline}/rte_swx_pipeline_spec.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_table_action.c (100%)
rename lib/{librte_pipeline => pipeline}/rte_table_action.h (100%)
rename lib/{librte_pipeline => pipeline}/version.map (100%)
rename lib/{librte_port => port}/meson.build (100%)
rename lib/{librte_port => port}/rte_port.h (100%)
rename lib/{librte_port => port}/rte_port_ethdev.c (100%)
rename lib/{librte_port => port}/rte_port_ethdev.h (100%)
rename lib/{librte_port => port}/rte_port_eventdev.c (100%)
rename lib/{librte_port => port}/rte_port_eventdev.h (100%)
rename lib/{librte_port => port}/rte_port_fd.c (100%)
rename lib/{librte_port => port}/rte_port_fd.h (100%)
rename lib/{librte_port => port}/rte_port_frag.c (100%)
rename lib/{librte_port => port}/rte_port_frag.h (100%)
rename lib/{librte_port => port}/rte_port_kni.c (100%)
rename lib/{librte_port => port}/rte_port_kni.h (100%)
rename lib/{librte_port => port}/rte_port_ras.c (100%)
rename lib/{librte_port => port}/rte_port_ras.h (100%)
rename lib/{librte_port => port}/rte_port_ring.c (100%)
rename lib/{librte_port => port}/rte_port_ring.h (100%)
rename lib/{librte_port => port}/rte_port_sched.c (100%)
rename lib/{librte_port => port}/rte_port_sched.h (100%)
rename lib/{librte_port => port}/rte_port_source_sink.c (100%)
rename lib/{librte_port => port}/rte_port_source_sink.h (100%)
rename lib/{librte_port => port}/rte_port_sym_crypto.c (100%)
rename lib/{librte_port => port}/rte_port_sym_crypto.h (100%)
rename lib/{librte_port => port}/rte_swx_port.h (100%)
rename lib/{librte_port => port}/rte_swx_port_ethdev.c (100%)
rename lib/{librte_port => port}/rte_swx_port_ethdev.h (100%)
rename lib/{librte_port => port}/rte_swx_port_fd.c (100%)
rename lib/{librte_port => port}/rte_swx_port_fd.h (100%)
rename lib/{librte_port => port}/rte_swx_port_ring.c (100%)
rename lib/{librte_port => port}/rte_swx_port_ring.h (100%)
rename lib/{librte_port => port}/rte_swx_port_source_sink.c (100%)
rename lib/{librte_port => port}/rte_swx_port_source_sink.h (100%)
rename lib/{librte_port => port}/version.map (100%)
rename lib/{librte_power => power}/guest_channel.c (100%)
rename lib/{librte_power => power}/guest_channel.h (100%)
rename lib/{librte_power => power}/meson.build (100%)
rename lib/{librte_power => power}/power_acpi_cpufreq.c (100%)
rename lib/{librte_power => power}/power_acpi_cpufreq.h (100%)
rename lib/{librte_power => power}/power_common.c (100%)
rename lib/{librte_power => power}/power_common.h (100%)
rename lib/{librte_power => power}/power_kvm_vm.c (100%)
rename lib/{librte_power => power}/power_kvm_vm.h (100%)
rename lib/{librte_power => power}/power_pstate_cpufreq.c (100%)
rename lib/{librte_power => power}/power_pstate_cpufreq.h (100%)
rename lib/{librte_power => power}/rte_power.c (100%)
rename lib/{librte_power => power}/rte_power.h (100%)
rename lib/{librte_power => power}/rte_power_empty_poll.c (100%)
rename lib/{librte_power => power}/rte_power_empty_poll.h (100%)
rename lib/{librte_power => power}/rte_power_guest_channel.h (100%)
rename lib/{librte_power => power}/rte_power_pmd_mgmt.c (100%)
rename lib/{librte_power => power}/rte_power_pmd_mgmt.h (100%)
rename lib/{librte_power => power}/version.map (100%)
rename lib/{librte_rawdev => rawdev}/meson.build (100%)
rename lib/{librte_rawdev => rawdev}/rte_rawdev.c (100%)
rename lib/{librte_rawdev => rawdev}/rte_rawdev.h (100%)
rename lib/{librte_rawdev => rawdev}/rte_rawdev_pmd.h (100%)
rename lib/{librte_rawdev => rawdev}/version.map (100%)
rename lib/{librte_rcu => rcu}/meson.build (100%)
rename lib/{librte_rcu => rcu}/rcu_qsbr_pvt.h (100%)
rename lib/{librte_rcu => rcu}/rte_rcu_qsbr.c (100%)
rename lib/{librte_rcu => rcu}/rte_rcu_qsbr.h (100%)
rename lib/{librte_rcu => rcu}/version.map (100%)
rename lib/{librte_regexdev => regexdev}/meson.build (100%)
rename lib/{librte_regexdev => regexdev}/rte_regexdev.c (100%)
rename lib/{librte_regexdev => regexdev}/rte_regexdev.h (100%)
rename lib/{librte_regexdev => regexdev}/rte_regexdev_core.h (100%)
rename lib/{librte_regexdev => regexdev}/rte_regexdev_driver.h (100%)
rename lib/{librte_regexdev => regexdev}/version.map (100%)
rename lib/{librte_reorder => reorder}/meson.build (100%)
rename lib/{librte_reorder => reorder}/rte_reorder.c (100%)
rename lib/{librte_reorder => reorder}/rte_reorder.h (100%)
rename lib/{librte_reorder => reorder}/version.map (100%)
rename lib/{librte_rib => rib}/meson.build (100%)
rename lib/{librte_rib => rib}/rte_rib.c (100%)
rename lib/{librte_rib => rib}/rte_rib.h (100%)
rename lib/{librte_rib => rib}/rte_rib6.c (100%)
rename lib/{librte_rib => rib}/rte_rib6.h (100%)
rename lib/{librte_rib => rib}/version.map (100%)
rename lib/{librte_ring => ring}/meson.build (100%)
rename lib/{librte_ring => ring}/rte_ring.c (100%)
rename lib/{librte_ring => ring}/rte_ring.h (100%)
rename lib/{librte_ring => ring}/rte_ring_c11_pvt.h (100%)
rename lib/{librte_ring => ring}/rte_ring_core.h (100%)
rename lib/{librte_ring => ring}/rte_ring_elem.h (100%)
rename lib/{librte_ring => ring}/rte_ring_elem_pvt.h (100%)
rename lib/{librte_ring => ring}/rte_ring_generic_pvt.h (100%)
rename lib/{librte_ring => ring}/rte_ring_hts.h (100%)
rename lib/{librte_ring => ring}/rte_ring_hts_elem_pvt.h (100%)
rename lib/{librte_ring => ring}/rte_ring_peek.h (100%)
rename lib/{librte_ring => ring}/rte_ring_peek_elem_pvt.h (100%)
rename lib/{librte_ring => ring}/rte_ring_peek_zc.h (100%)
rename lib/{librte_ring => ring}/rte_ring_rts.h (100%)
rename lib/{librte_ring => ring}/rte_ring_rts_elem_pvt.h (100%)
rename lib/{librte_ring => ring}/version.map (100%)
rename lib/{librte_sched => sched}/meson.build (100%)
rename lib/{librte_sched => sched}/rte_approx.c (100%)
rename lib/{librte_sched => sched}/rte_approx.h (100%)
rename lib/{librte_sched => sched}/rte_red.c (100%)
rename lib/{librte_sched => sched}/rte_red.h (100%)
rename lib/{librte_sched => sched}/rte_sched.c (100%)
rename lib/{librte_sched => sched}/rte_sched.h (100%)
rename lib/{librte_sched => sched}/rte_sched_common.h (100%)
rename lib/{librte_sched => sched}/version.map (100%)
rename lib/{librte_security => security}/meson.build (100%)
rename lib/{librte_security => security}/rte_security.c (100%)
rename lib/{librte_security => security}/rte_security.h (100%)
rename lib/{librte_security => security}/rte_security_driver.h (100%)
rename lib/{librte_security => security}/version.map (100%)
rename lib/{librte_stack => stack}/meson.build (100%)
rename lib/{librte_stack => stack}/rte_stack.c (100%)
rename lib/{librte_stack => stack}/rte_stack.h (100%)
rename lib/{librte_stack => stack}/rte_stack_lf.c (100%)
rename lib/{librte_stack => stack}/rte_stack_lf.h (100%)
rename lib/{librte_stack => stack}/rte_stack_lf_c11.h (100%)
rename lib/{librte_stack => stack}/rte_stack_lf_generic.h (100%)
rename lib/{librte_stack => stack}/rte_stack_lf_stubs.h (100%)
rename lib/{librte_stack => stack}/rte_stack_std.c (100%)
rename lib/{librte_stack => stack}/rte_stack_std.h (100%)
rename lib/{librte_stack => stack}/stack_pvt.h (100%)
rename lib/{librte_stack => stack}/version.map (100%)
rename lib/{librte_table => table}/meson.build (100%)
rename lib/{librte_table => table}/rte_lru.h (100%)
rename lib/{librte_table => table}/rte_lru_arm64.h (100%)
rename lib/{librte_table => table}/rte_lru_x86.h (100%)
rename lib/{librte_table => table}/rte_swx_table.h (100%)
rename lib/{librte_table => table}/rte_swx_table_em.c (100%)
rename lib/{librte_table => table}/rte_swx_table_em.h (100%)
rename lib/{librte_table => table}/rte_swx_table_wm.c (100%)
rename lib/{librte_table => table}/rte_swx_table_wm.h (100%)
rename lib/{librte_table => table}/rte_table.h (100%)
rename lib/{librte_table => table}/rte_table_acl.c (100%)
rename lib/{librte_table => table}/rte_table_acl.h (100%)
rename lib/{librte_table => table}/rte_table_array.c (100%)
rename lib/{librte_table => table}/rte_table_array.h (100%)
rename lib/{librte_table => table}/rte_table_hash.h (100%)
rename lib/{librte_table => table}/rte_table_hash_cuckoo.c (100%)
rename lib/{librte_table => table}/rte_table_hash_cuckoo.h (100%)
rename lib/{librte_table => table}/rte_table_hash_ext.c (100%)
rename lib/{librte_table => table}/rte_table_hash_func.h (100%)
rename lib/{librte_table => table}/rte_table_hash_func_arm64.h (100%)
rename lib/{librte_table => table}/rte_table_hash_key16.c (100%)
rename lib/{librte_table => table}/rte_table_hash_key32.c (100%)
rename lib/{librte_table => table}/rte_table_hash_key8.c (100%)
rename lib/{librte_table => table}/rte_table_hash_lru.c (100%)
rename lib/{librte_table => table}/rte_table_lpm.c (100%)
rename lib/{librte_table => table}/rte_table_lpm.h (100%)
rename lib/{librte_table => table}/rte_table_lpm_ipv6.c (100%)
rename lib/{librte_table => table}/rte_table_lpm_ipv6.h (100%)
rename lib/{librte_table => table}/rte_table_stub.c (100%)
rename lib/{librte_table => table}/rte_table_stub.h (100%)
rename lib/{librte_table => table}/version.map (100%)
rename lib/{librte_telemetry => telemetry}/meson.build (80%)
rename lib/{librte_telemetry => telemetry}/rte_telemetry.h (100%)
rename lib/{librte_telemetry => telemetry}/telemetry.c (100%)
rename lib/{librte_telemetry => telemetry}/telemetry_data.c (100%)
rename lib/{librte_telemetry => telemetry}/telemetry_data.h (100%)
rename lib/{librte_telemetry => telemetry}/telemetry_internal.h (100%)
rename lib/{librte_telemetry => telemetry}/telemetry_json.h (100%)
rename lib/{librte_telemetry => telemetry}/telemetry_legacy.c (100%)
rename lib/{librte_telemetry => telemetry}/version.map (100%)
rename lib/{librte_timer => timer}/meson.build (100%)
rename lib/{librte_timer => timer}/rte_timer.c (100%)
rename lib/{librte_timer => timer}/rte_timer.h (100%)
rename lib/{librte_timer => timer}/version.map (100%)
rename lib/{librte_vhost => vhost}/fd_man.c (100%)
rename lib/{librte_vhost => vhost}/fd_man.h (100%)
rename lib/{librte_vhost => vhost}/iotlb.c (100%)
rename lib/{librte_vhost => vhost}/iotlb.h (100%)
rename lib/{librte_vhost => vhost}/meson.build (100%)
rename lib/{librte_vhost => vhost}/rte_vdpa.h (100%)
rename lib/{librte_vhost => vhost}/rte_vdpa_dev.h (100%)
rename lib/{librte_vhost => vhost}/rte_vhost.h (100%)
rename lib/{librte_vhost => vhost}/rte_vhost_async.h (100%)
rename lib/{librte_vhost => vhost}/rte_vhost_crypto.h (100%)
rename lib/{librte_vhost => vhost}/socket.c (100%)
rename lib/{librte_vhost => vhost}/vdpa.c (100%)
rename lib/{librte_vhost => vhost}/version.map (100%)
rename lib/{librte_vhost => vhost}/vhost.c (100%)
rename lib/{librte_vhost => vhost}/vhost.h (100%)
rename lib/{librte_vhost => vhost}/vhost_crypto.c (100%)
rename lib/{librte_vhost => vhost}/vhost_user.c (100%)
rename lib/{librte_vhost => vhost}/vhost_user.h (100%)
rename lib/{librte_vhost => vhost}/virtio_crypto.h (100%)
rename lib/{librte_vhost => vhost}/virtio_net.c (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index 0ec5588540..857cc724fb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -114,8 +114,8 @@ F: .ci/
ABI Policy & Versioning
M: Ray Kinsella <mdr@ashroe.eu>
M: Neil Horman <nhorman@tuxdriver.com>
-F: lib/librte_eal/include/rte_compat.h
-F: lib/librte_eal/include/rte_function_versioning.h
+F: lib/eal/include/rte_compat.h
+F: lib/eal/include/rte_function_versioning.h
F: doc/guides/contributing/abi_*.rst
F: doc/guides/rel_notes/deprecation.rst
F: devtools/check-abi.sh
@@ -145,10 +145,10 @@ Environment Abstraction Layer
T: git://dpdk.org/dpdk
EAL API and common code
-F: lib/librte_eal/common/
-F: lib/librte_eal/unix/
-F: lib/librte_eal/include/
-F: lib/librte_eal/version.map
+F: lib/eal/common/
+F: lib/eal/unix/
+F: lib/eal/include/
+F: lib/eal/version.map
F: doc/guides/prog_guide/env_abstraction_layer.rst
F: app/test/test_alarm.c
F: app/test/test_atomic.c
@@ -175,24 +175,24 @@ F: app/test/test_version.c
Trace - EXPERIMENTAL
M: Jerin Jacob <jerinj@marvell.com>
M: Sunil Kumar Kori <skori@marvell.com>
-F: lib/librte_eal/include/rte_trace*.h
-F: lib/librte_eal/common/eal_common_trace*.c
-F: lib/librte_eal/common/eal_trace.h
+F: lib/eal/include/rte_trace*.h
+F: lib/eal/common/eal_common_trace*.c
+F: lib/eal/common/eal_trace.h
F: doc/guides/prog_guide/trace_lib.rst
F: app/test/test_trace*
Memory Allocation
M: Anatoly Burakov <anatoly.burakov@intel.com>
-F: lib/librte_eal/include/rte_fbarray.h
-F: lib/librte_eal/include/rte_mem*
-F: lib/librte_eal/include/rte_malloc.h
-F: lib/librte_eal/common/*malloc*
-F: lib/librte_eal/common/eal_common_dynmem.c
-F: lib/librte_eal/common/eal_common_fbarray.c
-F: lib/librte_eal/common/eal_common_mem*
-F: lib/librte_eal/common/eal_hugepages.h
-F: lib/librte_eal/linux/eal_mem*
-F: lib/librte_eal/freebsd/eal_mem*
+F: lib/eal/include/rte_fbarray.h
+F: lib/eal/include/rte_mem*
+F: lib/eal/include/rte_malloc.h
+F: lib/eal/common/*malloc*
+F: lib/eal/common/eal_common_dynmem.c
+F: lib/eal/common/eal_common_fbarray.c
+F: lib/eal/common/eal_common_mem*
+F: lib/eal/common/eal_hugepages.h
+F: lib/eal/linux/eal_mem*
+F: lib/eal/freebsd/eal_mem*
F: doc/guides/prog_guide/env_abstraction_layer.rst
F: app/test/test_external_mem.c
F: app/test/test_func_reentrancy.c
@@ -203,19 +203,19 @@ F: app/test/test_memzone.c
Interrupt Subsystem
M: Harman Kalra <hkalra@marvell.com>
-F: lib/librte_eal/*/*interrupts.*
+F: lib/eal/*/*interrupts.*
F: app/test/test_interrupts.c
Keep alive
-F: lib/librte_eal/include/rte_keepalive.h
-F: lib/librte_eal/common/rte_keepalive.c
+F: lib/eal/include/rte_keepalive.h
+F: lib/eal/common/rte_keepalive.c
F: examples/l2fwd-keepalive/
F: doc/guides/sample_app_ug/keep_alive.rst
Secondary process
M: Anatoly Burakov <anatoly.burakov@intel.com>
K: RTE_PROC_
-F: lib/librte_eal/common/eal_common_proc.c
+F: lib/eal/common/eal_common_proc.c
F: doc/guides/prog_guide/multi_proc_support.rst
F: app/test/test_mp_secondary.c
F: examples/multi_process/
@@ -223,52 +223,52 @@ F: doc/guides/sample_app_ug/multi_process.rst
Service Cores
M: Harry van Haaren <harry.van.haaren@intel.com>
-F: lib/librte_eal/include/rte_service.h
-F: lib/librte_eal/include/rte_service_component.h
-F: lib/librte_eal/common/rte_service.c
+F: lib/eal/include/rte_service.h
+F: lib/eal/include/rte_service_component.h
+F: lib/eal/common/rte_service.c
F: doc/guides/prog_guide/service_cores.rst
F: app/test/test_service_cores.c
Bitops
M: Joyce Kong <joyce.kong@arm.com>
-F: lib/librte_eal/include/rte_bitops.h
+F: lib/eal/include/rte_bitops.h
F: app/test/test_bitops.c
Bitmap
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
-F: lib/librte_eal/include/rte_bitmap.h
+F: lib/eal/include/rte_bitmap.h
F: app/test/test_bitmap.c
MCSlock
M: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
-F: lib/librte_eal/include/generic/rte_mcslock.h
+F: lib/eal/include/generic/rte_mcslock.h
F: app/test/test_mcslock.c
Ticketlock
M: Joyce Kong <joyce.kong@arm.com>
-F: lib/librte_eal/include/generic/rte_ticketlock.h
+F: lib/eal/include/generic/rte_ticketlock.h
F: app/test/test_ticketlock.c
Pseudo-random Number Generation
M: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
-F: lib/librte_eal/include/rte_random.h
-F: lib/librte_eal/common/rte_random.c
+F: lib/eal/include/rte_random.h
+F: lib/eal/common/rte_random.c
F: app/test/test_rand_perf.c
ARM v7
M: Jan Viktorin <viktorin@rehivetech.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
F: config/arm/
-F: lib/librte_eal/arm/
-X: lib/librte_eal/arm/include/*_64.h
+F: lib/eal/arm/
+X: lib/eal/arm/include/*_64.h
ARM v8
M: Jerin Jacob <jerinj@marvell.com>
M: Ruifeng Wang <ruifeng.wang@arm.com>
F: config/arm/
F: doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
-F: lib/librte_eal/arm/
-X: lib/librte_eal/arm/include/*_32.h
+F: lib/eal/arm/
+X: lib/eal/arm/include/*_32.h
F: lib/*/*_arm64.*
F: lib/*/*_neon.*
F: drivers/*/*/*_neon.*
@@ -278,7 +278,7 @@ F: examples/*/*_neon.*
IBM POWER (alpha)
M: David Christensen <drc@linux.vnet.ibm.com>
F: config/ppc/
-F: lib/librte_eal/ppc/
+F: lib/eal/ppc/
F: lib/*/*_altivec*
F: drivers/*/*/*_altivec.*
F: app/*/*_altivec.*
@@ -291,7 +291,7 @@ F: config/x86/
F: doc/guides/linux_gsg/nic_perf_intel_platform.rst
F: buildtools/binutils-avx512-check.sh
F: doc/guides/howto/avx512.rst
-F: lib/librte_eal/x86/
+F: lib/eal/x86/
F: lib/*/*_sse*
F: lib/*/*_avx*
F: drivers/*/*/*_sse*
@@ -302,7 +302,7 @@ F: examples/*/*_sse*
F: examples/*/*_avx*
Linux EAL (with overlaps)
-F: lib/librte_eal/linux/
+F: lib/eal/linux/
F: doc/guides/linux_gsg/
Linux UIO
@@ -311,12 +311,12 @@ F: drivers/bus/pci/linux/*uio*
Linux VFIO
M: Anatoly Burakov <anatoly.burakov@intel.com>
-F: lib/librte_eal/linux/*vfio*
+F: lib/eal/linux/*vfio*
F: drivers/bus/pci/linux/*vfio*
FreeBSD EAL (with overlaps)
M: Bruce Richardson <bruce.richardson@intel.com>
-F: lib/librte_eal/freebsd/
+F: lib/eal/freebsd/
F: doc/guides/freebsd_gsg/
FreeBSD contigmem
@@ -332,15 +332,15 @@ M: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
M: Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>
M: Dmitry Malloy <dmitrym@microsoft.com>
M: Pallavi Kadam <pallavi.kadam@intel.com>
-F: lib/librte_eal/windows/
-F: lib/librte_eal/rte_eal_exports.def
+F: lib/eal/windows/
+F: lib/eal/rte_eal_exports.def
F: buildtools/map_to_win.py
F: doc/guides/windows_gsg/
Windows memory allocation
M: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
-F: lib/librte_eal/windows/eal_hugepages.c
-F: lib/librte_eal/windows/eal_mem*
+F: lib/eal/windows/eal_hugepages.c
+F: lib/eal/windows/eal_mem*
Core Libraries
@@ -350,7 +350,7 @@ T: git://dpdk.org/dpdk
Memory pool
M: Olivier Matz <olivier.matz@6wind.com>
M: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
-F: lib/librte_mempool/
+F: lib/mempool/
F: drivers/mempool/ring/
F: doc/guides/prog_guide/mempool_lib.rst
F: app/test/test_mempool*
@@ -359,21 +359,21 @@ F: app/test/test_func_reentrancy.c
Ring queue
M: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
-F: lib/librte_ring/
+F: lib/ring/
F: doc/guides/prog_guide/ring_lib.rst
F: app/test/test_ring*
F: app/test/test_func_reentrancy.c
Stack
M: Olivier Matz <olivier.matz@6wind.com>
-F: lib/librte_stack/
+F: lib/stack/
F: drivers/mempool/stack/
F: app/test/test_stack*
F: doc/guides/prog_guide/stack_lib.rst
Packet buffer
M: Olivier Matz <olivier.matz@6wind.com>
-F: lib/librte_mbuf/
+F: lib/mbuf/
F: doc/guides/prog_guide/mbuf_lib.rst
F: app/test/test_mbuf.c
@@ -382,7 +382,7 @@ M: Thomas Monjalon <thomas@monjalon.net>
M: Ferruh Yigit <ferruh.yigit@intel.com>
M: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
T: git://dpdk.org/next/dpdk-next-net
-F: lib/librte_ethdev/
+F: lib/ethdev/
F: app/test/test_ethdev*
F: devtools/test-null.sh
F: doc/guides/prog_guide/switch_representation.rst
@@ -392,22 +392,22 @@ M: Ori Kam <orika@nvidia.com>
T: git://dpdk.org/next/dpdk-next-net
F: app/test-pmd/cmdline_flow.c
F: doc/guides/prog_guide/rte_flow.rst
-F: lib/librte_ethdev/rte_flow*
+F: lib/ethdev/rte_flow*
Traffic Management API - EXPERIMENTAL
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
T: git://dpdk.org/next/dpdk-next-net
-F: lib/librte_ethdev/rte_tm*
+F: lib/ethdev/rte_tm*
Traffic Metering and Policing API - EXPERIMENTAL
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
T: git://dpdk.org/next/dpdk-next-net
-F: lib/librte_ethdev/rte_mtr*
+F: lib/ethdev/rte_mtr*
Baseband API - EXPERIMENTAL
M: Nicolas Chautru <nicolas.chautru@intel.com>
T: git://dpdk.org/next/dpdk-next-crypto
-F: lib/librte_bbdev/
+F: lib/bbdev/
F: doc/guides/prog_guide/bbdev.rst
F: drivers/baseband/
F: doc/guides/bbdevs/
@@ -419,7 +419,7 @@ F: doc/guides/sample_app_ug/bbdev_app.rst
Crypto API
M: Declan Doherty <declan.doherty@intel.com>
T: git://dpdk.org/next/dpdk-next-crypto
-F: lib/librte_cryptodev/
+F: lib/cryptodev/
F: app/test/test_cryptodev*
F: examples/l2fwd-crypto/
@@ -427,7 +427,7 @@ Security API
M: Akhil Goyal <gakhil@marvell.com>
M: Declan Doherty <declan.doherty@intel.com>
T: git://dpdk.org/next/dpdk-next-crypto
-F: lib/librte_security/
+F: lib/security/
F: doc/guides/prog_guide/rte_security.rst
F: app/test/test_security.c
@@ -435,7 +435,7 @@ Compression API - EXPERIMENTAL
M: Fiona Trahe <fiona.trahe@intel.com>
M: Ashish Gupta <ashish.gupta@marvell.com>
T: git://dpdk.org/next/dpdk-next-crypto
-F: lib/librte_compressdev/
+F: lib/compressdev/
F: drivers/compress/
F: app/test/test_compressdev*
F: doc/guides/prog_guide/compressdev.rst
@@ -443,7 +443,7 @@ F: doc/guides/compressdevs/features/default.ini
RegEx API - EXPERIMENTAL
M: Ori Kam <orika@nvidia.com>
-F: lib/librte_regexdev/
+F: lib/regexdev/
F: app/test-regex/
F: doc/guides/prog_guide/regexdev.rst
F: doc/guides/regexdevs/features/default.ini
@@ -451,7 +451,7 @@ F: doc/guides/regexdevs/features/default.ini
Eventdev API
M: Jerin Jacob <jerinj@marvell.com>
T: git://dpdk.org/next/dpdk-next-eventdev
-F: lib/librte_eventdev/
+F: lib/eventdev/
F: drivers/event/skeleton/
F: app/test/test_eventdev.c
F: examples/l3fwd/l3fwd_event*
@@ -459,35 +459,35 @@ F: examples/l3fwd/l3fwd_event*
Eventdev Ethdev Rx Adapter API
M: Jay Jayatheerthan <jay.jayatheerthan@intel.com>
T: git://dpdk.org/next/dpdk-next-eventdev
-F: lib/librte_eventdev/*eth_rx_adapter*
+F: lib/eventdev/*eth_rx_adapter*
F: app/test/test_event_eth_rx_adapter.c
F: doc/guides/prog_guide/event_ethernet_rx_adapter.rst
Eventdev Ethdev Tx Adapter API
M: Jay Jayatheerthan <jay.jayatheerthan@intel.com>
T: git://dpdk.org/next/dpdk-next-eventdev
-F: lib/librte_eventdev/*eth_tx_adapter*
+F: lib/eventdev/*eth_tx_adapter*
F: app/test/test_event_eth_tx_adapter.c
F: doc/guides/prog_guide/event_ethernet_tx_adapter.rst
Eventdev Timer Adapter API
M: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
T: git://dpdk.org/next/dpdk-next-eventdev
-F: lib/librte_eventdev/*timer_adapter*
+F: lib/eventdev/*timer_adapter*
F: app/test/test_event_timer_adapter.c
F: doc/guides/prog_guide/event_timer_adapter.rst
Eventdev Crypto Adapter API
M: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
T: git://dpdk.org/next/dpdk-next-eventdev
-F: lib/librte_eventdev/*crypto_adapter*
+F: lib/eventdev/*crypto_adapter*
F: app/test/test_event_crypto_adapter.c
F: doc/guides/prog_guide/event_crypto_adapter.rst
Raw device API
M: Nipun Gupta <nipun.gupta@nxp.com>
M: Hemant Agrawal <hemant.agrawal@nxp.com>
-F: lib/librte_rawdev/
+F: lib/rawdev/
F: drivers/raw/skeleton/
F: app/test/test_rawdev.c
F: doc/guides/prog_guide/rawdev.rst
@@ -554,7 +554,7 @@ F: examples/bond/
Linux KNI
M: Ferruh Yigit <ferruh.yigit@intel.com>
F: kernel/linux/kni/
-F: lib/librte_kni/
+F: lib/kni/
F: doc/guides/prog_guide/kernel_nic_interface.rst
F: app/test/test_kni.c
F: examples/kni/
@@ -897,7 +897,7 @@ Vhost-user
M: Maxime Coquelin <maxime.coquelin@redhat.com>
M: Chenbo Xia <chenbo.xia@intel.com>
T: git://dpdk.org/next/dpdk-next-virtio
-F: lib/librte_vhost/
+F: lib/vhost/
F: doc/guides/prog_guide/vhost_lib.rst
F: examples/vhost/
F: doc/guides/sample_app_ug/vhost.rst
@@ -1296,19 +1296,19 @@ Packet processing
Network headers
M: Olivier Matz <olivier.matz@6wind.com>
-F: lib/librte_net/
+F: lib/net/
Packet CRC
M: Jasvinder Singh <jasvinder.singh@intel.com>
-F: lib/librte_net/net_crc.h
-F: lib/librte_net/rte_net_crc*
-F: lib/librte_net/net_crc_avx512.c
-F: lib/librte_net/net_crc_sse.c
+F: lib/net/net_crc.h
+F: lib/net/rte_net_crc*
+F: lib/net/net_crc_avx512.c
+F: lib/net/net_crc_sse.c
F: app/test/test_crc.c
IP fragmentation & reassembly
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
-F: lib/librte_ip_frag/
+F: lib/ip_frag/
F: doc/guides/prog_guide/ip_fragment_reassembly_lib.rst
F: app/test/test_ipfrag.c
F: examples/ip_fragmentation/
@@ -1318,18 +1318,18 @@ F: doc/guides/sample_app_ug/ip_reassembly.rst
Generic Receive Offload - EXPERIMENTAL
M: Jiayu Hu <jiayu.hu@intel.com>
-F: lib/librte_gro/
+F: lib/gro/
F: doc/guides/prog_guide/generic_receive_offload_lib.rst
Generic Segmentation Offload
M: Jiayu Hu <jiayu.hu@intel.com>
-F: lib/librte_gso/
+F: lib/gso/
F: doc/guides/prog_guide/generic_segmentation_offload_lib.rst
IPsec
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
T: git://dpdk.org/next/dpdk-next-crypto
-F: lib/librte_ipsec/
+F: lib/ipsec/
M: Bernard Iremonger <bernard.iremonger@intel.com>
F: app/test/test_ipsec*
F: doc/guides/prog_guide/ipsec_lib.rst
@@ -1338,7 +1338,7 @@ F: app/test-sad/
Flow Classify - EXPERIMENTAL
M: Bernard Iremonger <bernard.iremonger@intel.com>
-F: lib/librte_flow_classify/
+F: lib/flow_classify/
F: app/test/test_flow_classify*
F: doc/guides/prog_guide/flow_classify_lib.rst
F: examples/flow_classify/
@@ -1346,7 +1346,7 @@ F: doc/guides/sample_app_ug/flow_classify.rst
Distributor
M: David Hunt <david.hunt@intel.com>
-F: lib/librte_distributor/
+F: lib/distributor/
F: doc/guides/prog_guide/packet_distrib_lib.rst
F: app/test/test_distributor*
F: examples/distributor/
@@ -1354,7 +1354,7 @@ F: doc/guides/sample_app_ug/dist_app.rst
Reorder
M: Reshma Pattan <reshma.pattan@intel.com>
-F: lib/librte_reorder/
+F: lib/reorder/
F: doc/guides/prog_guide/reorder_lib.rst
F: app/test/test_reorder*
F: examples/packet_ordering/
@@ -1363,7 +1363,7 @@ F: doc/guides/sample_app_ug/packet_ordering.rst
Hierarchical scheduler
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
M: Jasvinder Singh <jasvinder.singh@intel.com>
-F: lib/librte_sched/
+F: lib/sched/
F: doc/guides/prog_guide/qos_framework.rst
F: app/test/test_red.c
F: app/test/test_sched.c
@@ -1372,7 +1372,7 @@ F: doc/guides/sample_app_ug/qos_scheduler.rst
Packet capture
M: Reshma Pattan <reshma.pattan@intel.com>
-F: lib/librte_pdump/
+F: lib/pdump/
F: doc/guides/prog_guide/pdump_lib.rst
F: app/test/test_pdump.*
F: app/pdump/
@@ -1382,9 +1382,9 @@ F: doc/guides/tools/pdump.rst
Packet Framework
----------------
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
-F: lib/librte_pipeline/
-F: lib/librte_port/
-F: lib/librte_table/
+F: lib/pipeline/
+F: lib/port/
+F: lib/table/
F: doc/guides/prog_guide/packet_framework.rst
F: app/test/test_table*
F: app/test-pipeline/
@@ -1399,7 +1399,7 @@ Algorithms
ACL
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
-F: lib/librte_acl/
+F: lib/acl/
F: doc/guides/prog_guide/packet_classif_access_ctrl.rst
F: app/test-acl/
F: app/test/test_acl.*
@@ -1409,7 +1409,7 @@ F: doc/guides/sample_app_ug/l3_forward_access_ctrl.rst
EFD
M: Byron Marohn <byron.marohn@intel.com>
M: Yipeng Wang <yipeng1.wang@intel.com>
-F: lib/librte_efd/
+F: lib/efd/
F: doc/guides/prog_guide/efd_lib.rst
F: app/test/test_efd*
F: examples/server_node_efd/
@@ -1419,7 +1419,7 @@ Hashes
M: Yipeng Wang <yipeng1.wang@intel.com>
M: Sameh Gobriel <sameh.gobriel@intel.com>
M: Bruce Richardson <bruce.richardson@intel.com>
-F: lib/librte_hash/
+F: lib/hash/
F: doc/guides/prog_guide/hash_lib.rst
F: app/test/test_*hash*
F: app/test/test_func_reentrancy.c
@@ -1427,7 +1427,7 @@ F: app/test/test_func_reentrancy.c
LPM
M: Bruce Richardson <bruce.richardson@intel.com>
M: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
-F: lib/librte_lpm/
+F: lib/lpm/
F: doc/guides/prog_guide/lpm*
F: app/test/test_lpm*
F: app/test/test_func_reentrancy.c
@@ -1436,21 +1436,21 @@ F: app/test/test_xmmt_ops.h
Membership - EXPERIMENTAL
M: Yipeng Wang <yipeng1.wang@intel.com>
M: Sameh Gobriel <sameh.gobriel@intel.com>
-F: lib/librte_member/
+F: lib/member/
F: doc/guides/prog_guide/member_lib.rst
F: app/test/test_member*
RIB/FIB - EXPERIMENTAL
M: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
-F: lib/librte_rib/
+F: lib/rib/
F: app/test/test_rib*
-F: lib/librte_fib/
+F: lib/fib/
F: app/test/test_fib*
F: app/test-fib/
Traffic metering
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
-F: lib/librte_meter/
+F: lib/meter/
F: doc/guides/sample_app_ug/qos_scheduler.rst
F: app/test/test_meter.c
F: examples/qos_meter/
@@ -1462,13 +1462,13 @@ Other libraries
Configuration file
M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
-F: lib/librte_cfgfile/
+F: lib/cfgfile/
F: app/test/test_cfgfile.c
F: app/test/test_cfgfiles/
Interactive command line
M: Olivier Matz <olivier.matz@6wind.com>
-F: lib/librte_cmdline/
+F: lib/cmdline/
F: app/test-cmdline/
F: app/test/test_cmdline*
F: examples/cmdline/
@@ -1476,22 +1476,22 @@ F: doc/guides/sample_app_ug/cmd_line.rst
Key/Value parsing
M: Olivier Matz <olivier.matz@6wind.com>
-F: lib/librte_kvargs/
+F: lib/kvargs/
F: app/test/test_kvargs.c
RCU
M: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
-F: lib/librte_rcu/
+F: lib/rcu/
F: app/test/test_rcu*
F: doc/guides/prog_guide/rcu_lib.rst
PCI
M: Gaetan Rivet <grive@u256.net>
-F: lib/librte_pci/
+F: lib/pci/
Power management
M: David Hunt <david.hunt@intel.com>
-F: lib/librte_power/
+F: lib/power/
F: doc/guides/prog_guide/power_man.rst
F: app/test/test_power*
F: examples/l3fwd-power/
@@ -1502,40 +1502,40 @@ F: doc/guides/sample_app_ug/vm_power_management.rst
Timers
M: Robert Sanford <rsanford@akamai.com>
M: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
-F: lib/librte_timer/
+F: lib/timer/
F: doc/guides/prog_guide/timer_lib.rst
F: app/test/test_timer*
F: examples/timer/
F: doc/guides/sample_app_ug/timer.rst
Job statistics
-F: lib/librte_jobstats/
+F: lib/jobstats/
F: examples/l2fwd-jobstats/
F: doc/guides/sample_app_ug/l2_forward_job_stats.rst
Metrics
-F: lib/librte_metrics/
+F: lib/metrics/
F: app/test/test_metrics.c
Bit-rate statistics
-F: lib/librte_bitratestats/
+F: lib/bitratestats/
F: app/test/test_bitratestats.c
Latency statistics
M: Reshma Pattan <reshma.pattan@intel.com>
-F: lib/librte_latencystats/
+F: lib/latencystats/
F: app/test/test_latencystats.c
Telemetry - EXPERIMENTAL
M: Ciara Power <ciara.power@intel.com>
-F: lib/librte_telemetry/
+F: lib/telemetry/
F: app/test/test_telemetry*
F: usertools/dpdk-telemetry*
F: doc/guides/howto/telemetry.rst
BPF
M: Konstantin Ananyev <konstantin.ananyev@intel.com>
-F: lib/librte_bpf/
+F: lib/bpf/
F: examples/bpf/
F: app/test/test_bpf.c
F: doc/guides/prog_guide/bpf_lib.rst
@@ -1543,7 +1543,7 @@ F: doc/guides/prog_guide/bpf_lib.rst
Graph - EXPERIMENTAL
M: Jerin Jacob <jerinj@marvell.com>
M: Kiran Kumar K <kirankumark@marvell.com>
-F: lib/librte_graph/
+F: lib/graph/
F: doc/guides/prog_guide/graph_lib.rst
F: app/test/test_graph*
M: Nithin Dabilpuram <ndabilpuram@marvell.com>
@@ -1553,7 +1553,7 @@ F: doc/guides/sample_app_ug/l3_forward_graph.rst
Nodes - EXPERIMENTAL
M: Nithin Dabilpuram <ndabilpuram@marvell.com>
M: Pavan Nikhilesh <pbhagavatula@marvell.com>
-F: lib/librte_node/
+F: lib/node/
Test Applications
diff --git a/app/test/test_eal_fs.c b/app/test/test_eal_fs.c
index cae624f82a..bb93b82a43 100644
--- a/app/test/test_eal_fs.c
+++ b/app/test/test_eal_fs.c
@@ -9,7 +9,7 @@
#include <errno.h>
/* eal_filesystem.h is not a public header file, so use relative path */
-#include "../../lib/librte_eal/common/eal_filesystem.h"
+#include "../../lib/eal/common/eal_filesystem.h"
static int
test_parse_sysfs_value(void)
diff --git a/app/test/test_memzone.c b/app/test/test_memzone.c
index 0343b0326e..03a9d1d3bb 100644
--- a/app/test/test_memzone.c
+++ b/app/test/test_memzone.c
@@ -18,7 +18,7 @@
#include <rte_string_fns.h>
#include <rte_errno.h>
#include <rte_malloc.h>
-#include "../../lib/librte_eal/common/malloc_elem.h"
+#include "../../lib/eal/common/malloc_elem.h"
#include "test.h"
diff --git a/app/test/test_telemetry_json.c b/app/test/test_telemetry_json.c
index 7a91490f4c..3171ab12ec 100644
--- a/app/test/test_telemetry_json.c
+++ b/app/test/test_telemetry_json.c
@@ -4,7 +4,7 @@
#include <string.h>
-#include "../../lib/librte_telemetry/telemetry_json.h"
+#include "../../lib/telemetry/telemetry_json.h"
#include "test.h"
static int
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 39f79b5f86..809df11379 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -6,7 +6,7 @@
flags_common = [
# Accelerate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest)
# to determine the best threshold in code. Refer to notes in source file
- # (lib/librte_eal/arm/include/rte_memcpy_64.h) for more info.
+ # (lib/eal/arm/include/rte_memcpy_64.h) for more info.
['RTE_ARCH_ARM64_MEMCPY', false],
# ['RTE_ARM64_MEMCPY_ALIGNED_THRESHOLD', 2048],
# ['RTE_ARM64_MEMCPY_UNALIGNED_THRESHOLD', 512],
diff --git a/devtools/build-tags.sh b/devtools/build-tags.sh
index 8fa01ad177..0361135d6e 100755
--- a/devtools/build-tags.sh
+++ b/devtools/build-tags.sh
@@ -67,13 +67,13 @@ common_sources()
linux_sources()
{
- find_sources "lib/librte_eal/linux" '*.[chS]'
+ find_sources "lib/eal/linux" '*.[chS]'
find_sources "kernel/linux" '*.[chS]'
}
bsd_sources()
{
- find_sources "lib/librte_eal/freebsd" '*.[chS]'
+ find_sources "lib/eal/freebsd" '*.[chS]'
find_sources "kernel/freebsd" '*.[chS]'
}
@@ -85,14 +85,14 @@ arm_common()
arm_32_sources()
{
arm_common
- find_sources "lib/librte_eal/arm" '*.[chS]' \
+ find_sources "lib/eal/arm" '*.[chS]' \
"$skip_64b_files"
}
arm_64_sources()
{
arm_common
- find_sources "lib/librte_eal/arm" '*.[chS]' \
+ find_sources "lib/eal/arm" '*.[chS]' \
"$skip_32b_files"
find_sources "$source_dirs" '*arm64.[chS]'
}
@@ -108,20 +108,20 @@ x86_common()
x86_32_sources()
{
x86_common
- find_sources "lib/librte_eal/x86" '*.[chS]' \
+ find_sources "lib/eal/x86" '*.[chS]' \
"$skip_64b_files"
}
x86_64_sources()
{
x86_common
- find_sources "lib/librte_eal/x86" '*.[chS]' \
+ find_sources "lib/eal/x86" '*.[chS]' \
"$skip_32b_files"
}
ppc_64_sources()
{
- find_sources "lib/librte_eal/ppc" '*.[chS]'
+ find_sources "lib/eal/ppc" '*.[chS]'
find_sources "$source_dirs" '*altivec*.[chS]'
}
diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
index b3c5cdfeca..bd521a3e73 100644
--- a/doc/api/doxy-api.conf.in
+++ b/doc/api/doxy-api.conf.in
@@ -25,58 +25,58 @@ INPUT = @TOPDIR@/doc/api/doxy-api-index.md \
@TOPDIR@/drivers/raw/dpaa2_qdma \
@TOPDIR@/drivers/raw/ifpga \
@TOPDIR@/drivers/raw/ioat \
- @TOPDIR@/lib/librte_eal/include \
- @TOPDIR@/lib/librte_eal/include/generic \
- @TOPDIR@/lib/librte_acl \
- @TOPDIR@/lib/librte_bbdev \
- @TOPDIR@/lib/librte_bitratestats \
- @TOPDIR@/lib/librte_bpf \
- @TOPDIR@/lib/librte_cfgfile \
- @TOPDIR@/lib/librte_cmdline \
- @TOPDIR@/lib/librte_compressdev \
- @TOPDIR@/lib/librte_cryptodev \
- @TOPDIR@/lib/librte_distributor \
- @TOPDIR@/lib/librte_efd \
- @TOPDIR@/lib/librte_ethdev \
- @TOPDIR@/lib/librte_eventdev \
- @TOPDIR@/lib/librte_fib \
- @TOPDIR@/lib/librte_flow_classify \
- @TOPDIR@/lib/librte_graph \
- @TOPDIR@/lib/librte_gro \
- @TOPDIR@/lib/librte_gso \
- @TOPDIR@/lib/librte_hash \
- @TOPDIR@/lib/librte_ip_frag \
- @TOPDIR@/lib/librte_ipsec \
- @TOPDIR@/lib/librte_jobstats \
- @TOPDIR@/lib/librte_kni \
- @TOPDIR@/lib/librte_kvargs \
- @TOPDIR@/lib/librte_latencystats \
- @TOPDIR@/lib/librte_lpm \
- @TOPDIR@/lib/librte_mbuf \
- @TOPDIR@/lib/librte_member \
- @TOPDIR@/lib/librte_mempool \
- @TOPDIR@/lib/librte_meter \
- @TOPDIR@/lib/librte_metrics \
- @TOPDIR@/lib/librte_node \
- @TOPDIR@/lib/librte_net \
- @TOPDIR@/lib/librte_pci \
- @TOPDIR@/lib/librte_pdump \
- @TOPDIR@/lib/librte_pipeline \
- @TOPDIR@/lib/librte_port \
- @TOPDIR@/lib/librte_power \
- @TOPDIR@/lib/librte_rawdev \
- @TOPDIR@/lib/librte_rcu \
- @TOPDIR@/lib/librte_regexdev \
- @TOPDIR@/lib/librte_reorder \
- @TOPDIR@/lib/librte_rib \
- @TOPDIR@/lib/librte_ring \
- @TOPDIR@/lib/librte_sched \
- @TOPDIR@/lib/librte_security \
- @TOPDIR@/lib/librte_stack \
- @TOPDIR@/lib/librte_table \
- @TOPDIR@/lib/librte_telemetry \
- @TOPDIR@/lib/librte_timer \
- @TOPDIR@/lib/librte_vhost
+ @TOPDIR@/lib/eal/include \
+ @TOPDIR@/lib/eal/include/generic \
+ @TOPDIR@/lib/acl \
+ @TOPDIR@/lib/bbdev \
+ @TOPDIR@/lib/bitratestats \
+ @TOPDIR@/lib/bpf \
+ @TOPDIR@/lib/cfgfile \
+ @TOPDIR@/lib/cmdline \
+ @TOPDIR@/lib/compressdev \
+ @TOPDIR@/lib/cryptodev \
+ @TOPDIR@/lib/distributor \
+ @TOPDIR@/lib/efd \
+ @TOPDIR@/lib/ethdev \
+ @TOPDIR@/lib/eventdev \
+ @TOPDIR@/lib/fib \
+ @TOPDIR@/lib/flow_classify \
+ @TOPDIR@/lib/graph \
+ @TOPDIR@/lib/gro \
+ @TOPDIR@/lib/gso \
+ @TOPDIR@/lib/hash \
+ @TOPDIR@/lib/ip_frag \
+ @TOPDIR@/lib/ipsec \
+ @TOPDIR@/lib/jobstats \
+ @TOPDIR@/lib/kni \
+ @TOPDIR@/lib/kvargs \
+ @TOPDIR@/lib/latencystats \
+ @TOPDIR@/lib/lpm \
+ @TOPDIR@/lib/mbuf \
+ @TOPDIR@/lib/member \
+ @TOPDIR@/lib/mempool \
+ @TOPDIR@/lib/meter \
+ @TOPDIR@/lib/metrics \
+ @TOPDIR@/lib/node \
+ @TOPDIR@/lib/net \
+ @TOPDIR@/lib/pci \
+ @TOPDIR@/lib/pdump \
+ @TOPDIR@/lib/pipeline \
+ @TOPDIR@/lib/port \
+ @TOPDIR@/lib/power \
+ @TOPDIR@/lib/rawdev \
+ @TOPDIR@/lib/rcu \
+ @TOPDIR@/lib/regexdev \
+ @TOPDIR@/lib/reorder \
+ @TOPDIR@/lib/rib \
+ @TOPDIR@/lib/ring \
+ @TOPDIR@/lib/sched \
+ @TOPDIR@/lib/security \
+ @TOPDIR@/lib/stack \
+ @TOPDIR@/lib/table \
+ @TOPDIR@/lib/telemetry \
+ @TOPDIR@/lib/timer \
+ @TOPDIR@/lib/vhost
INPUT += @API_EXAMPLES@
FILE_PATTERNS = rte_*.h \
cmdline.h
diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 91ada18dd7..7ff18f4f74 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -58,12 +58,12 @@ persists over multiple releases.
.. code-block:: none
- $ head ./lib/librte_acl/version.map
+ $ head ./lib/acl/version.map
DPDK_21 {
global:
...
- $ head ./lib/librte_eal/version.map
+ $ head ./lib/eal/version.map
DPDK_21 {
global:
...
@@ -77,7 +77,7 @@ that library.
.. code-block:: none
- $ head ./lib/librte_acl/version.map
+ $ head ./lib/acl/version.map
DPDK_21 {
global:
...
@@ -88,7 +88,7 @@ that library.
} DPDK_21;
...
- $ head ./lib/librte_eal/version.map
+ $ head ./lib/eal/version.map
DPDK_21 {
global:
...
@@ -100,12 +100,12 @@ how this may be done.
.. code-block:: none
- $ head ./lib/librte_acl/version.map
+ $ head ./lib/acl/version.map
DPDK_22 {
global:
...
- $ head ./lib/librte_eal/version.map
+ $ head ./lib/eal/version.map
DPDK_22 {
global:
...
diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
index 734d1901b2..45f9565128 100644
--- a/doc/guides/contributing/coding_style.rst
+++ b/doc/guides/contributing/coding_style.rst
@@ -759,7 +759,7 @@ Examples:
* The virtio network PMD in ``drivers/net/virtio`` uses ``pmd.net.virtio``
* The eventdev software poll mode driver in ``drivers/event/sw`` uses ``pmd.event.sw``
* The octeontx mempool driver in ``drivers/mempool/octeontx`` uses ``pmd.mempool.octeontx``
- * The DPDK hash library in ``lib/librte_hash`` uses ``lib.hash``
+ * The DPDK hash library in ``lib/hash`` uses ``lib.hash``
Specializations
~~~~~~~~~~~~~~~
@@ -918,7 +918,7 @@ name
If a library's .so or .a file differs from that given in the directory
name, the name should be specified using this variable. In practice,
since the convention is that for a library called ``librte_xyz.so``, the
- sources are stored in a directory ``lib/librte_xyz``, this value should
+ sources are stored in a directory ``lib/xyz``, this value should
never be needed for new libraries.
.. note::
diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
index a4e6be6aca..842549a4c8 100644
--- a/doc/guides/contributing/documentation.rst
+++ b/doc/guides/contributing/documentation.rst
@@ -19,10 +19,10 @@ The DPDK source code repository contains input files to build the API documentat
The main directories that contain files related to documentation are shown below::
lib
- |-- librte_acl
- |-- librte_cfgfile
- |-- librte_cmdline
- |-- librte_eal
+ |-- acl
+ |-- cfgfile
+ |-- cmdline
+ |-- eal
| |-- ...
...
doc
@@ -40,7 +40,7 @@ The main directories that contain files related to documentation are shown below
The API documentation is built from `Doxygen <http://www.doxygen.nl>`_ comments in the header files.
-These files are mainly in the ``lib/librte_*`` directories although some of the Poll Mode Drivers in ``drivers/net``
+These files are mainly in the ``lib/*`` directories although some of the Poll Mode Drivers in ``drivers/net``
are also documented with Doxygen.
The configuration files that are used to control the Doxygen output are in the ``doc/api`` directory.
diff --git a/doc/guides/prog_guide/event_timer_adapter.rst b/doc/guides/prog_guide/event_timer_adapter.rst
index a95efbe0d8..277b0e7d54 100644
--- a/doc/guides/prog_guide/event_timer_adapter.rst
+++ b/doc/guides/prog_guide/event_timer_adapter.rst
@@ -35,7 +35,7 @@ device upon timer expiration.
The Event Timer Adapter API represents each event timer with a generic struct,
which contains an event and user metadata. The ``rte_event_timer`` struct is
-defined in ``lib/librte_event/librte_event_timer_adapter.h``.
+defined in ``lib/event/librte_event_timer_adapter.h``.
.. _timer_expiry_event:
diff --git a/doc/guides/prog_guide/qos_framework.rst b/doc/guides/prog_guide/qos_framework.rst
index 4e4ea33ccb..7d410d3cc6 100644
--- a/doc/guides/prog_guide/qos_framework.rst
+++ b/doc/guides/prog_guide/qos_framework.rst
@@ -1517,9 +1517,9 @@ Source Files Location
The source files for the DPDK dropper are located at:
-* DPDK/lib/librte_sched/rte_red.h
+* DPDK/lib/sched/rte_red.h
-* DPDK/lib/librte_sched/rte_red.c
+* DPDK/lib/sched/rte_red.c
Integration with the DPDK QoS Scheduler
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/guides/prog_guide/rawdev.rst b/doc/guides/prog_guide/rawdev.rst
index a712c7fa99..488e0a7ef6 100644
--- a/doc/guides/prog_guide/rawdev.rst
+++ b/doc/guides/prog_guide/rawdev.rst
@@ -13,7 +13,7 @@ In terms of device flavor (type) support, DPDK currently has ethernet
For a new type of device, for example an accelerator, there are not many
options except:
-1. create another lib/librte_MySpecialDev, driver/MySpecialDrv and use it
+1. create another lib/MySpecialDev, driver/MySpecialDrv and use it
through Bus/PMD model.
2. Or, create a vdev and implement necessary custom APIs which are directly
exposed from driver layer. However this may still require changes in bus code
diff --git a/doc/guides/rel_notes/known_issues.rst b/doc/guides/rel_notes/known_issues.rst
index ee3ed1e658..43323e1a43 100644
--- a/doc/guides/rel_notes/known_issues.rst
+++ b/doc/guides/rel_notes/known_issues.rst
@@ -127,7 +127,7 @@ HPET timers do not work on the Osage customer reference platform
work correctly, provided the BIOS supports HPET.
**Driver/Module**:
- ``lib/librte_eal/include/rte_cycles.h``
+ ``lib/eal/include/rte_cycles.h``
Not all variants of supported NIC types have been used in testing
diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build
index a2b07fd23c..94ce447261 100644
--- a/drivers/common/mlx5/linux/meson.build
+++ b/drivers/common/mlx5/linux/meson.build
@@ -208,7 +208,7 @@ if dlopen_ibverbs
dlopen_install_dir = [ eal_pmd_path + '-glue' ]
dlopen_includes = [global_inc]
dlopen_includes += include_directories(
- '../../../../lib/librte_eal/include/generic',
+ '../../../../lib/eal/include/generic',
)
shared_lib = shared_library(
dlopen_lib_name,
diff --git a/drivers/crypto/virtio/meson.build b/drivers/crypto/virtio/meson.build
index 950f411327..7ecf3aa33d 100644
--- a/drivers/crypto/virtio/meson.build
+++ b/drivers/crypto/virtio/meson.build
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2018 HUAWEI TECHNOLOGIES CO., LTD.
-includes += include_directories('../../../lib/librte_vhost')
+includes += include_directories('../../../lib/vhost')
deps += 'bus_pci'
sources = files('virtio_cryptodev.c', 'virtio_pci.c',
'virtio_rxtx.c', 'virtqueue.c')
diff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build
index 15d848b28d..05d28e781a 100644
--- a/kernel/linux/kni/meson.build
+++ b/kernel/linux/kni/meson.build
@@ -17,8 +17,8 @@ custom_target('rte_kni',
'M=' + meson.current_build_dir(),
'src=' + meson.current_source_dir(),
'MODULE_CFLAGS=-include ' + meson.source_root() + '/config/rte_config.h' +
- ' -I' + meson.source_root() + '/lib/librte_eal/include' +
- ' -I' + meson.source_root() + '/lib/librte_kni' +
+ ' -I' + meson.source_root() + '/lib/eal/include' +
+ ' -I' + meson.source_root() + '/lib/kni' +
' -I' + meson.build_root() +
' -I' + meson.current_source_dir(),
'modules'] + cross_args,
diff --git a/lib/librte_acl/acl.h b/lib/acl/acl.h
similarity index 100%
rename from lib/librte_acl/acl.h
rename to lib/acl/acl.h
diff --git a/lib/librte_acl/acl_bld.c b/lib/acl/acl_bld.c
similarity index 100%
rename from lib/librte_acl/acl_bld.c
rename to lib/acl/acl_bld.c
diff --git a/lib/librte_acl/acl_gen.c b/lib/acl/acl_gen.c
similarity index 100%
rename from lib/librte_acl/acl_gen.c
rename to lib/acl/acl_gen.c
diff --git a/lib/librte_acl/acl_run.h b/lib/acl/acl_run.h
similarity index 100%
rename from lib/librte_acl/acl_run.h
rename to lib/acl/acl_run.h
diff --git a/lib/librte_acl/acl_run_altivec.c b/lib/acl/acl_run_altivec.c
similarity index 100%
rename from lib/librte_acl/acl_run_altivec.c
rename to lib/acl/acl_run_altivec.c
diff --git a/lib/librte_acl/acl_run_altivec.h b/lib/acl/acl_run_altivec.h
similarity index 100%
rename from lib/librte_acl/acl_run_altivec.h
rename to lib/acl/acl_run_altivec.h
diff --git a/lib/librte_acl/acl_run_avx2.c b/lib/acl/acl_run_avx2.c
similarity index 100%
rename from lib/librte_acl/acl_run_avx2.c
rename to lib/acl/acl_run_avx2.c
diff --git a/lib/librte_acl/acl_run_avx2.h b/lib/acl/acl_run_avx2.h
similarity index 100%
rename from lib/librte_acl/acl_run_avx2.h
rename to lib/acl/acl_run_avx2.h
diff --git a/lib/librte_acl/acl_run_avx512.c b/lib/acl/acl_run_avx512.c
similarity index 100%
rename from lib/librte_acl/acl_run_avx512.c
rename to lib/acl/acl_run_avx512.c
diff --git a/lib/librte_acl/acl_run_avx512_common.h b/lib/acl/acl_run_avx512_common.h
similarity index 100%
rename from lib/librte_acl/acl_run_avx512_common.h
rename to lib/acl/acl_run_avx512_common.h
diff --git a/lib/librte_acl/acl_run_avx512x16.h b/lib/acl/acl_run_avx512x16.h
similarity index 100%
rename from lib/librte_acl/acl_run_avx512x16.h
rename to lib/acl/acl_run_avx512x16.h
diff --git a/lib/librte_acl/acl_run_avx512x8.h b/lib/acl/acl_run_avx512x8.h
similarity index 100%
rename from lib/librte_acl/acl_run_avx512x8.h
rename to lib/acl/acl_run_avx512x8.h
diff --git a/lib/librte_acl/acl_run_neon.c b/lib/acl/acl_run_neon.c
similarity index 100%
rename from lib/librte_acl/acl_run_neon.c
rename to lib/acl/acl_run_neon.c
diff --git a/lib/librte_acl/acl_run_neon.h b/lib/acl/acl_run_neon.h
similarity index 100%
rename from lib/librte_acl/acl_run_neon.h
rename to lib/acl/acl_run_neon.h
diff --git a/lib/librte_acl/acl_run_scalar.c b/lib/acl/acl_run_scalar.c
similarity index 100%
rename from lib/librte_acl/acl_run_scalar.c
rename to lib/acl/acl_run_scalar.c
diff --git a/lib/librte_acl/acl_run_sse.c b/lib/acl/acl_run_sse.c
similarity index 100%
rename from lib/librte_acl/acl_run_sse.c
rename to lib/acl/acl_run_sse.c
diff --git a/lib/librte_acl/acl_run_sse.h b/lib/acl/acl_run_sse.h
similarity index 100%
rename from lib/librte_acl/acl_run_sse.h
rename to lib/acl/acl_run_sse.h
diff --git a/lib/librte_acl/acl_vect.h b/lib/acl/acl_vect.h
similarity index 100%
rename from lib/librte_acl/acl_vect.h
rename to lib/acl/acl_vect.h
diff --git a/lib/librte_acl/meson.build b/lib/acl/meson.build
similarity index 100%
rename from lib/librte_acl/meson.build
rename to lib/acl/meson.build
diff --git a/lib/librte_acl/rte_acl.c b/lib/acl/rte_acl.c
similarity index 100%
rename from lib/librte_acl/rte_acl.c
rename to lib/acl/rte_acl.c
diff --git a/lib/librte_acl/rte_acl.h b/lib/acl/rte_acl.h
similarity index 100%
rename from lib/librte_acl/rte_acl.h
rename to lib/acl/rte_acl.h
diff --git a/lib/librte_acl/rte_acl_osdep.h b/lib/acl/rte_acl_osdep.h
similarity index 100%
rename from lib/librte_acl/rte_acl_osdep.h
rename to lib/acl/rte_acl_osdep.h
diff --git a/lib/librte_acl/tb_mem.c b/lib/acl/tb_mem.c
similarity index 100%
rename from lib/librte_acl/tb_mem.c
rename to lib/acl/tb_mem.c
diff --git a/lib/librte_acl/tb_mem.h b/lib/acl/tb_mem.h
similarity index 100%
rename from lib/librte_acl/tb_mem.h
rename to lib/acl/tb_mem.h
diff --git a/lib/librte_acl/version.map b/lib/acl/version.map
similarity index 100%
rename from lib/librte_acl/version.map
rename to lib/acl/version.map
diff --git a/lib/librte_bbdev/meson.build b/lib/bbdev/meson.build
similarity index 100%
rename from lib/librte_bbdev/meson.build
rename to lib/bbdev/meson.build
diff --git a/lib/librte_bbdev/rte_bbdev.c b/lib/bbdev/rte_bbdev.c
similarity index 100%
rename from lib/librte_bbdev/rte_bbdev.c
rename to lib/bbdev/rte_bbdev.c
diff --git a/lib/librte_bbdev/rte_bbdev.h b/lib/bbdev/rte_bbdev.h
similarity index 100%
rename from lib/librte_bbdev/rte_bbdev.h
rename to lib/bbdev/rte_bbdev.h
diff --git a/lib/librte_bbdev/rte_bbdev_op.h b/lib/bbdev/rte_bbdev_op.h
similarity index 100%
rename from lib/librte_bbdev/rte_bbdev_op.h
rename to lib/bbdev/rte_bbdev_op.h
diff --git a/lib/librte_bbdev/rte_bbdev_pmd.h b/lib/bbdev/rte_bbdev_pmd.h
similarity index 100%
rename from lib/librte_bbdev/rte_bbdev_pmd.h
rename to lib/bbdev/rte_bbdev_pmd.h
diff --git a/lib/librte_bbdev/version.map b/lib/bbdev/version.map
similarity index 100%
rename from lib/librte_bbdev/version.map
rename to lib/bbdev/version.map
diff --git a/lib/librte_bitratestats/meson.build b/lib/bitratestats/meson.build
similarity index 100%
rename from lib/librte_bitratestats/meson.build
rename to lib/bitratestats/meson.build
diff --git a/lib/librte_bitratestats/rte_bitrate.c b/lib/bitratestats/rte_bitrate.c
similarity index 100%
rename from lib/librte_bitratestats/rte_bitrate.c
rename to lib/bitratestats/rte_bitrate.c
diff --git a/lib/librte_bitratestats/rte_bitrate.h b/lib/bitratestats/rte_bitrate.h
similarity index 100%
rename from lib/librte_bitratestats/rte_bitrate.h
rename to lib/bitratestats/rte_bitrate.h
diff --git a/lib/librte_bitratestats/version.map b/lib/bitratestats/version.map
similarity index 100%
rename from lib/librte_bitratestats/version.map
rename to lib/bitratestats/version.map
diff --git a/lib/librte_bpf/bpf.c b/lib/bpf/bpf.c
similarity index 100%
rename from lib/librte_bpf/bpf.c
rename to lib/bpf/bpf.c
diff --git a/lib/librte_bpf/bpf_def.h b/lib/bpf/bpf_def.h
similarity index 100%
rename from lib/librte_bpf/bpf_def.h
rename to lib/bpf/bpf_def.h
diff --git a/lib/librte_bpf/bpf_exec.c b/lib/bpf/bpf_exec.c
similarity index 100%
rename from lib/librte_bpf/bpf_exec.c
rename to lib/bpf/bpf_exec.c
diff --git a/lib/librte_bpf/bpf_impl.h b/lib/bpf/bpf_impl.h
similarity index 100%
rename from lib/librte_bpf/bpf_impl.h
rename to lib/bpf/bpf_impl.h
diff --git a/lib/librte_bpf/bpf_jit_arm64.c b/lib/bpf/bpf_jit_arm64.c
similarity index 100%
rename from lib/librte_bpf/bpf_jit_arm64.c
rename to lib/bpf/bpf_jit_arm64.c
diff --git a/lib/librte_bpf/bpf_jit_x86.c b/lib/bpf/bpf_jit_x86.c
similarity index 100%
rename from lib/librte_bpf/bpf_jit_x86.c
rename to lib/bpf/bpf_jit_x86.c
diff --git a/lib/librte_bpf/bpf_load.c b/lib/bpf/bpf_load.c
similarity index 100%
rename from lib/librte_bpf/bpf_load.c
rename to lib/bpf/bpf_load.c
diff --git a/lib/librte_bpf/bpf_load_elf.c b/lib/bpf/bpf_load_elf.c
similarity index 100%
rename from lib/librte_bpf/bpf_load_elf.c
rename to lib/bpf/bpf_load_elf.c
diff --git a/lib/librte_bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c
similarity index 100%
rename from lib/librte_bpf/bpf_pkt.c
rename to lib/bpf/bpf_pkt.c
diff --git a/lib/librte_bpf/bpf_validate.c b/lib/bpf/bpf_validate.c
similarity index 100%
rename from lib/librte_bpf/bpf_validate.c
rename to lib/bpf/bpf_validate.c
diff --git a/lib/librte_bpf/meson.build b/lib/bpf/meson.build
similarity index 100%
rename from lib/librte_bpf/meson.build
rename to lib/bpf/meson.build
diff --git a/lib/librte_bpf/rte_bpf.h b/lib/bpf/rte_bpf.h
similarity index 100%
rename from lib/librte_bpf/rte_bpf.h
rename to lib/bpf/rte_bpf.h
diff --git a/lib/librte_bpf/rte_bpf_ethdev.h b/lib/bpf/rte_bpf_ethdev.h
similarity index 100%
rename from lib/librte_bpf/rte_bpf_ethdev.h
rename to lib/bpf/rte_bpf_ethdev.h
diff --git a/lib/librte_bpf/version.map b/lib/bpf/version.map
similarity index 100%
rename from lib/librte_bpf/version.map
rename to lib/bpf/version.map
diff --git a/lib/librte_cfgfile/meson.build b/lib/cfgfile/meson.build
similarity index 100%
rename from lib/librte_cfgfile/meson.build
rename to lib/cfgfile/meson.build
diff --git a/lib/librte_cfgfile/rte_cfgfile.c b/lib/cfgfile/rte_cfgfile.c
similarity index 100%
rename from lib/librte_cfgfile/rte_cfgfile.c
rename to lib/cfgfile/rte_cfgfile.c
diff --git a/lib/librte_cfgfile/rte_cfgfile.h b/lib/cfgfile/rte_cfgfile.h
similarity index 100%
rename from lib/librte_cfgfile/rte_cfgfile.h
rename to lib/cfgfile/rte_cfgfile.h
diff --git a/lib/librte_cfgfile/version.map b/lib/cfgfile/version.map
similarity index 100%
rename from lib/librte_cfgfile/version.map
rename to lib/cfgfile/version.map
diff --git a/lib/librte_cmdline/cmdline.c b/lib/cmdline/cmdline.c
similarity index 100%
rename from lib/librte_cmdline/cmdline.c
rename to lib/cmdline/cmdline.c
diff --git a/lib/librte_cmdline/cmdline.h b/lib/cmdline/cmdline.h
similarity index 100%
rename from lib/librte_cmdline/cmdline.h
rename to lib/cmdline/cmdline.h
diff --git a/lib/librte_cmdline/cmdline_cirbuf.c b/lib/cmdline/cmdline_cirbuf.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_cirbuf.c
rename to lib/cmdline/cmdline_cirbuf.c
diff --git a/lib/librte_cmdline/cmdline_cirbuf.h b/lib/cmdline/cmdline_cirbuf.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_cirbuf.h
rename to lib/cmdline/cmdline_cirbuf.h
diff --git a/lib/librte_cmdline/cmdline_os_unix.c b/lib/cmdline/cmdline_os_unix.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_os_unix.c
rename to lib/cmdline/cmdline_os_unix.c
diff --git a/lib/librte_cmdline/cmdline_os_windows.c b/lib/cmdline/cmdline_os_windows.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_os_windows.c
rename to lib/cmdline/cmdline_os_windows.c
diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/cmdline/cmdline_parse.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse.c
rename to lib/cmdline/cmdline_parse.c
diff --git a/lib/librte_cmdline/cmdline_parse.h b/lib/cmdline/cmdline_parse.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse.h
rename to lib/cmdline/cmdline_parse.h
diff --git a/lib/librte_cmdline/cmdline_parse_etheraddr.c b/lib/cmdline/cmdline_parse_etheraddr.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_etheraddr.c
rename to lib/cmdline/cmdline_parse_etheraddr.c
diff --git a/lib/librte_cmdline/cmdline_parse_etheraddr.h b/lib/cmdline/cmdline_parse_etheraddr.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_etheraddr.h
rename to lib/cmdline/cmdline_parse_etheraddr.h
diff --git a/lib/librte_cmdline/cmdline_parse_ipaddr.c b/lib/cmdline/cmdline_parse_ipaddr.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_ipaddr.c
rename to lib/cmdline/cmdline_parse_ipaddr.c
diff --git a/lib/librte_cmdline/cmdline_parse_ipaddr.h b/lib/cmdline/cmdline_parse_ipaddr.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_ipaddr.h
rename to lib/cmdline/cmdline_parse_ipaddr.h
diff --git a/lib/librte_cmdline/cmdline_parse_num.c b/lib/cmdline/cmdline_parse_num.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_num.c
rename to lib/cmdline/cmdline_parse_num.c
diff --git a/lib/librte_cmdline/cmdline_parse_num.h b/lib/cmdline/cmdline_parse_num.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_num.h
rename to lib/cmdline/cmdline_parse_num.h
diff --git a/lib/librte_cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_portlist.c
rename to lib/cmdline/cmdline_parse_portlist.c
diff --git a/lib/librte_cmdline/cmdline_parse_portlist.h b/lib/cmdline/cmdline_parse_portlist.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_portlist.h
rename to lib/cmdline/cmdline_parse_portlist.h
diff --git a/lib/librte_cmdline/cmdline_parse_string.c b/lib/cmdline/cmdline_parse_string.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_string.c
rename to lib/cmdline/cmdline_parse_string.c
diff --git a/lib/librte_cmdline/cmdline_parse_string.h b/lib/cmdline/cmdline_parse_string.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_parse_string.h
rename to lib/cmdline/cmdline_parse_string.h
diff --git a/lib/librte_cmdline/cmdline_private.h b/lib/cmdline/cmdline_private.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_private.h
rename to lib/cmdline/cmdline_private.h
diff --git a/lib/librte_cmdline/cmdline_rdline.c b/lib/cmdline/cmdline_rdline.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_rdline.c
rename to lib/cmdline/cmdline_rdline.c
diff --git a/lib/librte_cmdline/cmdline_rdline.h b/lib/cmdline/cmdline_rdline.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_rdline.h
rename to lib/cmdline/cmdline_rdline.h
diff --git a/lib/librte_cmdline/cmdline_socket.c b/lib/cmdline/cmdline_socket.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_socket.c
rename to lib/cmdline/cmdline_socket.c
diff --git a/lib/librte_cmdline/cmdline_socket.h b/lib/cmdline/cmdline_socket.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_socket.h
rename to lib/cmdline/cmdline_socket.h
diff --git a/lib/librte_cmdline/cmdline_vt100.c b/lib/cmdline/cmdline_vt100.c
similarity index 100%
rename from lib/librte_cmdline/cmdline_vt100.c
rename to lib/cmdline/cmdline_vt100.c
diff --git a/lib/librte_cmdline/cmdline_vt100.h b/lib/cmdline/cmdline_vt100.h
similarity index 100%
rename from lib/librte_cmdline/cmdline_vt100.h
rename to lib/cmdline/cmdline_vt100.h
diff --git a/lib/librte_cmdline/meson.build b/lib/cmdline/meson.build
similarity index 100%
rename from lib/librte_cmdline/meson.build
rename to lib/cmdline/meson.build
diff --git a/lib/librte_cmdline/version.map b/lib/cmdline/version.map
similarity index 100%
rename from lib/librte_cmdline/version.map
rename to lib/cmdline/version.map
diff --git a/lib/librte_compressdev/meson.build b/lib/compressdev/meson.build
similarity index 100%
rename from lib/librte_compressdev/meson.build
rename to lib/compressdev/meson.build
diff --git a/lib/librte_compressdev/rte_comp.c b/lib/compressdev/rte_comp.c
similarity index 100%
rename from lib/librte_compressdev/rte_comp.c
rename to lib/compressdev/rte_comp.c
diff --git a/lib/librte_compressdev/rte_comp.h b/lib/compressdev/rte_comp.h
similarity index 100%
rename from lib/librte_compressdev/rte_comp.h
rename to lib/compressdev/rte_comp.h
diff --git a/lib/librte_compressdev/rte_compressdev.c b/lib/compressdev/rte_compressdev.c
similarity index 100%
rename from lib/librte_compressdev/rte_compressdev.c
rename to lib/compressdev/rte_compressdev.c
diff --git a/lib/librte_compressdev/rte_compressdev.h b/lib/compressdev/rte_compressdev.h
similarity index 100%
rename from lib/librte_compressdev/rte_compressdev.h
rename to lib/compressdev/rte_compressdev.h
diff --git a/lib/librte_compressdev/rte_compressdev_internal.h b/lib/compressdev/rte_compressdev_internal.h
similarity index 100%
rename from lib/librte_compressdev/rte_compressdev_internal.h
rename to lib/compressdev/rte_compressdev_internal.h
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.c b/lib/compressdev/rte_compressdev_pmd.c
similarity index 100%
rename from lib/librte_compressdev/rte_compressdev_pmd.c
rename to lib/compressdev/rte_compressdev_pmd.c
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.h b/lib/compressdev/rte_compressdev_pmd.h
similarity index 100%
rename from lib/librte_compressdev/rte_compressdev_pmd.h
rename to lib/compressdev/rte_compressdev_pmd.h
diff --git a/lib/librte_compressdev/version.map b/lib/compressdev/version.map
similarity index 100%
rename from lib/librte_compressdev/version.map
rename to lib/compressdev/version.map
diff --git a/lib/librte_cryptodev/cryptodev_trace_points.c b/lib/cryptodev/cryptodev_trace_points.c
similarity index 100%
rename from lib/librte_cryptodev/cryptodev_trace_points.c
rename to lib/cryptodev/cryptodev_trace_points.c
diff --git a/lib/librte_cryptodev/meson.build b/lib/cryptodev/meson.build
similarity index 100%
rename from lib/librte_cryptodev/meson.build
rename to lib/cryptodev/meson.build
diff --git a/lib/librte_cryptodev/rte_crypto.h b/lib/cryptodev/rte_crypto.h
similarity index 100%
rename from lib/librte_cryptodev/rte_crypto.h
rename to lib/cryptodev/rte_crypto.h
diff --git a/lib/librte_cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h
similarity index 100%
rename from lib/librte_cryptodev/rte_crypto_asym.h
rename to lib/cryptodev/rte_crypto_asym.h
diff --git a/lib/librte_cryptodev/rte_crypto_sym.h b/lib/cryptodev/rte_crypto_sym.h
similarity index 100%
rename from lib/librte_cryptodev/rte_crypto_sym.h
rename to lib/cryptodev/rte_crypto_sym.h
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev.c
rename to lib/cryptodev/rte_cryptodev.c
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev.h
rename to lib/cryptodev/rte_cryptodev.h
diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.c b/lib/cryptodev/rte_cryptodev_pmd.c
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev_pmd.c
rename to lib/cryptodev/rte_cryptodev_pmd.c
diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h b/lib/cryptodev/rte_cryptodev_pmd.h
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev_pmd.h
rename to lib/cryptodev/rte_cryptodev_pmd.h
diff --git a/lib/librte_cryptodev/rte_cryptodev_trace.h b/lib/cryptodev/rte_cryptodev_trace.h
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev_trace.h
rename to lib/cryptodev/rte_cryptodev_trace.h
diff --git a/lib/librte_cryptodev/rte_cryptodev_trace_fp.h b/lib/cryptodev/rte_cryptodev_trace_fp.h
similarity index 100%
rename from lib/librte_cryptodev/rte_cryptodev_trace_fp.h
rename to lib/cryptodev/rte_cryptodev_trace_fp.h
diff --git a/lib/librte_cryptodev/version.map b/lib/cryptodev/version.map
similarity index 100%
rename from lib/librte_cryptodev/version.map
rename to lib/cryptodev/version.map
diff --git a/lib/librte_distributor/distributor_private.h b/lib/distributor/distributor_private.h
similarity index 100%
rename from lib/librte_distributor/distributor_private.h
rename to lib/distributor/distributor_private.h
diff --git a/lib/librte_distributor/meson.build b/lib/distributor/meson.build
similarity index 100%
rename from lib/librte_distributor/meson.build
rename to lib/distributor/meson.build
diff --git a/lib/librte_distributor/rte_distributor.c b/lib/distributor/rte_distributor.c
similarity index 100%
rename from lib/librte_distributor/rte_distributor.c
rename to lib/distributor/rte_distributor.c
diff --git a/lib/librte_distributor/rte_distributor.h b/lib/distributor/rte_distributor.h
similarity index 100%
rename from lib/librte_distributor/rte_distributor.h
rename to lib/distributor/rte_distributor.h
diff --git a/lib/librte_distributor/rte_distributor_match_generic.c b/lib/distributor/rte_distributor_match_generic.c
similarity index 100%
rename from lib/librte_distributor/rte_distributor_match_generic.c
rename to lib/distributor/rte_distributor_match_generic.c
diff --git a/lib/librte_distributor/rte_distributor_match_sse.c b/lib/distributor/rte_distributor_match_sse.c
similarity index 100%
rename from lib/librte_distributor/rte_distributor_match_sse.c
rename to lib/distributor/rte_distributor_match_sse.c
diff --git a/lib/librte_distributor/rte_distributor_single.c b/lib/distributor/rte_distributor_single.c
similarity index 100%
rename from lib/librte_distributor/rte_distributor_single.c
rename to lib/distributor/rte_distributor_single.c
diff --git a/lib/librte_distributor/rte_distributor_single.h b/lib/distributor/rte_distributor_single.h
similarity index 100%
rename from lib/librte_distributor/rte_distributor_single.h
rename to lib/distributor/rte_distributor_single.h
diff --git a/lib/librte_distributor/version.map b/lib/distributor/version.map
similarity index 100%
rename from lib/librte_distributor/version.map
rename to lib/distributor/version.map
diff --git a/lib/librte_eal/arm/include/meson.build b/lib/eal/arm/include/meson.build
similarity index 100%
rename from lib/librte_eal/arm/include/meson.build
rename to lib/eal/arm/include/meson.build
diff --git a/lib/librte_eal/arm/include/rte_atomic.h b/lib/eal/arm/include/rte_atomic.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_atomic.h
rename to lib/eal/arm/include/rte_atomic.h
diff --git a/lib/librte_eal/arm/include/rte_atomic_32.h b/lib/eal/arm/include/rte_atomic_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_atomic_32.h
rename to lib/eal/arm/include/rte_atomic_32.h
diff --git a/lib/librte_eal/arm/include/rte_atomic_64.h b/lib/eal/arm/include/rte_atomic_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_atomic_64.h
rename to lib/eal/arm/include/rte_atomic_64.h
diff --git a/lib/librte_eal/arm/include/rte_byteorder.h b/lib/eal/arm/include/rte_byteorder.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_byteorder.h
rename to lib/eal/arm/include/rte_byteorder.h
diff --git a/lib/librte_eal/arm/include/rte_cpuflags.h b/lib/eal/arm/include/rte_cpuflags.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cpuflags.h
rename to lib/eal/arm/include/rte_cpuflags.h
diff --git a/lib/librte_eal/arm/include/rte_cpuflags_32.h b/lib/eal/arm/include/rte_cpuflags_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cpuflags_32.h
rename to lib/eal/arm/include/rte_cpuflags_32.h
diff --git a/lib/librte_eal/arm/include/rte_cpuflags_64.h b/lib/eal/arm/include/rte_cpuflags_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cpuflags_64.h
rename to lib/eal/arm/include/rte_cpuflags_64.h
diff --git a/lib/librte_eal/arm/include/rte_cycles.h b/lib/eal/arm/include/rte_cycles.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cycles.h
rename to lib/eal/arm/include/rte_cycles.h
diff --git a/lib/librte_eal/arm/include/rte_cycles_32.h b/lib/eal/arm/include/rte_cycles_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cycles_32.h
rename to lib/eal/arm/include/rte_cycles_32.h
diff --git a/lib/librte_eal/arm/include/rte_cycles_64.h b/lib/eal/arm/include/rte_cycles_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_cycles_64.h
rename to lib/eal/arm/include/rte_cycles_64.h
diff --git a/lib/librte_eal/arm/include/rte_io.h b/lib/eal/arm/include/rte_io.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_io.h
rename to lib/eal/arm/include/rte_io.h
diff --git a/lib/librte_eal/arm/include/rte_io_64.h b/lib/eal/arm/include/rte_io_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_io_64.h
rename to lib/eal/arm/include/rte_io_64.h
diff --git a/lib/librte_eal/arm/include/rte_mcslock.h b/lib/eal/arm/include/rte_mcslock.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_mcslock.h
rename to lib/eal/arm/include/rte_mcslock.h
diff --git a/lib/librte_eal/arm/include/rte_memcpy.h b/lib/eal/arm/include/rte_memcpy.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_memcpy.h
rename to lib/eal/arm/include/rte_memcpy.h
diff --git a/lib/librte_eal/arm/include/rte_memcpy_32.h b/lib/eal/arm/include/rte_memcpy_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_memcpy_32.h
rename to lib/eal/arm/include/rte_memcpy_32.h
diff --git a/lib/librte_eal/arm/include/rte_memcpy_64.h b/lib/eal/arm/include/rte_memcpy_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_memcpy_64.h
rename to lib/eal/arm/include/rte_memcpy_64.h
diff --git a/lib/librte_eal/arm/include/rte_pause.h b/lib/eal/arm/include/rte_pause.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_pause.h
rename to lib/eal/arm/include/rte_pause.h
diff --git a/lib/librte_eal/arm/include/rte_pause_32.h b/lib/eal/arm/include/rte_pause_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_pause_32.h
rename to lib/eal/arm/include/rte_pause_32.h
diff --git a/lib/librte_eal/arm/include/rte_pause_64.h b/lib/eal/arm/include/rte_pause_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_pause_64.h
rename to lib/eal/arm/include/rte_pause_64.h
diff --git a/lib/librte_eal/arm/include/rte_power_intrinsics.h b/lib/eal/arm/include/rte_power_intrinsics.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_power_intrinsics.h
rename to lib/eal/arm/include/rte_power_intrinsics.h
diff --git a/lib/librte_eal/arm/include/rte_prefetch.h b/lib/eal/arm/include/rte_prefetch.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_prefetch.h
rename to lib/eal/arm/include/rte_prefetch.h
diff --git a/lib/librte_eal/arm/include/rte_prefetch_32.h b/lib/eal/arm/include/rte_prefetch_32.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_prefetch_32.h
rename to lib/eal/arm/include/rte_prefetch_32.h
diff --git a/lib/librte_eal/arm/include/rte_prefetch_64.h b/lib/eal/arm/include/rte_prefetch_64.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_prefetch_64.h
rename to lib/eal/arm/include/rte_prefetch_64.h
diff --git a/lib/librte_eal/arm/include/rte_rwlock.h b/lib/eal/arm/include/rte_rwlock.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_rwlock.h
rename to lib/eal/arm/include/rte_rwlock.h
diff --git a/lib/librte_eal/arm/include/rte_spinlock.h b/lib/eal/arm/include/rte_spinlock.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_spinlock.h
rename to lib/eal/arm/include/rte_spinlock.h
diff --git a/lib/librte_eal/arm/include/rte_ticketlock.h b/lib/eal/arm/include/rte_ticketlock.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_ticketlock.h
rename to lib/eal/arm/include/rte_ticketlock.h
diff --git a/lib/librte_eal/arm/include/rte_vect.h b/lib/eal/arm/include/rte_vect.h
similarity index 100%
rename from lib/librte_eal/arm/include/rte_vect.h
rename to lib/eal/arm/include/rte_vect.h
diff --git a/lib/librte_eal/arm/meson.build b/lib/eal/arm/meson.build
similarity index 100%
rename from lib/librte_eal/arm/meson.build
rename to lib/eal/arm/meson.build
diff --git a/lib/librte_eal/arm/rte_cpuflags.c b/lib/eal/arm/rte_cpuflags.c
similarity index 100%
rename from lib/librte_eal/arm/rte_cpuflags.c
rename to lib/eal/arm/rte_cpuflags.c
diff --git a/lib/librte_eal/arm/rte_cycles.c b/lib/eal/arm/rte_cycles.c
similarity index 100%
rename from lib/librte_eal/arm/rte_cycles.c
rename to lib/eal/arm/rte_cycles.c
diff --git a/lib/librte_eal/arm/rte_hypervisor.c b/lib/eal/arm/rte_hypervisor.c
similarity index 100%
rename from lib/librte_eal/arm/rte_hypervisor.c
rename to lib/eal/arm/rte_hypervisor.c
diff --git a/lib/librte_eal/arm/rte_power_intrinsics.c b/lib/eal/arm/rte_power_intrinsics.c
similarity index 100%
rename from lib/librte_eal/arm/rte_power_intrinsics.c
rename to lib/eal/arm/rte_power_intrinsics.c
diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/eal/common/eal_common_bus.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_bus.c
rename to lib/eal/common/eal_common_bus.c
diff --git a/lib/librte_eal/common/eal_common_class.c b/lib/eal/common/eal_common_class.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_class.c
rename to lib/eal/common/eal_common_class.c
diff --git a/lib/librte_eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_config.c
rename to lib/eal/common/eal_common_config.c
diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/eal/common/eal_common_cpuflags.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_cpuflags.c
rename to lib/eal/common/eal_common_cpuflags.c
diff --git a/lib/librte_eal/common/eal_common_debug.c b/lib/eal/common/eal_common_debug.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_debug.c
rename to lib/eal/common/eal_common_debug.c
diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_dev.c
rename to lib/eal/common/eal_common_dev.c
diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/eal/common/eal_common_devargs.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_devargs.c
rename to lib/eal/common/eal_common_devargs.c
diff --git a/lib/librte_eal/common/eal_common_dynmem.c b/lib/eal/common/eal_common_dynmem.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_dynmem.c
rename to lib/eal/common/eal_common_dynmem.c
diff --git a/lib/librte_eal/common/eal_common_errno.c b/lib/eal/common/eal_common_errno.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_errno.c
rename to lib/eal/common/eal_common_errno.c
diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/eal/common/eal_common_fbarray.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_fbarray.c
rename to lib/eal/common/eal_common_fbarray.c
diff --git a/lib/librte_eal/common/eal_common_hexdump.c b/lib/eal/common/eal_common_hexdump.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_hexdump.c
rename to lib/eal/common/eal_common_hexdump.c
diff --git a/lib/librte_eal/common/eal_common_hypervisor.c b/lib/eal/common/eal_common_hypervisor.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_hypervisor.c
rename to lib/eal/common/eal_common_hypervisor.c
diff --git a/lib/librte_eal/common/eal_common_launch.c b/lib/eal/common/eal_common_launch.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_launch.c
rename to lib/eal/common/eal_common_launch.c
diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_lcore.c
rename to lib/eal/common/eal_common_lcore.c
diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/eal/common/eal_common_log.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_log.c
rename to lib/eal/common/eal_common_log.c
diff --git a/lib/librte_eal/common/eal_common_mcfg.c b/lib/eal/common/eal_common_mcfg.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_mcfg.c
rename to lib/eal/common/eal_common_mcfg.c
diff --git a/lib/librte_eal/common/eal_common_memalloc.c b/lib/eal/common/eal_common_memalloc.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_memalloc.c
rename to lib/eal/common/eal_common_memalloc.c
diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/eal/common/eal_common_memory.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_memory.c
rename to lib/eal/common/eal_common_memory.c
diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/eal/common/eal_common_memzone.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_memzone.c
rename to lib/eal/common/eal_common_memzone.c
diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_options.c
rename to lib/eal/common/eal_common_options.c
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_proc.c
rename to lib/eal/common/eal_common_proc.c
diff --git a/lib/librte_eal/common/eal_common_string_fns.c b/lib/eal/common/eal_common_string_fns.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_string_fns.c
rename to lib/eal/common/eal_common_string_fns.c
diff --git a/lib/librte_eal/common/eal_common_tailqs.c b/lib/eal/common/eal_common_tailqs.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_tailqs.c
rename to lib/eal/common/eal_common_tailqs.c
diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_thread.c
rename to lib/eal/common/eal_common_thread.c
diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/eal/common/eal_common_timer.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_timer.c
rename to lib/eal/common/eal_common_timer.c
diff --git a/lib/librte_eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_trace.c
rename to lib/eal/common/eal_common_trace.c
diff --git a/lib/librte_eal/common/eal_common_trace_ctf.c b/lib/eal/common/eal_common_trace_ctf.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_trace_ctf.c
rename to lib/eal/common/eal_common_trace_ctf.c
diff --git a/lib/librte_eal/common/eal_common_trace_points.c b/lib/eal/common/eal_common_trace_points.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_trace_points.c
rename to lib/eal/common/eal_common_trace_points.c
diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_trace_utils.c
rename to lib/eal/common/eal_common_trace_utils.c
diff --git a/lib/librte_eal/common/eal_common_uuid.c b/lib/eal/common/eal_common_uuid.c
similarity index 100%
rename from lib/librte_eal/common/eal_common_uuid.c
rename to lib/eal/common/eal_common_uuid.c
diff --git a/lib/librte_eal/common/eal_filesystem.h b/lib/eal/common/eal_filesystem.h
similarity index 100%
rename from lib/librte_eal/common/eal_filesystem.h
rename to lib/eal/common/eal_filesystem.h
diff --git a/lib/librte_eal/common/eal_hugepages.h b/lib/eal/common/eal_hugepages.h
similarity index 100%
rename from lib/librte_eal/common/eal_hugepages.h
rename to lib/eal/common/eal_hugepages.h
diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/eal/common/eal_internal_cfg.h
similarity index 100%
rename from lib/librte_eal/common/eal_internal_cfg.h
rename to lib/eal/common/eal_internal_cfg.h
diff --git a/lib/librte_eal/common/eal_memalloc.h b/lib/eal/common/eal_memalloc.h
similarity index 100%
rename from lib/librte_eal/common/eal_memalloc.h
rename to lib/eal/common/eal_memalloc.h
diff --git a/lib/librte_eal/common/eal_memcfg.h b/lib/eal/common/eal_memcfg.h
similarity index 100%
rename from lib/librte_eal/common/eal_memcfg.h
rename to lib/eal/common/eal_memcfg.h
diff --git a/lib/librte_eal/common/eal_options.h b/lib/eal/common/eal_options.h
similarity index 100%
rename from lib/librte_eal/common/eal_options.h
rename to lib/eal/common/eal_options.h
diff --git a/lib/librte_eal/common/eal_private.h b/lib/eal/common/eal_private.h
similarity index 100%
rename from lib/librte_eal/common/eal_private.h
rename to lib/eal/common/eal_private.h
diff --git a/lib/librte_eal/common/eal_thread.h b/lib/eal/common/eal_thread.h
similarity index 100%
rename from lib/librte_eal/common/eal_thread.h
rename to lib/eal/common/eal_thread.h
diff --git a/lib/librte_eal/common/eal_trace.h b/lib/eal/common/eal_trace.h
similarity index 100%
rename from lib/librte_eal/common/eal_trace.h
rename to lib/eal/common/eal_trace.h
diff --git a/lib/librte_eal/common/hotplug_mp.c b/lib/eal/common/hotplug_mp.c
similarity index 100%
rename from lib/librte_eal/common/hotplug_mp.c
rename to lib/eal/common/hotplug_mp.c
diff --git a/lib/librte_eal/common/hotplug_mp.h b/lib/eal/common/hotplug_mp.h
similarity index 100%
rename from lib/librte_eal/common/hotplug_mp.h
rename to lib/eal/common/hotplug_mp.h
diff --git a/lib/librte_eal/common/malloc_elem.c b/lib/eal/common/malloc_elem.c
similarity index 100%
rename from lib/librte_eal/common/malloc_elem.c
rename to lib/eal/common/malloc_elem.c
diff --git a/lib/librte_eal/common/malloc_elem.h b/lib/eal/common/malloc_elem.h
similarity index 100%
rename from lib/librte_eal/common/malloc_elem.h
rename to lib/eal/common/malloc_elem.h
diff --git a/lib/librte_eal/common/malloc_heap.c b/lib/eal/common/malloc_heap.c
similarity index 100%
rename from lib/librte_eal/common/malloc_heap.c
rename to lib/eal/common/malloc_heap.c
diff --git a/lib/librte_eal/common/malloc_heap.h b/lib/eal/common/malloc_heap.h
similarity index 100%
rename from lib/librte_eal/common/malloc_heap.h
rename to lib/eal/common/malloc_heap.h
diff --git a/lib/librte_eal/common/malloc_mp.c b/lib/eal/common/malloc_mp.c
similarity index 100%
rename from lib/librte_eal/common/malloc_mp.c
rename to lib/eal/common/malloc_mp.c
diff --git a/lib/librte_eal/common/malloc_mp.h b/lib/eal/common/malloc_mp.h
similarity index 100%
rename from lib/librte_eal/common/malloc_mp.h
rename to lib/eal/common/malloc_mp.h
diff --git a/lib/librte_eal/common/meson.build b/lib/eal/common/meson.build
similarity index 100%
rename from lib/librte_eal/common/meson.build
rename to lib/eal/common/meson.build
diff --git a/lib/librte_eal/common/rte_keepalive.c b/lib/eal/common/rte_keepalive.c
similarity index 100%
rename from lib/librte_eal/common/rte_keepalive.c
rename to lib/eal/common/rte_keepalive.c
diff --git a/lib/librte_eal/common/rte_malloc.c b/lib/eal/common/rte_malloc.c
similarity index 100%
rename from lib/librte_eal/common/rte_malloc.c
rename to lib/eal/common/rte_malloc.c
diff --git a/lib/librte_eal/common/rte_random.c b/lib/eal/common/rte_random.c
similarity index 100%
rename from lib/librte_eal/common/rte_random.c
rename to lib/eal/common/rte_random.c
diff --git a/lib/librte_eal/common/rte_reciprocal.c b/lib/eal/common/rte_reciprocal.c
similarity index 100%
rename from lib/librte_eal/common/rte_reciprocal.c
rename to lib/eal/common/rte_reciprocal.c
diff --git a/lib/librte_eal/common/rte_service.c b/lib/eal/common/rte_service.c
similarity index 100%
rename from lib/librte_eal/common/rte_service.c
rename to lib/eal/common/rte_service.c
diff --git a/lib/librte_eal/common/rte_version.c b/lib/eal/common/rte_version.c
similarity index 100%
rename from lib/librte_eal/common/rte_version.c
rename to lib/eal/common/rte_version.c
diff --git a/lib/librte_eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal.c
rename to lib/eal/freebsd/eal.c
diff --git a/lib/librte_eal/freebsd/eal_alarm.c b/lib/eal/freebsd/eal_alarm.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_alarm.c
rename to lib/eal/freebsd/eal_alarm.c
diff --git a/lib/librte_eal/freebsd/eal_alarm_private.h b/lib/eal/freebsd/eal_alarm_private.h
similarity index 100%
rename from lib/librte_eal/freebsd/eal_alarm_private.h
rename to lib/eal/freebsd/eal_alarm_private.h
diff --git a/lib/librte_eal/freebsd/eal_cpuflags.c b/lib/eal/freebsd/eal_cpuflags.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_cpuflags.c
rename to lib/eal/freebsd/eal_cpuflags.c
diff --git a/lib/librte_eal/freebsd/eal_debug.c b/lib/eal/freebsd/eal_debug.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_debug.c
rename to lib/eal/freebsd/eal_debug.c
diff --git a/lib/librte_eal/freebsd/eal_dev.c b/lib/eal/freebsd/eal_dev.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_dev.c
rename to lib/eal/freebsd/eal_dev.c
diff --git a/lib/librte_eal/freebsd/eal_hugepage_info.c b/lib/eal/freebsd/eal_hugepage_info.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_hugepage_info.c
rename to lib/eal/freebsd/eal_hugepage_info.c
diff --git a/lib/librte_eal/freebsd/eal_interrupts.c b/lib/eal/freebsd/eal_interrupts.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_interrupts.c
rename to lib/eal/freebsd/eal_interrupts.c
diff --git a/lib/librte_eal/freebsd/eal_lcore.c b/lib/eal/freebsd/eal_lcore.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_lcore.c
rename to lib/eal/freebsd/eal_lcore.c
diff --git a/lib/librte_eal/freebsd/eal_memalloc.c b/lib/eal/freebsd/eal_memalloc.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_memalloc.c
rename to lib/eal/freebsd/eal_memalloc.c
diff --git a/lib/librte_eal/freebsd/eal_memory.c b/lib/eal/freebsd/eal_memory.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_memory.c
rename to lib/eal/freebsd/eal_memory.c
diff --git a/lib/librte_eal/freebsd/eal_thread.c b/lib/eal/freebsd/eal_thread.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_thread.c
rename to lib/eal/freebsd/eal_thread.c
diff --git a/lib/librte_eal/freebsd/eal_timer.c b/lib/eal/freebsd/eal_timer.c
similarity index 100%
rename from lib/librte_eal/freebsd/eal_timer.c
rename to lib/eal/freebsd/eal_timer.c
diff --git a/lib/librte_eal/freebsd/include/meson.build b/lib/eal/freebsd/include/meson.build
similarity index 100%
rename from lib/librte_eal/freebsd/include/meson.build
rename to lib/eal/freebsd/include/meson.build
diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/eal/freebsd/include/rte_os.h
similarity index 100%
rename from lib/librte_eal/freebsd/include/rte_os.h
rename to lib/eal/freebsd/include/rte_os.h
diff --git a/lib/librte_eal/freebsd/meson.build b/lib/eal/freebsd/meson.build
similarity index 100%
rename from lib/librte_eal/freebsd/meson.build
rename to lib/eal/freebsd/meson.build
diff --git a/lib/librte_eal/include/generic/rte_atomic.h b/lib/eal/include/generic/rte_atomic.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_atomic.h
rename to lib/eal/include/generic/rte_atomic.h
diff --git a/lib/librte_eal/include/generic/rte_byteorder.h b/lib/eal/include/generic/rte_byteorder.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_byteorder.h
rename to lib/eal/include/generic/rte_byteorder.h
diff --git a/lib/librte_eal/include/generic/rte_cpuflags.h b/lib/eal/include/generic/rte_cpuflags.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_cpuflags.h
rename to lib/eal/include/generic/rte_cpuflags.h
diff --git a/lib/librte_eal/include/generic/rte_cycles.h b/lib/eal/include/generic/rte_cycles.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_cycles.h
rename to lib/eal/include/generic/rte_cycles.h
diff --git a/lib/librte_eal/include/generic/rte_io.h b/lib/eal/include/generic/rte_io.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_io.h
rename to lib/eal/include/generic/rte_io.h
diff --git a/lib/librte_eal/include/generic/rte_mcslock.h b/lib/eal/include/generic/rte_mcslock.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_mcslock.h
rename to lib/eal/include/generic/rte_mcslock.h
diff --git a/lib/librte_eal/include/generic/rte_memcpy.h b/lib/eal/include/generic/rte_memcpy.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_memcpy.h
rename to lib/eal/include/generic/rte_memcpy.h
diff --git a/lib/librte_eal/include/generic/rte_pause.h b/lib/eal/include/generic/rte_pause.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_pause.h
rename to lib/eal/include/generic/rte_pause.h
diff --git a/lib/librte_eal/include/generic/rte_power_intrinsics.h b/lib/eal/include/generic/rte_power_intrinsics.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_power_intrinsics.h
rename to lib/eal/include/generic/rte_power_intrinsics.h
diff --git a/lib/librte_eal/include/generic/rte_prefetch.h b/lib/eal/include/generic/rte_prefetch.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_prefetch.h
rename to lib/eal/include/generic/rte_prefetch.h
diff --git a/lib/librte_eal/include/generic/rte_rwlock.h b/lib/eal/include/generic/rte_rwlock.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_rwlock.h
rename to lib/eal/include/generic/rte_rwlock.h
diff --git a/lib/librte_eal/include/generic/rte_spinlock.h b/lib/eal/include/generic/rte_spinlock.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_spinlock.h
rename to lib/eal/include/generic/rte_spinlock.h
diff --git a/lib/librte_eal/include/generic/rte_ticketlock.h b/lib/eal/include/generic/rte_ticketlock.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_ticketlock.h
rename to lib/eal/include/generic/rte_ticketlock.h
diff --git a/lib/librte_eal/include/generic/rte_vect.h b/lib/eal/include/generic/rte_vect.h
similarity index 100%
rename from lib/librte_eal/include/generic/rte_vect.h
rename to lib/eal/include/generic/rte_vect.h
diff --git a/lib/librte_eal/include/meson.build b/lib/eal/include/meson.build
similarity index 100%
rename from lib/librte_eal/include/meson.build
rename to lib/eal/include/meson.build
diff --git a/lib/librte_eal/include/rte_alarm.h b/lib/eal/include/rte_alarm.h
similarity index 100%
rename from lib/librte_eal/include/rte_alarm.h
rename to lib/eal/include/rte_alarm.h
diff --git a/lib/librte_eal/include/rte_bitmap.h b/lib/eal/include/rte_bitmap.h
similarity index 100%
rename from lib/librte_eal/include/rte_bitmap.h
rename to lib/eal/include/rte_bitmap.h
diff --git a/lib/librte_eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h
similarity index 100%
rename from lib/librte_eal/include/rte_bitops.h
rename to lib/eal/include/rte_bitops.h
diff --git a/lib/librte_eal/include/rte_branch_prediction.h b/lib/eal/include/rte_branch_prediction.h
similarity index 100%
rename from lib/librte_eal/include/rte_branch_prediction.h
rename to lib/eal/include/rte_branch_prediction.h
diff --git a/lib/librte_eal/include/rte_bus.h b/lib/eal/include/rte_bus.h
similarity index 100%
rename from lib/librte_eal/include/rte_bus.h
rename to lib/eal/include/rte_bus.h
diff --git a/lib/librte_eal/include/rte_class.h b/lib/eal/include/rte_class.h
similarity index 100%
rename from lib/librte_eal/include/rte_class.h
rename to lib/eal/include/rte_class.h
diff --git a/lib/librte_eal/include/rte_common.h b/lib/eal/include/rte_common.h
similarity index 100%
rename from lib/librte_eal/include/rte_common.h
rename to lib/eal/include/rte_common.h
diff --git a/lib/librte_eal/include/rte_compat.h b/lib/eal/include/rte_compat.h
similarity index 100%
rename from lib/librte_eal/include/rte_compat.h
rename to lib/eal/include/rte_compat.h
diff --git a/lib/librte_eal/include/rte_debug.h b/lib/eal/include/rte_debug.h
similarity index 100%
rename from lib/librte_eal/include/rte_debug.h
rename to lib/eal/include/rte_debug.h
diff --git a/lib/librte_eal/include/rte_dev.h b/lib/eal/include/rte_dev.h
similarity index 100%
rename from lib/librte_eal/include/rte_dev.h
rename to lib/eal/include/rte_dev.h
diff --git a/lib/librte_eal/include/rte_devargs.h b/lib/eal/include/rte_devargs.h
similarity index 100%
rename from lib/librte_eal/include/rte_devargs.h
rename to lib/eal/include/rte_devargs.h
diff --git a/lib/librte_eal/include/rte_eal.h b/lib/eal/include/rte_eal.h
similarity index 100%
rename from lib/librte_eal/include/rte_eal.h
rename to lib/eal/include/rte_eal.h
diff --git a/lib/librte_eal/include/rte_eal_interrupts.h b/lib/eal/include/rte_eal_interrupts.h
similarity index 100%
rename from lib/librte_eal/include/rte_eal_interrupts.h
rename to lib/eal/include/rte_eal_interrupts.h
diff --git a/lib/librte_eal/include/rte_eal_memconfig.h b/lib/eal/include/rte_eal_memconfig.h
similarity index 100%
rename from lib/librte_eal/include/rte_eal_memconfig.h
rename to lib/eal/include/rte_eal_memconfig.h
diff --git a/lib/librte_eal/include/rte_eal_paging.h b/lib/eal/include/rte_eal_paging.h
similarity index 100%
rename from lib/librte_eal/include/rte_eal_paging.h
rename to lib/eal/include/rte_eal_paging.h
diff --git a/lib/librte_eal/include/rte_eal_trace.h b/lib/eal/include/rte_eal_trace.h
similarity index 100%
rename from lib/librte_eal/include/rte_eal_trace.h
rename to lib/eal/include/rte_eal_trace.h
diff --git a/lib/librte_eal/include/rte_errno.h b/lib/eal/include/rte_errno.h
similarity index 100%
rename from lib/librte_eal/include/rte_errno.h
rename to lib/eal/include/rte_errno.h
diff --git a/lib/librte_eal/include/rte_fbarray.h b/lib/eal/include/rte_fbarray.h
similarity index 100%
rename from lib/librte_eal/include/rte_fbarray.h
rename to lib/eal/include/rte_fbarray.h
diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/eal/include/rte_function_versioning.h
similarity index 100%
rename from lib/librte_eal/include/rte_function_versioning.h
rename to lib/eal/include/rte_function_versioning.h
diff --git a/lib/librte_eal/include/rte_hexdump.h b/lib/eal/include/rte_hexdump.h
similarity index 100%
rename from lib/librte_eal/include/rte_hexdump.h
rename to lib/eal/include/rte_hexdump.h
diff --git a/lib/librte_eal/include/rte_hypervisor.h b/lib/eal/include/rte_hypervisor.h
similarity index 100%
rename from lib/librte_eal/include/rte_hypervisor.h
rename to lib/eal/include/rte_hypervisor.h
diff --git a/lib/librte_eal/include/rte_interrupts.h b/lib/eal/include/rte_interrupts.h
similarity index 100%
rename from lib/librte_eal/include/rte_interrupts.h
rename to lib/eal/include/rte_interrupts.h
diff --git a/lib/librte_eal/include/rte_keepalive.h b/lib/eal/include/rte_keepalive.h
similarity index 100%
rename from lib/librte_eal/include/rte_keepalive.h
rename to lib/eal/include/rte_keepalive.h
diff --git a/lib/librte_eal/include/rte_launch.h b/lib/eal/include/rte_launch.h
similarity index 100%
rename from lib/librte_eal/include/rte_launch.h
rename to lib/eal/include/rte_launch.h
diff --git a/lib/librte_eal/include/rte_lcore.h b/lib/eal/include/rte_lcore.h
similarity index 100%
rename from lib/librte_eal/include/rte_lcore.h
rename to lib/eal/include/rte_lcore.h
diff --git a/lib/librte_eal/include/rte_log.h b/lib/eal/include/rte_log.h
similarity index 100%
rename from lib/librte_eal/include/rte_log.h
rename to lib/eal/include/rte_log.h
diff --git a/lib/librte_eal/include/rte_malloc.h b/lib/eal/include/rte_malloc.h
similarity index 100%
rename from lib/librte_eal/include/rte_malloc.h
rename to lib/eal/include/rte_malloc.h
diff --git a/lib/librte_eal/include/rte_memory.h b/lib/eal/include/rte_memory.h
similarity index 100%
rename from lib/librte_eal/include/rte_memory.h
rename to lib/eal/include/rte_memory.h
diff --git a/lib/librte_eal/include/rte_memzone.h b/lib/eal/include/rte_memzone.h
similarity index 100%
rename from lib/librte_eal/include/rte_memzone.h
rename to lib/eal/include/rte_memzone.h
diff --git a/lib/librte_eal/include/rte_pci_dev_feature_defs.h b/lib/eal/include/rte_pci_dev_feature_defs.h
similarity index 100%
rename from lib/librte_eal/include/rte_pci_dev_feature_defs.h
rename to lib/eal/include/rte_pci_dev_feature_defs.h
diff --git a/lib/librte_eal/include/rte_pci_dev_features.h b/lib/eal/include/rte_pci_dev_features.h
similarity index 100%
rename from lib/librte_eal/include/rte_pci_dev_features.h
rename to lib/eal/include/rte_pci_dev_features.h
diff --git a/lib/librte_eal/include/rte_per_lcore.h b/lib/eal/include/rte_per_lcore.h
similarity index 100%
rename from lib/librte_eal/include/rte_per_lcore.h
rename to lib/eal/include/rte_per_lcore.h
diff --git a/lib/librte_eal/include/rte_random.h b/lib/eal/include/rte_random.h
similarity index 100%
rename from lib/librte_eal/include/rte_random.h
rename to lib/eal/include/rte_random.h
diff --git a/lib/librte_eal/include/rte_reciprocal.h b/lib/eal/include/rte_reciprocal.h
similarity index 100%
rename from lib/librte_eal/include/rte_reciprocal.h
rename to lib/eal/include/rte_reciprocal.h
diff --git a/lib/librte_eal/include/rte_service.h b/lib/eal/include/rte_service.h
similarity index 100%
rename from lib/librte_eal/include/rte_service.h
rename to lib/eal/include/rte_service.h
diff --git a/lib/librte_eal/include/rte_service_component.h b/lib/eal/include/rte_service_component.h
similarity index 100%
rename from lib/librte_eal/include/rte_service_component.h
rename to lib/eal/include/rte_service_component.h
diff --git a/lib/librte_eal/include/rte_string_fns.h b/lib/eal/include/rte_string_fns.h
similarity index 100%
rename from lib/librte_eal/include/rte_string_fns.h
rename to lib/eal/include/rte_string_fns.h
diff --git a/lib/librte_eal/include/rte_tailq.h b/lib/eal/include/rte_tailq.h
similarity index 100%
rename from lib/librte_eal/include/rte_tailq.h
rename to lib/eal/include/rte_tailq.h
diff --git a/lib/librte_eal/include/rte_test.h b/lib/eal/include/rte_test.h
similarity index 100%
rename from lib/librte_eal/include/rte_test.h
rename to lib/eal/include/rte_test.h
diff --git a/lib/librte_eal/include/rte_thread.h b/lib/eal/include/rte_thread.h
similarity index 100%
rename from lib/librte_eal/include/rte_thread.h
rename to lib/eal/include/rte_thread.h
diff --git a/lib/librte_eal/include/rte_time.h b/lib/eal/include/rte_time.h
similarity index 100%
rename from lib/librte_eal/include/rte_time.h
rename to lib/eal/include/rte_time.h
diff --git a/lib/librte_eal/include/rte_trace.h b/lib/eal/include/rte_trace.h
similarity index 100%
rename from lib/librte_eal/include/rte_trace.h
rename to lib/eal/include/rte_trace.h
diff --git a/lib/librte_eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h
similarity index 100%
rename from lib/librte_eal/include/rte_trace_point.h
rename to lib/eal/include/rte_trace_point.h
diff --git a/lib/librte_eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h
similarity index 100%
rename from lib/librte_eal/include/rte_trace_point_register.h
rename to lib/eal/include/rte_trace_point_register.h
diff --git a/lib/librte_eal/include/rte_uuid.h b/lib/eal/include/rte_uuid.h
similarity index 100%
rename from lib/librte_eal/include/rte_uuid.h
rename to lib/eal/include/rte_uuid.h
diff --git a/lib/librte_eal/include/rte_version.h b/lib/eal/include/rte_version.h
similarity index 100%
rename from lib/librte_eal/include/rte_version.h
rename to lib/eal/include/rte_version.h
diff --git a/lib/librte_eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h
similarity index 100%
rename from lib/librte_eal/include/rte_vfio.h
rename to lib/eal/include/rte_vfio.h
diff --git a/lib/librte_eal/linux/eal.c b/lib/eal/linux/eal.c
similarity index 100%
rename from lib/librte_eal/linux/eal.c
rename to lib/eal/linux/eal.c
diff --git a/lib/librte_eal/linux/eal_alarm.c b/lib/eal/linux/eal_alarm.c
similarity index 100%
rename from lib/librte_eal/linux/eal_alarm.c
rename to lib/eal/linux/eal_alarm.c
diff --git a/lib/librte_eal/linux/eal_cpuflags.c b/lib/eal/linux/eal_cpuflags.c
similarity index 100%
rename from lib/librte_eal/linux/eal_cpuflags.c
rename to lib/eal/linux/eal_cpuflags.c
diff --git a/lib/librte_eal/linux/eal_debug.c b/lib/eal/linux/eal_debug.c
similarity index 100%
rename from lib/librte_eal/linux/eal_debug.c
rename to lib/eal/linux/eal_debug.c
diff --git a/lib/librte_eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c
similarity index 100%
rename from lib/librte_eal/linux/eal_dev.c
rename to lib/eal/linux/eal_dev.c
diff --git a/lib/librte_eal/linux/eal_hugepage_info.c b/lib/eal/linux/eal_hugepage_info.c
similarity index 100%
rename from lib/librte_eal/linux/eal_hugepage_info.c
rename to lib/eal/linux/eal_hugepage_info.c
diff --git a/lib/librte_eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
similarity index 100%
rename from lib/librte_eal/linux/eal_interrupts.c
rename to lib/eal/linux/eal_interrupts.c
diff --git a/lib/librte_eal/linux/eal_lcore.c b/lib/eal/linux/eal_lcore.c
similarity index 100%
rename from lib/librte_eal/linux/eal_lcore.c
rename to lib/eal/linux/eal_lcore.c
diff --git a/lib/librte_eal/linux/eal_log.c b/lib/eal/linux/eal_log.c
similarity index 100%
rename from lib/librte_eal/linux/eal_log.c
rename to lib/eal/linux/eal_log.c
diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/eal/linux/eal_memalloc.c
similarity index 100%
rename from lib/librte_eal/linux/eal_memalloc.c
rename to lib/eal/linux/eal_memalloc.c
diff --git a/lib/librte_eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
similarity index 100%
rename from lib/librte_eal/linux/eal_memory.c
rename to lib/eal/linux/eal_memory.c
diff --git a/lib/librte_eal/linux/eal_thread.c b/lib/eal/linux/eal_thread.c
similarity index 100%
rename from lib/librte_eal/linux/eal_thread.c
rename to lib/eal/linux/eal_thread.c
diff --git a/lib/librte_eal/linux/eal_timer.c b/lib/eal/linux/eal_timer.c
similarity index 100%
rename from lib/librte_eal/linux/eal_timer.c
rename to lib/eal/linux/eal_timer.c
diff --git a/lib/librte_eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
similarity index 100%
rename from lib/librte_eal/linux/eal_vfio.c
rename to lib/eal/linux/eal_vfio.c
diff --git a/lib/librte_eal/linux/eal_vfio.h b/lib/eal/linux/eal_vfio.h
similarity index 100%
rename from lib/librte_eal/linux/eal_vfio.h
rename to lib/eal/linux/eal_vfio.h
diff --git a/lib/librte_eal/linux/eal_vfio_mp_sync.c b/lib/eal/linux/eal_vfio_mp_sync.c
similarity index 100%
rename from lib/librte_eal/linux/eal_vfio_mp_sync.c
rename to lib/eal/linux/eal_vfio_mp_sync.c
diff --git a/lib/librte_eal/linux/include/meson.build b/lib/eal/linux/include/meson.build
similarity index 100%
rename from lib/librte_eal/linux/include/meson.build
rename to lib/eal/linux/include/meson.build
diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/eal/linux/include/rte_os.h
similarity index 100%
rename from lib/librte_eal/linux/include/rte_os.h
rename to lib/eal/linux/include/rte_os.h
diff --git a/lib/librte_eal/linux/meson.build b/lib/eal/linux/meson.build
similarity index 100%
rename from lib/librte_eal/linux/meson.build
rename to lib/eal/linux/meson.build
diff --git a/lib/librte_eal/meson.build b/lib/eal/meson.build
similarity index 100%
rename from lib/librte_eal/meson.build
rename to lib/eal/meson.build
diff --git a/lib/librte_eal/ppc/include/meson.build b/lib/eal/ppc/include/meson.build
similarity index 100%
rename from lib/librte_eal/ppc/include/meson.build
rename to lib/eal/ppc/include/meson.build
diff --git a/lib/librte_eal/ppc/include/rte_altivec.h b/lib/eal/ppc/include/rte_altivec.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_altivec.h
rename to lib/eal/ppc/include/rte_altivec.h
diff --git a/lib/librte_eal/ppc/include/rte_atomic.h b/lib/eal/ppc/include/rte_atomic.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_atomic.h
rename to lib/eal/ppc/include/rte_atomic.h
diff --git a/lib/librte_eal/ppc/include/rte_byteorder.h b/lib/eal/ppc/include/rte_byteorder.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_byteorder.h
rename to lib/eal/ppc/include/rte_byteorder.h
diff --git a/lib/librte_eal/ppc/include/rte_cpuflags.h b/lib/eal/ppc/include/rte_cpuflags.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_cpuflags.h
rename to lib/eal/ppc/include/rte_cpuflags.h
diff --git a/lib/librte_eal/ppc/include/rte_cycles.h b/lib/eal/ppc/include/rte_cycles.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_cycles.h
rename to lib/eal/ppc/include/rte_cycles.h
diff --git a/lib/librte_eal/ppc/include/rte_io.h b/lib/eal/ppc/include/rte_io.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_io.h
rename to lib/eal/ppc/include/rte_io.h
diff --git a/lib/librte_eal/ppc/include/rte_mcslock.h b/lib/eal/ppc/include/rte_mcslock.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_mcslock.h
rename to lib/eal/ppc/include/rte_mcslock.h
diff --git a/lib/librte_eal/ppc/include/rte_memcpy.h b/lib/eal/ppc/include/rte_memcpy.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_memcpy.h
rename to lib/eal/ppc/include/rte_memcpy.h
diff --git a/lib/librte_eal/ppc/include/rte_pause.h b/lib/eal/ppc/include/rte_pause.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_pause.h
rename to lib/eal/ppc/include/rte_pause.h
diff --git a/lib/librte_eal/ppc/include/rte_power_intrinsics.h b/lib/eal/ppc/include/rte_power_intrinsics.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_power_intrinsics.h
rename to lib/eal/ppc/include/rte_power_intrinsics.h
diff --git a/lib/librte_eal/ppc/include/rte_prefetch.h b/lib/eal/ppc/include/rte_prefetch.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_prefetch.h
rename to lib/eal/ppc/include/rte_prefetch.h
diff --git a/lib/librte_eal/ppc/include/rte_rwlock.h b/lib/eal/ppc/include/rte_rwlock.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_rwlock.h
rename to lib/eal/ppc/include/rte_rwlock.h
diff --git a/lib/librte_eal/ppc/include/rte_spinlock.h b/lib/eal/ppc/include/rte_spinlock.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_spinlock.h
rename to lib/eal/ppc/include/rte_spinlock.h
diff --git a/lib/librte_eal/ppc/include/rte_ticketlock.h b/lib/eal/ppc/include/rte_ticketlock.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_ticketlock.h
rename to lib/eal/ppc/include/rte_ticketlock.h
diff --git a/lib/librte_eal/ppc/include/rte_vect.h b/lib/eal/ppc/include/rte_vect.h
similarity index 100%
rename from lib/librte_eal/ppc/include/rte_vect.h
rename to lib/eal/ppc/include/rte_vect.h
diff --git a/lib/librte_eal/ppc/meson.build b/lib/eal/ppc/meson.build
similarity index 100%
rename from lib/librte_eal/ppc/meson.build
rename to lib/eal/ppc/meson.build
diff --git a/lib/librte_eal/ppc/rte_cpuflags.c b/lib/eal/ppc/rte_cpuflags.c
similarity index 100%
rename from lib/librte_eal/ppc/rte_cpuflags.c
rename to lib/eal/ppc/rte_cpuflags.c
diff --git a/lib/librte_eal/ppc/rte_cycles.c b/lib/eal/ppc/rte_cycles.c
similarity index 100%
rename from lib/librte_eal/ppc/rte_cycles.c
rename to lib/eal/ppc/rte_cycles.c
diff --git a/lib/librte_eal/ppc/rte_hypervisor.c b/lib/eal/ppc/rte_hypervisor.c
similarity index 100%
rename from lib/librte_eal/ppc/rte_hypervisor.c
rename to lib/eal/ppc/rte_hypervisor.c
diff --git a/lib/librte_eal/ppc/rte_power_intrinsics.c b/lib/eal/ppc/rte_power_intrinsics.c
similarity index 100%
rename from lib/librte_eal/ppc/rte_power_intrinsics.c
rename to lib/eal/ppc/rte_power_intrinsics.c
diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/eal/rte_eal_exports.def
similarity index 100%
rename from lib/librte_eal/rte_eal_exports.def
rename to lib/eal/rte_eal_exports.def
diff --git a/lib/librte_eal/unix/eal_file.c b/lib/eal/unix/eal_file.c
similarity index 100%
rename from lib/librte_eal/unix/eal_file.c
rename to lib/eal/unix/eal_file.c
diff --git a/lib/librte_eal/unix/eal_unix_memory.c b/lib/eal/unix/eal_unix_memory.c
similarity index 100%
rename from lib/librte_eal/unix/eal_unix_memory.c
rename to lib/eal/unix/eal_unix_memory.c
diff --git a/lib/librte_eal/unix/eal_unix_timer.c b/lib/eal/unix/eal_unix_timer.c
similarity index 100%
rename from lib/librte_eal/unix/eal_unix_timer.c
rename to lib/eal/unix/eal_unix_timer.c
diff --git a/lib/librte_eal/unix/meson.build b/lib/eal/unix/meson.build
similarity index 100%
rename from lib/librte_eal/unix/meson.build
rename to lib/eal/unix/meson.build
diff --git a/lib/librte_eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c
similarity index 100%
rename from lib/librte_eal/unix/rte_thread.c
rename to lib/eal/unix/rte_thread.c
diff --git a/lib/librte_eal/version.map b/lib/eal/version.map
similarity index 100%
rename from lib/librte_eal/version.map
rename to lib/eal/version.map
diff --git a/lib/librte_eal/windows/eal.c b/lib/eal/windows/eal.c
similarity index 100%
rename from lib/librte_eal/windows/eal.c
rename to lib/eal/windows/eal.c
diff --git a/lib/librte_eal/windows/eal_alarm.c b/lib/eal/windows/eal_alarm.c
similarity index 100%
rename from lib/librte_eal/windows/eal_alarm.c
rename to lib/eal/windows/eal_alarm.c
diff --git a/lib/librte_eal/windows/eal_debug.c b/lib/eal/windows/eal_debug.c
similarity index 100%
rename from lib/librte_eal/windows/eal_debug.c
rename to lib/eal/windows/eal_debug.c
diff --git a/lib/librte_eal/windows/eal_file.c b/lib/eal/windows/eal_file.c
similarity index 100%
rename from lib/librte_eal/windows/eal_file.c
rename to lib/eal/windows/eal_file.c
diff --git a/lib/librte_eal/windows/eal_hugepages.c b/lib/eal/windows/eal_hugepages.c
similarity index 100%
rename from lib/librte_eal/windows/eal_hugepages.c
rename to lib/eal/windows/eal_hugepages.c
diff --git a/lib/librte_eal/windows/eal_interrupts.c b/lib/eal/windows/eal_interrupts.c
similarity index 100%
rename from lib/librte_eal/windows/eal_interrupts.c
rename to lib/eal/windows/eal_interrupts.c
diff --git a/lib/librte_eal/windows/eal_lcore.c b/lib/eal/windows/eal_lcore.c
similarity index 100%
rename from lib/librte_eal/windows/eal_lcore.c
rename to lib/eal/windows/eal_lcore.c
diff --git a/lib/librte_eal/windows/eal_log.c b/lib/eal/windows/eal_log.c
similarity index 100%
rename from lib/librte_eal/windows/eal_log.c
rename to lib/eal/windows/eal_log.c
diff --git a/lib/librte_eal/windows/eal_memalloc.c b/lib/eal/windows/eal_memalloc.c
similarity index 100%
rename from lib/librte_eal/windows/eal_memalloc.c
rename to lib/eal/windows/eal_memalloc.c
diff --git a/lib/librte_eal/windows/eal_memory.c b/lib/eal/windows/eal_memory.c
similarity index 100%
rename from lib/librte_eal/windows/eal_memory.c
rename to lib/eal/windows/eal_memory.c
diff --git a/lib/librte_eal/windows/eal_mp.c b/lib/eal/windows/eal_mp.c
similarity index 100%
rename from lib/librte_eal/windows/eal_mp.c
rename to lib/eal/windows/eal_mp.c
diff --git a/lib/librte_eal/windows/eal_thread.c b/lib/eal/windows/eal_thread.c
similarity index 100%
rename from lib/librte_eal/windows/eal_thread.c
rename to lib/eal/windows/eal_thread.c
diff --git a/lib/librte_eal/windows/eal_timer.c b/lib/eal/windows/eal_timer.c
similarity index 100%
rename from lib/librte_eal/windows/eal_timer.c
rename to lib/eal/windows/eal_timer.c
diff --git a/lib/librte_eal/windows/eal_windows.h b/lib/eal/windows/eal_windows.h
similarity index 100%
rename from lib/librte_eal/windows/eal_windows.h
rename to lib/eal/windows/eal_windows.h
diff --git a/lib/librte_eal/windows/fnmatch.c b/lib/eal/windows/fnmatch.c
similarity index 100%
rename from lib/librte_eal/windows/fnmatch.c
rename to lib/eal/windows/fnmatch.c
diff --git a/lib/librte_eal/windows/getopt.c b/lib/eal/windows/getopt.c
similarity index 100%
rename from lib/librte_eal/windows/getopt.c
rename to lib/eal/windows/getopt.c
diff --git a/lib/librte_eal/windows/include/arpa/inet.h b/lib/eal/windows/include/arpa/inet.h
similarity index 100%
rename from lib/librte_eal/windows/include/arpa/inet.h
rename to lib/eal/windows/include/arpa/inet.h
diff --git a/lib/librte_eal/windows/include/dirent.h b/lib/eal/windows/include/dirent.h
similarity index 100%
rename from lib/librte_eal/windows/include/dirent.h
rename to lib/eal/windows/include/dirent.h
diff --git a/lib/librte_eal/windows/include/fnmatch.h b/lib/eal/windows/include/fnmatch.h
similarity index 100%
rename from lib/librte_eal/windows/include/fnmatch.h
rename to lib/eal/windows/include/fnmatch.h
diff --git a/lib/librte_eal/windows/include/getopt.h b/lib/eal/windows/include/getopt.h
similarity index 100%
rename from lib/librte_eal/windows/include/getopt.h
rename to lib/eal/windows/include/getopt.h
diff --git a/lib/librte_eal/windows/include/meson.build b/lib/eal/windows/include/meson.build
similarity index 100%
rename from lib/librte_eal/windows/include/meson.build
rename to lib/eal/windows/include/meson.build
diff --git a/lib/librte_eal/windows/include/netinet/in.h b/lib/eal/windows/include/netinet/in.h
similarity index 100%
rename from lib/librte_eal/windows/include/netinet/in.h
rename to lib/eal/windows/include/netinet/in.h
diff --git a/lib/librte_eal/windows/include/netinet/ip.h b/lib/eal/windows/include/netinet/ip.h
similarity index 100%
rename from lib/librte_eal/windows/include/netinet/ip.h
rename to lib/eal/windows/include/netinet/ip.h
diff --git a/lib/librte_eal/windows/include/pthread.h b/lib/eal/windows/include/pthread.h
similarity index 100%
rename from lib/librte_eal/windows/include/pthread.h
rename to lib/eal/windows/include/pthread.h
diff --git a/lib/librte_eal/windows/include/regex.h b/lib/eal/windows/include/regex.h
similarity index 100%
rename from lib/librte_eal/windows/include/regex.h
rename to lib/eal/windows/include/regex.h
diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/eal/windows/include/rte_os.h
similarity index 100%
rename from lib/librte_eal/windows/include/rte_os.h
rename to lib/eal/windows/include/rte_os.h
diff --git a/lib/librte_eal/windows/include/rte_virt2phys.h b/lib/eal/windows/include/rte_virt2phys.h
similarity index 100%
rename from lib/librte_eal/windows/include/rte_virt2phys.h
rename to lib/eal/windows/include/rte_virt2phys.h
diff --git a/lib/librte_eal/windows/include/rte_windows.h b/lib/eal/windows/include/rte_windows.h
similarity index 100%
rename from lib/librte_eal/windows/include/rte_windows.h
rename to lib/eal/windows/include/rte_windows.h
diff --git a/lib/librte_eal/windows/include/sched.h b/lib/eal/windows/include/sched.h
similarity index 100%
rename from lib/librte_eal/windows/include/sched.h
rename to lib/eal/windows/include/sched.h
diff --git a/lib/librte_eal/windows/include/sys/queue.h b/lib/eal/windows/include/sys/queue.h
similarity index 100%
rename from lib/librte_eal/windows/include/sys/queue.h
rename to lib/eal/windows/include/sys/queue.h
diff --git a/lib/librte_eal/windows/include/sys/socket.h b/lib/eal/windows/include/sys/socket.h
similarity index 100%
rename from lib/librte_eal/windows/include/sys/socket.h
rename to lib/eal/windows/include/sys/socket.h
diff --git a/lib/librte_eal/windows/include/unistd.h b/lib/eal/windows/include/unistd.h
similarity index 100%
rename from lib/librte_eal/windows/include/unistd.h
rename to lib/eal/windows/include/unistd.h
diff --git a/lib/librte_eal/windows/meson.build b/lib/eal/windows/meson.build
similarity index 100%
rename from lib/librte_eal/windows/meson.build
rename to lib/eal/windows/meson.build
diff --git a/lib/librte_eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
similarity index 100%
rename from lib/librte_eal/windows/rte_thread.c
rename to lib/eal/windows/rte_thread.c
diff --git a/lib/librte_eal/x86/include/meson.build b/lib/eal/x86/include/meson.build
similarity index 100%
rename from lib/librte_eal/x86/include/meson.build
rename to lib/eal/x86/include/meson.build
diff --git a/lib/librte_eal/x86/include/rte_atomic.h b/lib/eal/x86/include/rte_atomic.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_atomic.h
rename to lib/eal/x86/include/rte_atomic.h
diff --git a/lib/librte_eal/x86/include/rte_atomic_32.h b/lib/eal/x86/include/rte_atomic_32.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_atomic_32.h
rename to lib/eal/x86/include/rte_atomic_32.h
diff --git a/lib/librte_eal/x86/include/rte_atomic_64.h b/lib/eal/x86/include/rte_atomic_64.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_atomic_64.h
rename to lib/eal/x86/include/rte_atomic_64.h
diff --git a/lib/librte_eal/x86/include/rte_byteorder.h b/lib/eal/x86/include/rte_byteorder.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_byteorder.h
rename to lib/eal/x86/include/rte_byteorder.h
diff --git a/lib/librte_eal/x86/include/rte_byteorder_32.h b/lib/eal/x86/include/rte_byteorder_32.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_byteorder_32.h
rename to lib/eal/x86/include/rte_byteorder_32.h
diff --git a/lib/librte_eal/x86/include/rte_byteorder_64.h b/lib/eal/x86/include/rte_byteorder_64.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_byteorder_64.h
rename to lib/eal/x86/include/rte_byteorder_64.h
diff --git a/lib/librte_eal/x86/include/rte_cpuflags.h b/lib/eal/x86/include/rte_cpuflags.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_cpuflags.h
rename to lib/eal/x86/include/rte_cpuflags.h
diff --git a/lib/librte_eal/x86/include/rte_cycles.h b/lib/eal/x86/include/rte_cycles.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_cycles.h
rename to lib/eal/x86/include/rte_cycles.h
diff --git a/lib/librte_eal/x86/include/rte_io.h b/lib/eal/x86/include/rte_io.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_io.h
rename to lib/eal/x86/include/rte_io.h
diff --git a/lib/librte_eal/x86/include/rte_mcslock.h b/lib/eal/x86/include/rte_mcslock.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_mcslock.h
rename to lib/eal/x86/include/rte_mcslock.h
diff --git a/lib/librte_eal/x86/include/rte_memcpy.h b/lib/eal/x86/include/rte_memcpy.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_memcpy.h
rename to lib/eal/x86/include/rte_memcpy.h
diff --git a/lib/librte_eal/x86/include/rte_pause.h b/lib/eal/x86/include/rte_pause.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_pause.h
rename to lib/eal/x86/include/rte_pause.h
diff --git a/lib/librte_eal/x86/include/rte_power_intrinsics.h b/lib/eal/x86/include/rte_power_intrinsics.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_power_intrinsics.h
rename to lib/eal/x86/include/rte_power_intrinsics.h
diff --git a/lib/librte_eal/x86/include/rte_prefetch.h b/lib/eal/x86/include/rte_prefetch.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_prefetch.h
rename to lib/eal/x86/include/rte_prefetch.h
diff --git a/lib/librte_eal/x86/include/rte_rtm.h b/lib/eal/x86/include/rte_rtm.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_rtm.h
rename to lib/eal/x86/include/rte_rtm.h
diff --git a/lib/librte_eal/x86/include/rte_rwlock.h b/lib/eal/x86/include/rte_rwlock.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_rwlock.h
rename to lib/eal/x86/include/rte_rwlock.h
diff --git a/lib/librte_eal/x86/include/rte_spinlock.h b/lib/eal/x86/include/rte_spinlock.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_spinlock.h
rename to lib/eal/x86/include/rte_spinlock.h
diff --git a/lib/librte_eal/x86/include/rte_ticketlock.h b/lib/eal/x86/include/rte_ticketlock.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_ticketlock.h
rename to lib/eal/x86/include/rte_ticketlock.h
diff --git a/lib/librte_eal/x86/include/rte_vect.h b/lib/eal/x86/include/rte_vect.h
similarity index 100%
rename from lib/librte_eal/x86/include/rte_vect.h
rename to lib/eal/x86/include/rte_vect.h
diff --git a/lib/librte_eal/x86/meson.build b/lib/eal/x86/meson.build
similarity index 100%
rename from lib/librte_eal/x86/meson.build
rename to lib/eal/x86/meson.build
diff --git a/lib/librte_eal/x86/rte_cpuflags.c b/lib/eal/x86/rte_cpuflags.c
similarity index 100%
rename from lib/librte_eal/x86/rte_cpuflags.c
rename to lib/eal/x86/rte_cpuflags.c
diff --git a/lib/librte_eal/x86/rte_cpuid.h b/lib/eal/x86/rte_cpuid.h
similarity index 100%
rename from lib/librte_eal/x86/rte_cpuid.h
rename to lib/eal/x86/rte_cpuid.h
diff --git a/lib/librte_eal/x86/rte_cycles.c b/lib/eal/x86/rte_cycles.c
similarity index 100%
rename from lib/librte_eal/x86/rte_cycles.c
rename to lib/eal/x86/rte_cycles.c
diff --git a/lib/librte_eal/x86/rte_hypervisor.c b/lib/eal/x86/rte_hypervisor.c
similarity index 100%
rename from lib/librte_eal/x86/rte_hypervisor.c
rename to lib/eal/x86/rte_hypervisor.c
diff --git a/lib/librte_eal/x86/rte_power_intrinsics.c b/lib/eal/x86/rte_power_intrinsics.c
similarity index 100%
rename from lib/librte_eal/x86/rte_power_intrinsics.c
rename to lib/eal/x86/rte_power_intrinsics.c
diff --git a/lib/librte_eal/x86/rte_spinlock.c b/lib/eal/x86/rte_spinlock.c
similarity index 100%
rename from lib/librte_eal/x86/rte_spinlock.c
rename to lib/eal/x86/rte_spinlock.c
diff --git a/lib/librte_efd/meson.build b/lib/efd/meson.build
similarity index 100%
rename from lib/librte_efd/meson.build
rename to lib/efd/meson.build
diff --git a/lib/librte_efd/rte_efd.c b/lib/efd/rte_efd.c
similarity index 100%
rename from lib/librte_efd/rte_efd.c
rename to lib/efd/rte_efd.c
diff --git a/lib/librte_efd/rte_efd.h b/lib/efd/rte_efd.h
similarity index 100%
rename from lib/librte_efd/rte_efd.h
rename to lib/efd/rte_efd.h
diff --git a/lib/librte_efd/rte_efd_arm64.h b/lib/efd/rte_efd_arm64.h
similarity index 100%
rename from lib/librte_efd/rte_efd_arm64.h
rename to lib/efd/rte_efd_arm64.h
diff --git a/lib/librte_efd/rte_efd_x86.h b/lib/efd/rte_efd_x86.h
similarity index 100%
rename from lib/librte_efd/rte_efd_x86.h
rename to lib/efd/rte_efd_x86.h
diff --git a/lib/librte_efd/version.map b/lib/efd/version.map
similarity index 100%
rename from lib/librte_efd/version.map
rename to lib/efd/version.map
diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h
similarity index 100%
rename from lib/librte_ethdev/ethdev_driver.h
rename to lib/ethdev/ethdev_driver.h
diff --git a/lib/librte_ethdev/ethdev_pci.h b/lib/ethdev/ethdev_pci.h
similarity index 100%
rename from lib/librte_ethdev/ethdev_pci.h
rename to lib/ethdev/ethdev_pci.h
diff --git a/lib/librte_ethdev/ethdev_private.c b/lib/ethdev/ethdev_private.c
similarity index 100%
rename from lib/librte_ethdev/ethdev_private.c
rename to lib/ethdev/ethdev_private.c
diff --git a/lib/librte_ethdev/ethdev_private.h b/lib/ethdev/ethdev_private.h
similarity index 100%
rename from lib/librte_ethdev/ethdev_private.h
rename to lib/ethdev/ethdev_private.h
diff --git a/lib/librte_ethdev/ethdev_profile.c b/lib/ethdev/ethdev_profile.c
similarity index 100%
rename from lib/librte_ethdev/ethdev_profile.c
rename to lib/ethdev/ethdev_profile.c
diff --git a/lib/librte_ethdev/ethdev_profile.h b/lib/ethdev/ethdev_profile.h
similarity index 100%
rename from lib/librte_ethdev/ethdev_profile.h
rename to lib/ethdev/ethdev_profile.h
diff --git a/lib/librte_ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c
similarity index 100%
rename from lib/librte_ethdev/ethdev_trace_points.c
rename to lib/ethdev/ethdev_trace_points.c
diff --git a/lib/librte_ethdev/ethdev_vdev.h b/lib/ethdev/ethdev_vdev.h
similarity index 100%
rename from lib/librte_ethdev/ethdev_vdev.h
rename to lib/ethdev/ethdev_vdev.h
diff --git a/lib/librte_ethdev/meson.build b/lib/ethdev/meson.build
similarity index 100%
rename from lib/librte_ethdev/meson.build
rename to lib/ethdev/meson.build
diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/ethdev/rte_class_eth.c
similarity index 100%
rename from lib/librte_ethdev/rte_class_eth.c
rename to lib/ethdev/rte_class_eth.c
diff --git a/lib/librte_ethdev/rte_dev_info.h b/lib/ethdev/rte_dev_info.h
similarity index 100%
rename from lib/librte_ethdev/rte_dev_info.h
rename to lib/ethdev/rte_dev_info.h
diff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/ethdev/rte_eth_ctrl.h
similarity index 100%
rename from lib/librte_ethdev/rte_eth_ctrl.h
rename to lib/ethdev/rte_eth_ctrl.h
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
similarity index 100%
rename from lib/librte_ethdev/rte_ethdev.c
rename to lib/ethdev/rte_ethdev.c
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
similarity index 100%
rename from lib/librte_ethdev/rte_ethdev.h
rename to lib/ethdev/rte_ethdev.h
diff --git a/lib/librte_ethdev/rte_ethdev_core.h b/lib/ethdev/rte_ethdev_core.h
similarity index 100%
rename from lib/librte_ethdev/rte_ethdev_core.h
rename to lib/ethdev/rte_ethdev_core.h
diff --git a/lib/librte_ethdev/rte_ethdev_trace.h b/lib/ethdev/rte_ethdev_trace.h
similarity index 100%
rename from lib/librte_ethdev/rte_ethdev_trace.h
rename to lib/ethdev/rte_ethdev_trace.h
diff --git a/lib/librte_ethdev/rte_ethdev_trace_fp.h b/lib/ethdev/rte_ethdev_trace_fp.h
similarity index 100%
rename from lib/librte_ethdev/rte_ethdev_trace_fp.h
rename to lib/ethdev/rte_ethdev_trace_fp.h
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
similarity index 100%
rename from lib/librte_ethdev/rte_flow.c
rename to lib/ethdev/rte_flow.c
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
similarity index 100%
rename from lib/librte_ethdev/rte_flow.h
rename to lib/ethdev/rte_flow.h
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/ethdev/rte_flow_driver.h
similarity index 100%
rename from lib/librte_ethdev/rte_flow_driver.h
rename to lib/ethdev/rte_flow_driver.h
diff --git a/lib/librte_ethdev/rte_mtr.c b/lib/ethdev/rte_mtr.c
similarity index 100%
rename from lib/librte_ethdev/rte_mtr.c
rename to lib/ethdev/rte_mtr.c
diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/ethdev/rte_mtr.h
similarity index 100%
rename from lib/librte_ethdev/rte_mtr.h
rename to lib/ethdev/rte_mtr.h
diff --git a/lib/librte_ethdev/rte_mtr_driver.h b/lib/ethdev/rte_mtr_driver.h
similarity index 100%
rename from lib/librte_ethdev/rte_mtr_driver.h
rename to lib/ethdev/rte_mtr_driver.h
diff --git a/lib/librte_ethdev/rte_tm.c b/lib/ethdev/rte_tm.c
similarity index 100%
rename from lib/librte_ethdev/rte_tm.c
rename to lib/ethdev/rte_tm.c
diff --git a/lib/librte_ethdev/rte_tm.h b/lib/ethdev/rte_tm.h
similarity index 100%
rename from lib/librte_ethdev/rte_tm.h
rename to lib/ethdev/rte_tm.h
diff --git a/lib/librte_ethdev/rte_tm_driver.h b/lib/ethdev/rte_tm_driver.h
similarity index 100%
rename from lib/librte_ethdev/rte_tm_driver.h
rename to lib/ethdev/rte_tm_driver.h
diff --git a/lib/librte_ethdev/version.map b/lib/ethdev/version.map
similarity index 100%
rename from lib/librte_ethdev/version.map
rename to lib/ethdev/version.map
diff --git a/lib/librte_eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h
similarity index 100%
rename from lib/librte_eventdev/eventdev_pmd.h
rename to lib/eventdev/eventdev_pmd.h
diff --git a/lib/librte_eventdev/eventdev_pmd_pci.h b/lib/eventdev/eventdev_pmd_pci.h
similarity index 100%
rename from lib/librte_eventdev/eventdev_pmd_pci.h
rename to lib/eventdev/eventdev_pmd_pci.h
diff --git a/lib/librte_eventdev/eventdev_pmd_vdev.h b/lib/eventdev/eventdev_pmd_vdev.h
similarity index 100%
rename from lib/librte_eventdev/eventdev_pmd_vdev.h
rename to lib/eventdev/eventdev_pmd_vdev.h
diff --git a/lib/librte_eventdev/eventdev_trace_points.c b/lib/eventdev/eventdev_trace_points.c
similarity index 100%
rename from lib/librte_eventdev/eventdev_trace_points.c
rename to lib/eventdev/eventdev_trace_points.c
diff --git a/lib/librte_eventdev/meson.build b/lib/eventdev/meson.build
similarity index 100%
rename from lib/librte_eventdev/meson.build
rename to lib/eventdev/meson.build
diff --git a/lib/librte_eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c
similarity index 100%
rename from lib/librte_eventdev/rte_event_crypto_adapter.c
rename to lib/eventdev/rte_event_crypto_adapter.c
diff --git a/lib/librte_eventdev/rte_event_crypto_adapter.h b/lib/eventdev/rte_event_crypto_adapter.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_crypto_adapter.h
rename to lib/eventdev/rte_event_crypto_adapter.h
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
similarity index 100%
rename from lib/librte_eventdev/rte_event_eth_rx_adapter.c
rename to lib/eventdev/rte_event_eth_rx_adapter.c
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_eth_rx_adapter.h
rename to lib/eventdev/rte_event_eth_rx_adapter.h
diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
similarity index 100%
rename from lib/librte_eventdev/rte_event_eth_tx_adapter.c
rename to lib/eventdev/rte_event_eth_tx_adapter.c
diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_eth_tx_adapter.h
rename to lib/eventdev/rte_event_eth_tx_adapter.h
diff --git a/lib/librte_eventdev/rte_event_ring.c b/lib/eventdev/rte_event_ring.c
similarity index 100%
rename from lib/librte_eventdev/rte_event_ring.c
rename to lib/eventdev/rte_event_ring.c
diff --git a/lib/librte_eventdev/rte_event_ring.h b/lib/eventdev/rte_event_ring.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_ring.h
rename to lib/eventdev/rte_event_ring.h
diff --git a/lib/librte_eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c
similarity index 100%
rename from lib/librte_eventdev/rte_event_timer_adapter.c
rename to lib/eventdev/rte_event_timer_adapter.c
diff --git a/lib/librte_eventdev/rte_event_timer_adapter.h b/lib/eventdev/rte_event_timer_adapter.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_timer_adapter.h
rename to lib/eventdev/rte_event_timer_adapter.h
diff --git a/lib/librte_eventdev/rte_event_timer_adapter_pmd.h b/lib/eventdev/rte_event_timer_adapter_pmd.h
similarity index 100%
rename from lib/librte_eventdev/rte_event_timer_adapter_pmd.h
rename to lib/eventdev/rte_event_timer_adapter_pmd.h
diff --git a/lib/librte_eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c
similarity index 100%
rename from lib/librte_eventdev/rte_eventdev.c
rename to lib/eventdev/rte_eventdev.c
diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h
similarity index 100%
rename from lib/librte_eventdev/rte_eventdev.h
rename to lib/eventdev/rte_eventdev.h
diff --git a/lib/librte_eventdev/rte_eventdev_trace.h b/lib/eventdev/rte_eventdev_trace.h
similarity index 100%
rename from lib/librte_eventdev/rte_eventdev_trace.h
rename to lib/eventdev/rte_eventdev_trace.h
diff --git a/lib/librte_eventdev/rte_eventdev_trace_fp.h b/lib/eventdev/rte_eventdev_trace_fp.h
similarity index 100%
rename from lib/librte_eventdev/rte_eventdev_trace_fp.h
rename to lib/eventdev/rte_eventdev_trace_fp.h
diff --git a/lib/librte_eventdev/version.map b/lib/eventdev/version.map
similarity index 100%
rename from lib/librte_eventdev/version.map
rename to lib/eventdev/version.map
diff --git a/lib/librte_fib/dir24_8.c b/lib/fib/dir24_8.c
similarity index 100%
rename from lib/librte_fib/dir24_8.c
rename to lib/fib/dir24_8.c
diff --git a/lib/librte_fib/dir24_8.h b/lib/fib/dir24_8.h
similarity index 100%
rename from lib/librte_fib/dir24_8.h
rename to lib/fib/dir24_8.h
diff --git a/lib/librte_fib/dir24_8_avx512.c b/lib/fib/dir24_8_avx512.c
similarity index 100%
rename from lib/librte_fib/dir24_8_avx512.c
rename to lib/fib/dir24_8_avx512.c
diff --git a/lib/librte_fib/dir24_8_avx512.h b/lib/fib/dir24_8_avx512.h
similarity index 100%
rename from lib/librte_fib/dir24_8_avx512.h
rename to lib/fib/dir24_8_avx512.h
diff --git a/lib/librte_fib/meson.build b/lib/fib/meson.build
similarity index 100%
rename from lib/librte_fib/meson.build
rename to lib/fib/meson.build
diff --git a/lib/librte_fib/rte_fib.c b/lib/fib/rte_fib.c
similarity index 100%
rename from lib/librte_fib/rte_fib.c
rename to lib/fib/rte_fib.c
diff --git a/lib/librte_fib/rte_fib.h b/lib/fib/rte_fib.h
similarity index 100%
rename from lib/librte_fib/rte_fib.h
rename to lib/fib/rte_fib.h
diff --git a/lib/librte_fib/rte_fib6.c b/lib/fib/rte_fib6.c
similarity index 100%
rename from lib/librte_fib/rte_fib6.c
rename to lib/fib/rte_fib6.c
diff --git a/lib/librte_fib/rte_fib6.h b/lib/fib/rte_fib6.h
similarity index 100%
rename from lib/librte_fib/rte_fib6.h
rename to lib/fib/rte_fib6.h
diff --git a/lib/librte_fib/trie.c b/lib/fib/trie.c
similarity index 100%
rename from lib/librte_fib/trie.c
rename to lib/fib/trie.c
diff --git a/lib/librte_fib/trie.h b/lib/fib/trie.h
similarity index 100%
rename from lib/librte_fib/trie.h
rename to lib/fib/trie.h
diff --git a/lib/librte_fib/trie_avx512.c b/lib/fib/trie_avx512.c
similarity index 100%
rename from lib/librte_fib/trie_avx512.c
rename to lib/fib/trie_avx512.c
diff --git a/lib/librte_fib/trie_avx512.h b/lib/fib/trie_avx512.h
similarity index 100%
rename from lib/librte_fib/trie_avx512.h
rename to lib/fib/trie_avx512.h
diff --git a/lib/librte_fib/version.map b/lib/fib/version.map
similarity index 100%
rename from lib/librte_fib/version.map
rename to lib/fib/version.map
diff --git a/lib/librte_flow_classify/meson.build b/lib/flow_classify/meson.build
similarity index 100%
rename from lib/librte_flow_classify/meson.build
rename to lib/flow_classify/meson.build
diff --git a/lib/librte_flow_classify/rte_flow_classify.c b/lib/flow_classify/rte_flow_classify.c
similarity index 100%
rename from lib/librte_flow_classify/rte_flow_classify.c
rename to lib/flow_classify/rte_flow_classify.c
diff --git a/lib/librte_flow_classify/rte_flow_classify.h b/lib/flow_classify/rte_flow_classify.h
similarity index 100%
rename from lib/librte_flow_classify/rte_flow_classify.h
rename to lib/flow_classify/rte_flow_classify.h
diff --git a/lib/librte_flow_classify/rte_flow_classify_parse.c b/lib/flow_classify/rte_flow_classify_parse.c
similarity index 100%
rename from lib/librte_flow_classify/rte_flow_classify_parse.c
rename to lib/flow_classify/rte_flow_classify_parse.c
diff --git a/lib/librte_flow_classify/rte_flow_classify_parse.h b/lib/flow_classify/rte_flow_classify_parse.h
similarity index 100%
rename from lib/librte_flow_classify/rte_flow_classify_parse.h
rename to lib/flow_classify/rte_flow_classify_parse.h
diff --git a/lib/librte_flow_classify/version.map b/lib/flow_classify/version.map
similarity index 100%
rename from lib/librte_flow_classify/version.map
rename to lib/flow_classify/version.map
diff --git a/lib/librte_graph/graph.c b/lib/graph/graph.c
similarity index 100%
rename from lib/librte_graph/graph.c
rename to lib/graph/graph.c
diff --git a/lib/librte_graph/graph_debug.c b/lib/graph/graph_debug.c
similarity index 100%
rename from lib/librte_graph/graph_debug.c
rename to lib/graph/graph_debug.c
diff --git a/lib/librte_graph/graph_ops.c b/lib/graph/graph_ops.c
similarity index 100%
rename from lib/librte_graph/graph_ops.c
rename to lib/graph/graph_ops.c
diff --git a/lib/librte_graph/graph_populate.c b/lib/graph/graph_populate.c
similarity index 100%
rename from lib/librte_graph/graph_populate.c
rename to lib/graph/graph_populate.c
diff --git a/lib/librte_graph/graph_private.h b/lib/graph/graph_private.h
similarity index 100%
rename from lib/librte_graph/graph_private.h
rename to lib/graph/graph_private.h
diff --git a/lib/librte_graph/graph_stats.c b/lib/graph/graph_stats.c
similarity index 100%
rename from lib/librte_graph/graph_stats.c
rename to lib/graph/graph_stats.c
diff --git a/lib/librte_graph/meson.build b/lib/graph/meson.build
similarity index 100%
rename from lib/librte_graph/meson.build
rename to lib/graph/meson.build
diff --git a/lib/librte_graph/node.c b/lib/graph/node.c
similarity index 100%
rename from lib/librte_graph/node.c
rename to lib/graph/node.c
diff --git a/lib/librte_graph/rte_graph.h b/lib/graph/rte_graph.h
similarity index 100%
rename from lib/librte_graph/rte_graph.h
rename to lib/graph/rte_graph.h
diff --git a/lib/librte_graph/rte_graph_worker.h b/lib/graph/rte_graph_worker.h
similarity index 100%
rename from lib/librte_graph/rte_graph_worker.h
rename to lib/graph/rte_graph_worker.h
diff --git a/lib/librte_graph/version.map b/lib/graph/version.map
similarity index 100%
rename from lib/librte_graph/version.map
rename to lib/graph/version.map
diff --git a/lib/librte_gro/gro_tcp4.c b/lib/gro/gro_tcp4.c
similarity index 100%
rename from lib/librte_gro/gro_tcp4.c
rename to lib/gro/gro_tcp4.c
diff --git a/lib/librte_gro/gro_tcp4.h b/lib/gro/gro_tcp4.h
similarity index 100%
rename from lib/librte_gro/gro_tcp4.h
rename to lib/gro/gro_tcp4.h
diff --git a/lib/librte_gro/gro_udp4.c b/lib/gro/gro_udp4.c
similarity index 100%
rename from lib/librte_gro/gro_udp4.c
rename to lib/gro/gro_udp4.c
diff --git a/lib/librte_gro/gro_udp4.h b/lib/gro/gro_udp4.h
similarity index 100%
rename from lib/librte_gro/gro_udp4.h
rename to lib/gro/gro_udp4.h
diff --git a/lib/librte_gro/gro_vxlan_tcp4.c b/lib/gro/gro_vxlan_tcp4.c
similarity index 100%
rename from lib/librte_gro/gro_vxlan_tcp4.c
rename to lib/gro/gro_vxlan_tcp4.c
diff --git a/lib/librte_gro/gro_vxlan_tcp4.h b/lib/gro/gro_vxlan_tcp4.h
similarity index 100%
rename from lib/librte_gro/gro_vxlan_tcp4.h
rename to lib/gro/gro_vxlan_tcp4.h
diff --git a/lib/librte_gro/gro_vxlan_udp4.c b/lib/gro/gro_vxlan_udp4.c
similarity index 100%
rename from lib/librte_gro/gro_vxlan_udp4.c
rename to lib/gro/gro_vxlan_udp4.c
diff --git a/lib/librte_gro/gro_vxlan_udp4.h b/lib/gro/gro_vxlan_udp4.h
similarity index 100%
rename from lib/librte_gro/gro_vxlan_udp4.h
rename to lib/gro/gro_vxlan_udp4.h
diff --git a/lib/librte_gro/meson.build b/lib/gro/meson.build
similarity index 100%
rename from lib/librte_gro/meson.build
rename to lib/gro/meson.build
diff --git a/lib/librte_gro/rte_gro.c b/lib/gro/rte_gro.c
similarity index 100%
rename from lib/librte_gro/rte_gro.c
rename to lib/gro/rte_gro.c
diff --git a/lib/librte_gro/rte_gro.h b/lib/gro/rte_gro.h
similarity index 100%
rename from lib/librte_gro/rte_gro.h
rename to lib/gro/rte_gro.h
diff --git a/lib/librte_gro/version.map b/lib/gro/version.map
similarity index 100%
rename from lib/librte_gro/version.map
rename to lib/gro/version.map
diff --git a/lib/librte_gso/gso_common.c b/lib/gso/gso_common.c
similarity index 100%
rename from lib/librte_gso/gso_common.c
rename to lib/gso/gso_common.c
diff --git a/lib/librte_gso/gso_common.h b/lib/gso/gso_common.h
similarity index 100%
rename from lib/librte_gso/gso_common.h
rename to lib/gso/gso_common.h
diff --git a/lib/librte_gso/gso_tcp4.c b/lib/gso/gso_tcp4.c
similarity index 100%
rename from lib/librte_gso/gso_tcp4.c
rename to lib/gso/gso_tcp4.c
diff --git a/lib/librte_gso/gso_tcp4.h b/lib/gso/gso_tcp4.h
similarity index 100%
rename from lib/librte_gso/gso_tcp4.h
rename to lib/gso/gso_tcp4.h
diff --git a/lib/librte_gso/gso_tunnel_tcp4.c b/lib/gso/gso_tunnel_tcp4.c
similarity index 100%
rename from lib/librte_gso/gso_tunnel_tcp4.c
rename to lib/gso/gso_tunnel_tcp4.c
diff --git a/lib/librte_gso/gso_tunnel_tcp4.h b/lib/gso/gso_tunnel_tcp4.h
similarity index 100%
rename from lib/librte_gso/gso_tunnel_tcp4.h
rename to lib/gso/gso_tunnel_tcp4.h
diff --git a/lib/librte_gso/gso_tunnel_udp4.c b/lib/gso/gso_tunnel_udp4.c
similarity index 100%
rename from lib/librte_gso/gso_tunnel_udp4.c
rename to lib/gso/gso_tunnel_udp4.c
diff --git a/lib/librte_gso/gso_tunnel_udp4.h b/lib/gso/gso_tunnel_udp4.h
similarity index 100%
rename from lib/librte_gso/gso_tunnel_udp4.h
rename to lib/gso/gso_tunnel_udp4.h
diff --git a/lib/librte_gso/gso_udp4.c b/lib/gso/gso_udp4.c
similarity index 100%
rename from lib/librte_gso/gso_udp4.c
rename to lib/gso/gso_udp4.c
diff --git a/lib/librte_gso/gso_udp4.h b/lib/gso/gso_udp4.h
similarity index 100%
rename from lib/librte_gso/gso_udp4.h
rename to lib/gso/gso_udp4.h
diff --git a/lib/librte_gso/meson.build b/lib/gso/meson.build
similarity index 100%
rename from lib/librte_gso/meson.build
rename to lib/gso/meson.build
diff --git a/lib/librte_gso/rte_gso.c b/lib/gso/rte_gso.c
similarity index 100%
rename from lib/librte_gso/rte_gso.c
rename to lib/gso/rte_gso.c
diff --git a/lib/librte_gso/rte_gso.h b/lib/gso/rte_gso.h
similarity index 100%
rename from lib/librte_gso/rte_gso.h
rename to lib/gso/rte_gso.h
diff --git a/lib/librte_gso/version.map b/lib/gso/version.map
similarity index 100%
rename from lib/librte_gso/version.map
rename to lib/gso/version.map
diff --git a/lib/librte_hash/meson.build b/lib/hash/meson.build
similarity index 100%
rename from lib/librte_hash/meson.build
rename to lib/hash/meson.build
diff --git a/lib/librte_hash/rte_cmp_arm64.h b/lib/hash/rte_cmp_arm64.h
similarity index 100%
rename from lib/librte_hash/rte_cmp_arm64.h
rename to lib/hash/rte_cmp_arm64.h
diff --git a/lib/librte_hash/rte_cmp_x86.h b/lib/hash/rte_cmp_x86.h
similarity index 100%
rename from lib/librte_hash/rte_cmp_x86.h
rename to lib/hash/rte_cmp_x86.h
diff --git a/lib/librte_hash/rte_crc_arm64.h b/lib/hash/rte_crc_arm64.h
similarity index 100%
rename from lib/librte_hash/rte_crc_arm64.h
rename to lib/hash/rte_crc_arm64.h
diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/hash/rte_cuckoo_hash.c
similarity index 100%
rename from lib/librte_hash/rte_cuckoo_hash.c
rename to lib/hash/rte_cuckoo_hash.c
diff --git a/lib/librte_hash/rte_cuckoo_hash.h b/lib/hash/rte_cuckoo_hash.h
similarity index 100%
rename from lib/librte_hash/rte_cuckoo_hash.h
rename to lib/hash/rte_cuckoo_hash.h
diff --git a/lib/librte_hash/rte_fbk_hash.c b/lib/hash/rte_fbk_hash.c
similarity index 100%
rename from lib/librte_hash/rte_fbk_hash.c
rename to lib/hash/rte_fbk_hash.c
diff --git a/lib/librte_hash/rte_fbk_hash.h b/lib/hash/rte_fbk_hash.h
similarity index 100%
rename from lib/librte_hash/rte_fbk_hash.h
rename to lib/hash/rte_fbk_hash.h
diff --git a/lib/librte_hash/rte_hash.h b/lib/hash/rte_hash.h
similarity index 100%
rename from lib/librte_hash/rte_hash.h
rename to lib/hash/rte_hash.h
diff --git a/lib/librte_hash/rte_hash_crc.h b/lib/hash/rte_hash_crc.h
similarity index 100%
rename from lib/librte_hash/rte_hash_crc.h
rename to lib/hash/rte_hash_crc.h
diff --git a/lib/librte_hash/rte_jhash.h b/lib/hash/rte_jhash.h
similarity index 100%
rename from lib/librte_hash/rte_jhash.h
rename to lib/hash/rte_jhash.h
diff --git a/lib/librte_hash/rte_thash.h b/lib/hash/rte_thash.h
similarity index 100%
rename from lib/librte_hash/rte_thash.h
rename to lib/hash/rte_thash.h
diff --git a/lib/librte_hash/version.map b/lib/hash/version.map
similarity index 100%
rename from lib/librte_hash/version.map
rename to lib/hash/version.map
diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/ip_frag/ip_frag_common.h
similarity index 100%
rename from lib/librte_ip_frag/ip_frag_common.h
rename to lib/ip_frag/ip_frag_common.h
diff --git a/lib/librte_ip_frag/ip_frag_internal.c b/lib/ip_frag/ip_frag_internal.c
similarity index 100%
rename from lib/librte_ip_frag/ip_frag_internal.c
rename to lib/ip_frag/ip_frag_internal.c
diff --git a/lib/librte_ip_frag/meson.build b/lib/ip_frag/meson.build
similarity index 100%
rename from lib/librte_ip_frag/meson.build
rename to lib/ip_frag/meson.build
diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/ip_frag/rte_ip_frag.h
similarity index 100%
rename from lib/librte_ip_frag/rte_ip_frag.h
rename to lib/ip_frag/rte_ip_frag.h
diff --git a/lib/librte_ip_frag/rte_ip_frag_common.c b/lib/ip_frag/rte_ip_frag_common.c
similarity index 100%
rename from lib/librte_ip_frag/rte_ip_frag_common.c
rename to lib/ip_frag/rte_ip_frag_common.c
diff --git a/lib/librte_ip_frag/rte_ipv4_fragmentation.c b/lib/ip_frag/rte_ipv4_fragmentation.c
similarity index 100%
rename from lib/librte_ip_frag/rte_ipv4_fragmentation.c
rename to lib/ip_frag/rte_ipv4_fragmentation.c
diff --git a/lib/librte_ip_frag/rte_ipv4_reassembly.c b/lib/ip_frag/rte_ipv4_reassembly.c
similarity index 100%
rename from lib/librte_ip_frag/rte_ipv4_reassembly.c
rename to lib/ip_frag/rte_ipv4_reassembly.c
diff --git a/lib/librte_ip_frag/rte_ipv6_fragmentation.c b/lib/ip_frag/rte_ipv6_fragmentation.c
similarity index 100%
rename from lib/librte_ip_frag/rte_ipv6_fragmentation.c
rename to lib/ip_frag/rte_ipv6_fragmentation.c
diff --git a/lib/librte_ip_frag/rte_ipv6_reassembly.c b/lib/ip_frag/rte_ipv6_reassembly.c
similarity index 100%
rename from lib/librte_ip_frag/rte_ipv6_reassembly.c
rename to lib/ip_frag/rte_ipv6_reassembly.c
diff --git a/lib/librte_ip_frag/version.map b/lib/ip_frag/version.map
similarity index 100%
rename from lib/librte_ip_frag/version.map
rename to lib/ip_frag/version.map
diff --git a/lib/librte_ipsec/crypto.h b/lib/ipsec/crypto.h
similarity index 100%
rename from lib/librte_ipsec/crypto.h
rename to lib/ipsec/crypto.h
diff --git a/lib/librte_ipsec/esp_inb.c b/lib/ipsec/esp_inb.c
similarity index 100%
rename from lib/librte_ipsec/esp_inb.c
rename to lib/ipsec/esp_inb.c
diff --git a/lib/librte_ipsec/esp_outb.c b/lib/ipsec/esp_outb.c
similarity index 100%
rename from lib/librte_ipsec/esp_outb.c
rename to lib/ipsec/esp_outb.c
diff --git a/lib/librte_ipsec/iph.h b/lib/ipsec/iph.h
similarity index 100%
rename from lib/librte_ipsec/iph.h
rename to lib/ipsec/iph.h
diff --git a/lib/librte_ipsec/ipsec_sad.c b/lib/ipsec/ipsec_sad.c
similarity index 100%
rename from lib/librte_ipsec/ipsec_sad.c
rename to lib/ipsec/ipsec_sad.c
diff --git a/lib/librte_ipsec/ipsec_sqn.h b/lib/ipsec/ipsec_sqn.h
similarity index 100%
rename from lib/librte_ipsec/ipsec_sqn.h
rename to lib/ipsec/ipsec_sqn.h
diff --git a/lib/librte_ipsec/meson.build b/lib/ipsec/meson.build
similarity index 100%
rename from lib/librte_ipsec/meson.build
rename to lib/ipsec/meson.build
diff --git a/lib/librte_ipsec/misc.h b/lib/ipsec/misc.h
similarity index 100%
rename from lib/librte_ipsec/misc.h
rename to lib/ipsec/misc.h
diff --git a/lib/librte_ipsec/pad.h b/lib/ipsec/pad.h
similarity index 100%
rename from lib/librte_ipsec/pad.h
rename to lib/ipsec/pad.h
diff --git a/lib/librte_ipsec/rte_ipsec.h b/lib/ipsec/rte_ipsec.h
similarity index 100%
rename from lib/librte_ipsec/rte_ipsec.h
rename to lib/ipsec/rte_ipsec.h
diff --git a/lib/librte_ipsec/rte_ipsec_group.h b/lib/ipsec/rte_ipsec_group.h
similarity index 100%
rename from lib/librte_ipsec/rte_ipsec_group.h
rename to lib/ipsec/rte_ipsec_group.h
diff --git a/lib/librte_ipsec/rte_ipsec_sa.h b/lib/ipsec/rte_ipsec_sa.h
similarity index 100%
rename from lib/librte_ipsec/rte_ipsec_sa.h
rename to lib/ipsec/rte_ipsec_sa.h
diff --git a/lib/librte_ipsec/rte_ipsec_sad.h b/lib/ipsec/rte_ipsec_sad.h
similarity index 100%
rename from lib/librte_ipsec/rte_ipsec_sad.h
rename to lib/ipsec/rte_ipsec_sad.h
diff --git a/lib/librte_ipsec/sa.c b/lib/ipsec/sa.c
similarity index 100%
rename from lib/librte_ipsec/sa.c
rename to lib/ipsec/sa.c
diff --git a/lib/librte_ipsec/sa.h b/lib/ipsec/sa.h
similarity index 100%
rename from lib/librte_ipsec/sa.h
rename to lib/ipsec/sa.h
diff --git a/lib/librte_ipsec/ses.c b/lib/ipsec/ses.c
similarity index 100%
rename from lib/librte_ipsec/ses.c
rename to lib/ipsec/ses.c
diff --git a/lib/librte_ipsec/version.map b/lib/ipsec/version.map
similarity index 100%
rename from lib/librte_ipsec/version.map
rename to lib/ipsec/version.map
diff --git a/lib/librte_jobstats/meson.build b/lib/jobstats/meson.build
similarity index 100%
rename from lib/librte_jobstats/meson.build
rename to lib/jobstats/meson.build
diff --git a/lib/librte_jobstats/rte_jobstats.c b/lib/jobstats/rte_jobstats.c
similarity index 100%
rename from lib/librte_jobstats/rte_jobstats.c
rename to lib/jobstats/rte_jobstats.c
diff --git a/lib/librte_jobstats/rte_jobstats.h b/lib/jobstats/rte_jobstats.h
similarity index 100%
rename from lib/librte_jobstats/rte_jobstats.h
rename to lib/jobstats/rte_jobstats.h
diff --git a/lib/librte_jobstats/version.map b/lib/jobstats/version.map
similarity index 100%
rename from lib/librte_jobstats/version.map
rename to lib/jobstats/version.map
diff --git a/lib/librte_kni/meson.build b/lib/kni/meson.build
similarity index 100%
rename from lib/librte_kni/meson.build
rename to lib/kni/meson.build
diff --git a/lib/librte_kni/rte_kni.c b/lib/kni/rte_kni.c
similarity index 100%
rename from lib/librte_kni/rte_kni.c
rename to lib/kni/rte_kni.c
diff --git a/lib/librte_kni/rte_kni.h b/lib/kni/rte_kni.h
similarity index 100%
rename from lib/librte_kni/rte_kni.h
rename to lib/kni/rte_kni.h
diff --git a/lib/librte_kni/rte_kni_common.h b/lib/kni/rte_kni_common.h
similarity index 100%
rename from lib/librte_kni/rte_kni_common.h
rename to lib/kni/rte_kni_common.h
diff --git a/lib/librte_kni/rte_kni_fifo.h b/lib/kni/rte_kni_fifo.h
similarity index 100%
rename from lib/librte_kni/rte_kni_fifo.h
rename to lib/kni/rte_kni_fifo.h
diff --git a/lib/librte_kni/version.map b/lib/kni/version.map
similarity index 100%
rename from lib/librte_kni/version.map
rename to lib/kni/version.map
diff --git a/lib/librte_kvargs/meson.build b/lib/kvargs/meson.build
similarity index 100%
rename from lib/librte_kvargs/meson.build
rename to lib/kvargs/meson.build
diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/kvargs/rte_kvargs.c
similarity index 100%
rename from lib/librte_kvargs/rte_kvargs.c
rename to lib/kvargs/rte_kvargs.c
diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/kvargs/rte_kvargs.h
similarity index 100%
rename from lib/librte_kvargs/rte_kvargs.h
rename to lib/kvargs/rte_kvargs.h
diff --git a/lib/librte_kvargs/version.map b/lib/kvargs/version.map
similarity index 100%
rename from lib/librte_kvargs/version.map
rename to lib/kvargs/version.map
diff --git a/lib/librte_latencystats/meson.build b/lib/latencystats/meson.build
similarity index 100%
rename from lib/librte_latencystats/meson.build
rename to lib/latencystats/meson.build
diff --git a/lib/librte_latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c
similarity index 100%
rename from lib/librte_latencystats/rte_latencystats.c
rename to lib/latencystats/rte_latencystats.c
diff --git a/lib/librte_latencystats/rte_latencystats.h b/lib/latencystats/rte_latencystats.h
similarity index 100%
rename from lib/librte_latencystats/rte_latencystats.h
rename to lib/latencystats/rte_latencystats.h
diff --git a/lib/librte_latencystats/version.map b/lib/latencystats/version.map
similarity index 100%
rename from lib/librte_latencystats/version.map
rename to lib/latencystats/version.map
diff --git a/lib/librte_lpm/meson.build b/lib/lpm/meson.build
similarity index 100%
rename from lib/librte_lpm/meson.build
rename to lib/lpm/meson.build
diff --git a/lib/librte_lpm/rte_lpm.c b/lib/lpm/rte_lpm.c
similarity index 100%
rename from lib/librte_lpm/rte_lpm.c
rename to lib/lpm/rte_lpm.c
diff --git a/lib/librte_lpm/rte_lpm.h b/lib/lpm/rte_lpm.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm.h
rename to lib/lpm/rte_lpm.h
diff --git a/lib/librte_lpm/rte_lpm6.c b/lib/lpm/rte_lpm6.c
similarity index 100%
rename from lib/librte_lpm/rte_lpm6.c
rename to lib/lpm/rte_lpm6.c
diff --git a/lib/librte_lpm/rte_lpm6.h b/lib/lpm/rte_lpm6.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm6.h
rename to lib/lpm/rte_lpm6.h
diff --git a/lib/librte_lpm/rte_lpm_altivec.h b/lib/lpm/rte_lpm_altivec.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm_altivec.h
rename to lib/lpm/rte_lpm_altivec.h
diff --git a/lib/librte_lpm/rte_lpm_neon.h b/lib/lpm/rte_lpm_neon.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm_neon.h
rename to lib/lpm/rte_lpm_neon.h
diff --git a/lib/librte_lpm/rte_lpm_sse.h b/lib/lpm/rte_lpm_sse.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm_sse.h
rename to lib/lpm/rte_lpm_sse.h
diff --git a/lib/librte_lpm/rte_lpm_sve.h b/lib/lpm/rte_lpm_sve.h
similarity index 100%
rename from lib/librte_lpm/rte_lpm_sve.h
rename to lib/lpm/rte_lpm_sve.h
diff --git a/lib/librte_lpm/version.map b/lib/lpm/version.map
similarity index 100%
rename from lib/librte_lpm/version.map
rename to lib/lpm/version.map
diff --git a/lib/librte_mbuf/meson.build b/lib/mbuf/meson.build
similarity index 100%
rename from lib/librte_mbuf/meson.build
rename to lib/mbuf/meson.build
diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/mbuf/rte_mbuf.c
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf.c
rename to lib/mbuf/rte_mbuf.c
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/mbuf/rte_mbuf.h
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf.h
rename to lib/mbuf/rte_mbuf.h
diff --git a/lib/librte_mbuf/rte_mbuf_core.h b/lib/mbuf/rte_mbuf_core.h
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_core.h
rename to lib/mbuf/rte_mbuf_core.h
diff --git a/lib/librte_mbuf/rte_mbuf_dyn.c b/lib/mbuf/rte_mbuf_dyn.c
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_dyn.c
rename to lib/mbuf/rte_mbuf_dyn.c
diff --git a/lib/librte_mbuf/rte_mbuf_dyn.h b/lib/mbuf/rte_mbuf_dyn.h
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_dyn.h
rename to lib/mbuf/rte_mbuf_dyn.h
diff --git a/lib/librte_mbuf/rte_mbuf_pool_ops.c b/lib/mbuf/rte_mbuf_pool_ops.c
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_pool_ops.c
rename to lib/mbuf/rte_mbuf_pool_ops.c
diff --git a/lib/librte_mbuf/rte_mbuf_pool_ops.h b/lib/mbuf/rte_mbuf_pool_ops.h
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_pool_ops.h
rename to lib/mbuf/rte_mbuf_pool_ops.h
diff --git a/lib/librte_mbuf/rte_mbuf_ptype.c b/lib/mbuf/rte_mbuf_ptype.c
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_ptype.c
rename to lib/mbuf/rte_mbuf_ptype.c
diff --git a/lib/librte_mbuf/rte_mbuf_ptype.h b/lib/mbuf/rte_mbuf_ptype.h
similarity index 100%
rename from lib/librte_mbuf/rte_mbuf_ptype.h
rename to lib/mbuf/rte_mbuf_ptype.h
diff --git a/lib/librte_mbuf/version.map b/lib/mbuf/version.map
similarity index 100%
rename from lib/librte_mbuf/version.map
rename to lib/mbuf/version.map
diff --git a/lib/librte_member/meson.build b/lib/member/meson.build
similarity index 100%
rename from lib/librte_member/meson.build
rename to lib/member/meson.build
diff --git a/lib/librte_member/rte_member.c b/lib/member/rte_member.c
similarity index 100%
rename from lib/librte_member/rte_member.c
rename to lib/member/rte_member.c
diff --git a/lib/librte_member/rte_member.h b/lib/member/rte_member.h
similarity index 100%
rename from lib/librte_member/rte_member.h
rename to lib/member/rte_member.h
diff --git a/lib/librte_member/rte_member_ht.c b/lib/member/rte_member_ht.c
similarity index 100%
rename from lib/librte_member/rte_member_ht.c
rename to lib/member/rte_member_ht.c
diff --git a/lib/librte_member/rte_member_ht.h b/lib/member/rte_member_ht.h
similarity index 100%
rename from lib/librte_member/rte_member_ht.h
rename to lib/member/rte_member_ht.h
diff --git a/lib/librte_member/rte_member_vbf.c b/lib/member/rte_member_vbf.c
similarity index 100%
rename from lib/librte_member/rte_member_vbf.c
rename to lib/member/rte_member_vbf.c
diff --git a/lib/librte_member/rte_member_vbf.h b/lib/member/rte_member_vbf.h
similarity index 100%
rename from lib/librte_member/rte_member_vbf.h
rename to lib/member/rte_member_vbf.h
diff --git a/lib/librte_member/rte_member_x86.h b/lib/member/rte_member_x86.h
similarity index 100%
rename from lib/librte_member/rte_member_x86.h
rename to lib/member/rte_member_x86.h
diff --git a/lib/librte_member/version.map b/lib/member/version.map
similarity index 100%
rename from lib/librte_member/version.map
rename to lib/member/version.map
diff --git a/lib/librte_mempool/mempool_trace_points.c b/lib/mempool/mempool_trace_points.c
similarity index 100%
rename from lib/librte_mempool/mempool_trace_points.c
rename to lib/mempool/mempool_trace_points.c
diff --git a/lib/librte_mempool/meson.build b/lib/mempool/meson.build
similarity index 100%
rename from lib/librte_mempool/meson.build
rename to lib/mempool/meson.build
diff --git a/lib/librte_mempool/rte_mempool.c b/lib/mempool/rte_mempool.c
similarity index 100%
rename from lib/librte_mempool/rte_mempool.c
rename to lib/mempool/rte_mempool.c
diff --git a/lib/librte_mempool/rte_mempool.h b/lib/mempool/rte_mempool.h
similarity index 100%
rename from lib/librte_mempool/rte_mempool.h
rename to lib/mempool/rte_mempool.h
diff --git a/lib/librte_mempool/rte_mempool_ops.c b/lib/mempool/rte_mempool_ops.c
similarity index 100%
rename from lib/librte_mempool/rte_mempool_ops.c
rename to lib/mempool/rte_mempool_ops.c
diff --git a/lib/librte_mempool/rte_mempool_ops_default.c b/lib/mempool/rte_mempool_ops_default.c
similarity index 100%
rename from lib/librte_mempool/rte_mempool_ops_default.c
rename to lib/mempool/rte_mempool_ops_default.c
diff --git a/lib/librte_mempool/rte_mempool_trace.h b/lib/mempool/rte_mempool_trace.h
similarity index 100%
rename from lib/librte_mempool/rte_mempool_trace.h
rename to lib/mempool/rte_mempool_trace.h
diff --git a/lib/librte_mempool/rte_mempool_trace_fp.h b/lib/mempool/rte_mempool_trace_fp.h
similarity index 100%
rename from lib/librte_mempool/rte_mempool_trace_fp.h
rename to lib/mempool/rte_mempool_trace_fp.h
diff --git a/lib/librte_mempool/version.map b/lib/mempool/version.map
similarity index 100%
rename from lib/librte_mempool/version.map
rename to lib/mempool/version.map
diff --git a/lib/meson.build b/lib/meson.build
index 7821dc9290..dc236c06de 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -81,8 +81,10 @@ foreach l:libraries
deps += ['eal']
endif
- dir_name = 'librte_' + l
- subdir(dir_name)
+ subdir(l)
+ if name != l
+ warning('Library name, "@0@", and directory name, "@1@", do not match'.format(name, l))
+ endif
if not build
dpdk_libs_disabled += name
@@ -95,7 +97,7 @@ foreach l:libraries
foreach d:deps
if not is_variable('shared_rte_' + d)
error('Missing internal dependency "@0@" for @1@ [@2@]'
- .format(d, name, 'lib/' + dir_name))
+ .format(d, name, 'lib/' + l))
endif
shared_deps += [get_variable('shared_rte_' + d)]
static_deps += [get_variable('static_rte_' + d)]
@@ -108,7 +110,7 @@ foreach l:libraries
dpdk_chkinc_headers += headers
libname = 'rte_' + name
- includes += include_directories(dir_name)
+ includes += include_directories(l)
if is_windows and use_function_versioning
message('@0@: Function versioning is not supported by Windows.'.format(name))
@@ -140,8 +142,8 @@ foreach l:libraries
cflags += '-DRTE_BUILD_SHARED_LIB'
endif
version_map = '@0@/@1@/version.map'.format(
- meson.current_source_dir(), dir_name)
- implib = dir_name + '.dll.a'
+ meson.current_source_dir(), l)
+ implib = 'librte_' + l + '.dll.a'
def_file = custom_target(libname + '_def',
command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
@@ -199,5 +201,5 @@ foreach l:libraries
set_variable('shared_rte_' + name, shared_dep)
set_variable('static_rte_' + name, static_dep)
- message('lib/@0@: Defining dependency "@1@"'.format(dir_name, name))
+ message('lib/@0@: Defining dependency "@1@"'.format(l, name))
endforeach
diff --git a/lib/librte_meter/meson.build b/lib/meter/meson.build
similarity index 100%
rename from lib/librte_meter/meson.build
rename to lib/meter/meson.build
diff --git a/lib/librte_meter/rte_meter.c b/lib/meter/rte_meter.c
similarity index 100%
rename from lib/librte_meter/rte_meter.c
rename to lib/meter/rte_meter.c
diff --git a/lib/librte_meter/rte_meter.h b/lib/meter/rte_meter.h
similarity index 100%
rename from lib/librte_meter/rte_meter.h
rename to lib/meter/rte_meter.h
diff --git a/lib/librte_meter/version.map b/lib/meter/version.map
similarity index 100%
rename from lib/librte_meter/version.map
rename to lib/meter/version.map
diff --git a/lib/librte_metrics/meson.build b/lib/metrics/meson.build
similarity index 100%
rename from lib/librte_metrics/meson.build
rename to lib/metrics/meson.build
diff --git a/lib/librte_metrics/rte_metrics.c b/lib/metrics/rte_metrics.c
similarity index 100%
rename from lib/librte_metrics/rte_metrics.c
rename to lib/metrics/rte_metrics.c
diff --git a/lib/librte_metrics/rte_metrics.h b/lib/metrics/rte_metrics.h
similarity index 100%
rename from lib/librte_metrics/rte_metrics.h
rename to lib/metrics/rte_metrics.h
diff --git a/lib/librte_metrics/rte_metrics_telemetry.c b/lib/metrics/rte_metrics_telemetry.c
similarity index 100%
rename from lib/librte_metrics/rte_metrics_telemetry.c
rename to lib/metrics/rte_metrics_telemetry.c
diff --git a/lib/librte_metrics/rte_metrics_telemetry.h b/lib/metrics/rte_metrics_telemetry.h
similarity index 100%
rename from lib/librte_metrics/rte_metrics_telemetry.h
rename to lib/metrics/rte_metrics_telemetry.h
diff --git a/lib/librte_metrics/version.map b/lib/metrics/version.map
similarity index 100%
rename from lib/librte_metrics/version.map
rename to lib/metrics/version.map
diff --git a/lib/librte_net/meson.build b/lib/net/meson.build
similarity index 100%
rename from lib/librte_net/meson.build
rename to lib/net/meson.build
diff --git a/lib/librte_net/net_crc.h b/lib/net/net_crc.h
similarity index 100%
rename from lib/librte_net/net_crc.h
rename to lib/net/net_crc.h
diff --git a/lib/librte_net/net_crc_avx512.c b/lib/net/net_crc_avx512.c
similarity index 100%
rename from lib/librte_net/net_crc_avx512.c
rename to lib/net/net_crc_avx512.c
diff --git a/lib/librte_net/net_crc_neon.c b/lib/net/net_crc_neon.c
similarity index 100%
rename from lib/librte_net/net_crc_neon.c
rename to lib/net/net_crc_neon.c
diff --git a/lib/librte_net/net_crc_sse.c b/lib/net/net_crc_sse.c
similarity index 100%
rename from lib/librte_net/net_crc_sse.c
rename to lib/net/net_crc_sse.c
diff --git a/lib/librte_net/rte_arp.c b/lib/net/rte_arp.c
similarity index 100%
rename from lib/librte_net/rte_arp.c
rename to lib/net/rte_arp.c
diff --git a/lib/librte_net/rte_arp.h b/lib/net/rte_arp.h
similarity index 100%
rename from lib/librte_net/rte_arp.h
rename to lib/net/rte_arp.h
diff --git a/lib/librte_net/rte_ecpri.h b/lib/net/rte_ecpri.h
similarity index 100%
rename from lib/librte_net/rte_ecpri.h
rename to lib/net/rte_ecpri.h
diff --git a/lib/librte_net/rte_esp.h b/lib/net/rte_esp.h
similarity index 100%
rename from lib/librte_net/rte_esp.h
rename to lib/net/rte_esp.h
diff --git a/lib/librte_net/rte_ether.c b/lib/net/rte_ether.c
similarity index 100%
rename from lib/librte_net/rte_ether.c
rename to lib/net/rte_ether.c
diff --git a/lib/librte_net/rte_ether.h b/lib/net/rte_ether.h
similarity index 100%
rename from lib/librte_net/rte_ether.h
rename to lib/net/rte_ether.h
diff --git a/lib/librte_net/rte_geneve.h b/lib/net/rte_geneve.h
similarity index 100%
rename from lib/librte_net/rte_geneve.h
rename to lib/net/rte_geneve.h
diff --git a/lib/librte_net/rte_gre.h b/lib/net/rte_gre.h
similarity index 100%
rename from lib/librte_net/rte_gre.h
rename to lib/net/rte_gre.h
diff --git a/lib/librte_net/rte_gtp.h b/lib/net/rte_gtp.h
similarity index 100%
rename from lib/librte_net/rte_gtp.h
rename to lib/net/rte_gtp.h
diff --git a/lib/librte_net/rte_higig.h b/lib/net/rte_higig.h
similarity index 100%
rename from lib/librte_net/rte_higig.h
rename to lib/net/rte_higig.h
diff --git a/lib/librte_net/rte_icmp.h b/lib/net/rte_icmp.h
similarity index 100%
rename from lib/librte_net/rte_icmp.h
rename to lib/net/rte_icmp.h
diff --git a/lib/librte_net/rte_ip.h b/lib/net/rte_ip.h
similarity index 100%
rename from lib/librte_net/rte_ip.h
rename to lib/net/rte_ip.h
diff --git a/lib/librte_net/rte_mpls.h b/lib/net/rte_mpls.h
similarity index 100%
rename from lib/librte_net/rte_mpls.h
rename to lib/net/rte_mpls.h
diff --git a/lib/librte_net/rte_net.c b/lib/net/rte_net.c
similarity index 100%
rename from lib/librte_net/rte_net.c
rename to lib/net/rte_net.c
diff --git a/lib/librte_net/rte_net.h b/lib/net/rte_net.h
similarity index 100%
rename from lib/librte_net/rte_net.h
rename to lib/net/rte_net.h
diff --git a/lib/librte_net/rte_net_crc.c b/lib/net/rte_net_crc.c
similarity index 100%
rename from lib/librte_net/rte_net_crc.c
rename to lib/net/rte_net_crc.c
diff --git a/lib/librte_net/rte_net_crc.h b/lib/net/rte_net_crc.h
similarity index 100%
rename from lib/librte_net/rte_net_crc.h
rename to lib/net/rte_net_crc.h
diff --git a/lib/librte_net/rte_sctp.h b/lib/net/rte_sctp.h
similarity index 100%
rename from lib/librte_net/rte_sctp.h
rename to lib/net/rte_sctp.h
diff --git a/lib/librte_net/rte_tcp.h b/lib/net/rte_tcp.h
similarity index 100%
rename from lib/librte_net/rte_tcp.h
rename to lib/net/rte_tcp.h
diff --git a/lib/librte_net/rte_udp.h b/lib/net/rte_udp.h
similarity index 100%
rename from lib/librte_net/rte_udp.h
rename to lib/net/rte_udp.h
diff --git a/lib/librte_net/rte_vxlan.h b/lib/net/rte_vxlan.h
similarity index 100%
rename from lib/librte_net/rte_vxlan.h
rename to lib/net/rte_vxlan.h
diff --git a/lib/librte_net/version.map b/lib/net/version.map
similarity index 100%
rename from lib/librte_net/version.map
rename to lib/net/version.map
diff --git a/lib/librte_node/ethdev_ctrl.c b/lib/node/ethdev_ctrl.c
similarity index 100%
rename from lib/librte_node/ethdev_ctrl.c
rename to lib/node/ethdev_ctrl.c
diff --git a/lib/librte_node/ethdev_rx.c b/lib/node/ethdev_rx.c
similarity index 100%
rename from lib/librte_node/ethdev_rx.c
rename to lib/node/ethdev_rx.c
diff --git a/lib/librte_node/ethdev_rx_priv.h b/lib/node/ethdev_rx_priv.h
similarity index 100%
rename from lib/librte_node/ethdev_rx_priv.h
rename to lib/node/ethdev_rx_priv.h
diff --git a/lib/librte_node/ethdev_tx.c b/lib/node/ethdev_tx.c
similarity index 100%
rename from lib/librte_node/ethdev_tx.c
rename to lib/node/ethdev_tx.c
diff --git a/lib/librte_node/ethdev_tx_priv.h b/lib/node/ethdev_tx_priv.h
similarity index 100%
rename from lib/librte_node/ethdev_tx_priv.h
rename to lib/node/ethdev_tx_priv.h
diff --git a/lib/librte_node/ip4_lookup.c b/lib/node/ip4_lookup.c
similarity index 100%
rename from lib/librte_node/ip4_lookup.c
rename to lib/node/ip4_lookup.c
diff --git a/lib/librte_node/ip4_lookup_neon.h b/lib/node/ip4_lookup_neon.h
similarity index 100%
rename from lib/librte_node/ip4_lookup_neon.h
rename to lib/node/ip4_lookup_neon.h
diff --git a/lib/librte_node/ip4_lookup_sse.h b/lib/node/ip4_lookup_sse.h
similarity index 100%
rename from lib/librte_node/ip4_lookup_sse.h
rename to lib/node/ip4_lookup_sse.h
diff --git a/lib/librte_node/ip4_rewrite.c b/lib/node/ip4_rewrite.c
similarity index 100%
rename from lib/librte_node/ip4_rewrite.c
rename to lib/node/ip4_rewrite.c
diff --git a/lib/librte_node/ip4_rewrite_priv.h b/lib/node/ip4_rewrite_priv.h
similarity index 100%
rename from lib/librte_node/ip4_rewrite_priv.h
rename to lib/node/ip4_rewrite_priv.h
diff --git a/lib/librte_node/log.c b/lib/node/log.c
similarity index 100%
rename from lib/librte_node/log.c
rename to lib/node/log.c
diff --git a/lib/librte_node/meson.build b/lib/node/meson.build
similarity index 100%
rename from lib/librte_node/meson.build
rename to lib/node/meson.build
diff --git a/lib/librte_node/node_private.h b/lib/node/node_private.h
similarity index 100%
rename from lib/librte_node/node_private.h
rename to lib/node/node_private.h
diff --git a/lib/librte_node/null.c b/lib/node/null.c
similarity index 100%
rename from lib/librte_node/null.c
rename to lib/node/null.c
diff --git a/lib/librte_node/pkt_cls.c b/lib/node/pkt_cls.c
similarity index 100%
rename from lib/librte_node/pkt_cls.c
rename to lib/node/pkt_cls.c
diff --git a/lib/librte_node/pkt_cls_priv.h b/lib/node/pkt_cls_priv.h
similarity index 100%
rename from lib/librte_node/pkt_cls_priv.h
rename to lib/node/pkt_cls_priv.h
diff --git a/lib/librte_node/pkt_drop.c b/lib/node/pkt_drop.c
similarity index 100%
rename from lib/librte_node/pkt_drop.c
rename to lib/node/pkt_drop.c
diff --git a/lib/librte_node/rte_node_eth_api.h b/lib/node/rte_node_eth_api.h
similarity index 100%
rename from lib/librte_node/rte_node_eth_api.h
rename to lib/node/rte_node_eth_api.h
diff --git a/lib/librte_node/rte_node_ip4_api.h b/lib/node/rte_node_ip4_api.h
similarity index 100%
rename from lib/librte_node/rte_node_ip4_api.h
rename to lib/node/rte_node_ip4_api.h
diff --git a/lib/librte_node/version.map b/lib/node/version.map
similarity index 100%
rename from lib/librte_node/version.map
rename to lib/node/version.map
diff --git a/lib/librte_pci/meson.build b/lib/pci/meson.build
similarity index 100%
rename from lib/librte_pci/meson.build
rename to lib/pci/meson.build
diff --git a/lib/librte_pci/rte_pci.c b/lib/pci/rte_pci.c
similarity index 100%
rename from lib/librte_pci/rte_pci.c
rename to lib/pci/rte_pci.c
diff --git a/lib/librte_pci/rte_pci.h b/lib/pci/rte_pci.h
similarity index 100%
rename from lib/librte_pci/rte_pci.h
rename to lib/pci/rte_pci.h
diff --git a/lib/librte_pci/version.map b/lib/pci/version.map
similarity index 100%
rename from lib/librte_pci/version.map
rename to lib/pci/version.map
diff --git a/lib/librte_pdump/meson.build b/lib/pdump/meson.build
similarity index 100%
rename from lib/librte_pdump/meson.build
rename to lib/pdump/meson.build
diff --git a/lib/librte_pdump/rte_pdump.c b/lib/pdump/rte_pdump.c
similarity index 100%
rename from lib/librte_pdump/rte_pdump.c
rename to lib/pdump/rte_pdump.c
diff --git a/lib/librte_pdump/rte_pdump.h b/lib/pdump/rte_pdump.h
similarity index 100%
rename from lib/librte_pdump/rte_pdump.h
rename to lib/pdump/rte_pdump.h
diff --git a/lib/librte_pdump/version.map b/lib/pdump/version.map
similarity index 100%
rename from lib/librte_pdump/version.map
rename to lib/pdump/version.map
diff --git a/lib/librte_pipeline/meson.build b/lib/pipeline/meson.build
similarity index 100%
rename from lib/librte_pipeline/meson.build
rename to lib/pipeline/meson.build
diff --git a/lib/librte_pipeline/rte_pipeline.c b/lib/pipeline/rte_pipeline.c
similarity index 100%
rename from lib/librte_pipeline/rte_pipeline.c
rename to lib/pipeline/rte_pipeline.c
diff --git a/lib/librte_pipeline/rte_pipeline.h b/lib/pipeline/rte_pipeline.h
similarity index 100%
rename from lib/librte_pipeline/rte_pipeline.h
rename to lib/pipeline/rte_pipeline.h
diff --git a/lib/librte_pipeline/rte_port_in_action.c b/lib/pipeline/rte_port_in_action.c
similarity index 100%
rename from lib/librte_pipeline/rte_port_in_action.c
rename to lib/pipeline/rte_port_in_action.c
diff --git a/lib/librte_pipeline/rte_port_in_action.h b/lib/pipeline/rte_port_in_action.h
similarity index 100%
rename from lib/librte_pipeline/rte_port_in_action.h
rename to lib/pipeline/rte_port_in_action.h
diff --git a/lib/librte_pipeline/rte_swx_ctl.c b/lib/pipeline/rte_swx_ctl.c
similarity index 100%
rename from lib/librte_pipeline/rte_swx_ctl.c
rename to lib/pipeline/rte_swx_ctl.c
diff --git a/lib/librte_pipeline/rte_swx_ctl.h b/lib/pipeline/rte_swx_ctl.h
similarity index 100%
rename from lib/librte_pipeline/rte_swx_ctl.h
rename to lib/pipeline/rte_swx_ctl.h
diff --git a/lib/librte_pipeline/rte_swx_extern.h b/lib/pipeline/rte_swx_extern.h
similarity index 100%
rename from lib/librte_pipeline/rte_swx_extern.h
rename to lib/pipeline/rte_swx_extern.h
diff --git a/lib/librte_pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c
similarity index 100%
rename from lib/librte_pipeline/rte_swx_pipeline.c
rename to lib/pipeline/rte_swx_pipeline.c
diff --git a/lib/librte_pipeline/rte_swx_pipeline.h b/lib/pipeline/rte_swx_pipeline.h
similarity index 100%
rename from lib/librte_pipeline/rte_swx_pipeline.h
rename to lib/pipeline/rte_swx_pipeline.h
diff --git a/lib/librte_pipeline/rte_swx_pipeline_spec.c b/lib/pipeline/rte_swx_pipeline_spec.c
similarity index 100%
rename from lib/librte_pipeline/rte_swx_pipeline_spec.c
rename to lib/pipeline/rte_swx_pipeline_spec.c
diff --git a/lib/librte_pipeline/rte_table_action.c b/lib/pipeline/rte_table_action.c
similarity index 100%
rename from lib/librte_pipeline/rte_table_action.c
rename to lib/pipeline/rte_table_action.c
diff --git a/lib/librte_pipeline/rte_table_action.h b/lib/pipeline/rte_table_action.h
similarity index 100%
rename from lib/librte_pipeline/rte_table_action.h
rename to lib/pipeline/rte_table_action.h
diff --git a/lib/librte_pipeline/version.map b/lib/pipeline/version.map
similarity index 100%
rename from lib/librte_pipeline/version.map
rename to lib/pipeline/version.map
diff --git a/lib/librte_port/meson.build b/lib/port/meson.build
similarity index 100%
rename from lib/librte_port/meson.build
rename to lib/port/meson.build
diff --git a/lib/librte_port/rte_port.h b/lib/port/rte_port.h
similarity index 100%
rename from lib/librte_port/rte_port.h
rename to lib/port/rte_port.h
diff --git a/lib/librte_port/rte_port_ethdev.c b/lib/port/rte_port_ethdev.c
similarity index 100%
rename from lib/librte_port/rte_port_ethdev.c
rename to lib/port/rte_port_ethdev.c
diff --git a/lib/librte_port/rte_port_ethdev.h b/lib/port/rte_port_ethdev.h
similarity index 100%
rename from lib/librte_port/rte_port_ethdev.h
rename to lib/port/rte_port_ethdev.h
diff --git a/lib/librte_port/rte_port_eventdev.c b/lib/port/rte_port_eventdev.c
similarity index 100%
rename from lib/librte_port/rte_port_eventdev.c
rename to lib/port/rte_port_eventdev.c
diff --git a/lib/librte_port/rte_port_eventdev.h b/lib/port/rte_port_eventdev.h
similarity index 100%
rename from lib/librte_port/rte_port_eventdev.h
rename to lib/port/rte_port_eventdev.h
diff --git a/lib/librte_port/rte_port_fd.c b/lib/port/rte_port_fd.c
similarity index 100%
rename from lib/librte_port/rte_port_fd.c
rename to lib/port/rte_port_fd.c
diff --git a/lib/librte_port/rte_port_fd.h b/lib/port/rte_port_fd.h
similarity index 100%
rename from lib/librte_port/rte_port_fd.h
rename to lib/port/rte_port_fd.h
diff --git a/lib/librte_port/rte_port_frag.c b/lib/port/rte_port_frag.c
similarity index 100%
rename from lib/librte_port/rte_port_frag.c
rename to lib/port/rte_port_frag.c
diff --git a/lib/librte_port/rte_port_frag.h b/lib/port/rte_port_frag.h
similarity index 100%
rename from lib/librte_port/rte_port_frag.h
rename to lib/port/rte_port_frag.h
diff --git a/lib/librte_port/rte_port_kni.c b/lib/port/rte_port_kni.c
similarity index 100%
rename from lib/librte_port/rte_port_kni.c
rename to lib/port/rte_port_kni.c
diff --git a/lib/librte_port/rte_port_kni.h b/lib/port/rte_port_kni.h
similarity index 100%
rename from lib/librte_port/rte_port_kni.h
rename to lib/port/rte_port_kni.h
diff --git a/lib/librte_port/rte_port_ras.c b/lib/port/rte_port_ras.c
similarity index 100%
rename from lib/librte_port/rte_port_ras.c
rename to lib/port/rte_port_ras.c
diff --git a/lib/librte_port/rte_port_ras.h b/lib/port/rte_port_ras.h
similarity index 100%
rename from lib/librte_port/rte_port_ras.h
rename to lib/port/rte_port_ras.h
diff --git a/lib/librte_port/rte_port_ring.c b/lib/port/rte_port_ring.c
similarity index 100%
rename from lib/librte_port/rte_port_ring.c
rename to lib/port/rte_port_ring.c
diff --git a/lib/librte_port/rte_port_ring.h b/lib/port/rte_port_ring.h
similarity index 100%
rename from lib/librte_port/rte_port_ring.h
rename to lib/port/rte_port_ring.h
diff --git a/lib/librte_port/rte_port_sched.c b/lib/port/rte_port_sched.c
similarity index 100%
rename from lib/librte_port/rte_port_sched.c
rename to lib/port/rte_port_sched.c
diff --git a/lib/librte_port/rte_port_sched.h b/lib/port/rte_port_sched.h
similarity index 100%
rename from lib/librte_port/rte_port_sched.h
rename to lib/port/rte_port_sched.h
diff --git a/lib/librte_port/rte_port_source_sink.c b/lib/port/rte_port_source_sink.c
similarity index 100%
rename from lib/librte_port/rte_port_source_sink.c
rename to lib/port/rte_port_source_sink.c
diff --git a/lib/librte_port/rte_port_source_sink.h b/lib/port/rte_port_source_sink.h
similarity index 100%
rename from lib/librte_port/rte_port_source_sink.h
rename to lib/port/rte_port_source_sink.h
diff --git a/lib/librte_port/rte_port_sym_crypto.c b/lib/port/rte_port_sym_crypto.c
similarity index 100%
rename from lib/librte_port/rte_port_sym_crypto.c
rename to lib/port/rte_port_sym_crypto.c
diff --git a/lib/librte_port/rte_port_sym_crypto.h b/lib/port/rte_port_sym_crypto.h
similarity index 100%
rename from lib/librte_port/rte_port_sym_crypto.h
rename to lib/port/rte_port_sym_crypto.h
diff --git a/lib/librte_port/rte_swx_port.h b/lib/port/rte_swx_port.h
similarity index 100%
rename from lib/librte_port/rte_swx_port.h
rename to lib/port/rte_swx_port.h
diff --git a/lib/librte_port/rte_swx_port_ethdev.c b/lib/port/rte_swx_port_ethdev.c
similarity index 100%
rename from lib/librte_port/rte_swx_port_ethdev.c
rename to lib/port/rte_swx_port_ethdev.c
diff --git a/lib/librte_port/rte_swx_port_ethdev.h b/lib/port/rte_swx_port_ethdev.h
similarity index 100%
rename from lib/librte_port/rte_swx_port_ethdev.h
rename to lib/port/rte_swx_port_ethdev.h
diff --git a/lib/librte_port/rte_swx_port_fd.c b/lib/port/rte_swx_port_fd.c
similarity index 100%
rename from lib/librte_port/rte_swx_port_fd.c
rename to lib/port/rte_swx_port_fd.c
diff --git a/lib/librte_port/rte_swx_port_fd.h b/lib/port/rte_swx_port_fd.h
similarity index 100%
rename from lib/librte_port/rte_swx_port_fd.h
rename to lib/port/rte_swx_port_fd.h
diff --git a/lib/librte_port/rte_swx_port_ring.c b/lib/port/rte_swx_port_ring.c
similarity index 100%
rename from lib/librte_port/rte_swx_port_ring.c
rename to lib/port/rte_swx_port_ring.c
diff --git a/lib/librte_port/rte_swx_port_ring.h b/lib/port/rte_swx_port_ring.h
similarity index 100%
rename from lib/librte_port/rte_swx_port_ring.h
rename to lib/port/rte_swx_port_ring.h
diff --git a/lib/librte_port/rte_swx_port_source_sink.c b/lib/port/rte_swx_port_source_sink.c
similarity index 100%
rename from lib/librte_port/rte_swx_port_source_sink.c
rename to lib/port/rte_swx_port_source_sink.c
diff --git a/lib/librte_port/rte_swx_port_source_sink.h b/lib/port/rte_swx_port_source_sink.h
similarity index 100%
rename from lib/librte_port/rte_swx_port_source_sink.h
rename to lib/port/rte_swx_port_source_sink.h
diff --git a/lib/librte_port/version.map b/lib/port/version.map
similarity index 100%
rename from lib/librte_port/version.map
rename to lib/port/version.map
diff --git a/lib/librte_power/guest_channel.c b/lib/power/guest_channel.c
similarity index 100%
rename from lib/librte_power/guest_channel.c
rename to lib/power/guest_channel.c
diff --git a/lib/librte_power/guest_channel.h b/lib/power/guest_channel.h
similarity index 100%
rename from lib/librte_power/guest_channel.h
rename to lib/power/guest_channel.h
diff --git a/lib/librte_power/meson.build b/lib/power/meson.build
similarity index 100%
rename from lib/librte_power/meson.build
rename to lib/power/meson.build
diff --git a/lib/librte_power/power_acpi_cpufreq.c b/lib/power/power_acpi_cpufreq.c
similarity index 100%
rename from lib/librte_power/power_acpi_cpufreq.c
rename to lib/power/power_acpi_cpufreq.c
diff --git a/lib/librte_power/power_acpi_cpufreq.h b/lib/power/power_acpi_cpufreq.h
similarity index 100%
rename from lib/librte_power/power_acpi_cpufreq.h
rename to lib/power/power_acpi_cpufreq.h
diff --git a/lib/librte_power/power_common.c b/lib/power/power_common.c
similarity index 100%
rename from lib/librte_power/power_common.c
rename to lib/power/power_common.c
diff --git a/lib/librte_power/power_common.h b/lib/power/power_common.h
similarity index 100%
rename from lib/librte_power/power_common.h
rename to lib/power/power_common.h
diff --git a/lib/librte_power/power_kvm_vm.c b/lib/power/power_kvm_vm.c
similarity index 100%
rename from lib/librte_power/power_kvm_vm.c
rename to lib/power/power_kvm_vm.c
diff --git a/lib/librte_power/power_kvm_vm.h b/lib/power/power_kvm_vm.h
similarity index 100%
rename from lib/librte_power/power_kvm_vm.h
rename to lib/power/power_kvm_vm.h
diff --git a/lib/librte_power/power_pstate_cpufreq.c b/lib/power/power_pstate_cpufreq.c
similarity index 100%
rename from lib/librte_power/power_pstate_cpufreq.c
rename to lib/power/power_pstate_cpufreq.c
diff --git a/lib/librte_power/power_pstate_cpufreq.h b/lib/power/power_pstate_cpufreq.h
similarity index 100%
rename from lib/librte_power/power_pstate_cpufreq.h
rename to lib/power/power_pstate_cpufreq.h
diff --git a/lib/librte_power/rte_power.c b/lib/power/rte_power.c
similarity index 100%
rename from lib/librte_power/rte_power.c
rename to lib/power/rte_power.c
diff --git a/lib/librte_power/rte_power.h b/lib/power/rte_power.h
similarity index 100%
rename from lib/librte_power/rte_power.h
rename to lib/power/rte_power.h
diff --git a/lib/librte_power/rte_power_empty_poll.c b/lib/power/rte_power_empty_poll.c
similarity index 100%
rename from lib/librte_power/rte_power_empty_poll.c
rename to lib/power/rte_power_empty_poll.c
diff --git a/lib/librte_power/rte_power_empty_poll.h b/lib/power/rte_power_empty_poll.h
similarity index 100%
rename from lib/librte_power/rte_power_empty_poll.h
rename to lib/power/rte_power_empty_poll.h
diff --git a/lib/librte_power/rte_power_guest_channel.h b/lib/power/rte_power_guest_channel.h
similarity index 100%
rename from lib/librte_power/rte_power_guest_channel.h
rename to lib/power/rte_power_guest_channel.h
diff --git a/lib/librte_power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c
similarity index 100%
rename from lib/librte_power/rte_power_pmd_mgmt.c
rename to lib/power/rte_power_pmd_mgmt.c
diff --git a/lib/librte_power/rte_power_pmd_mgmt.h b/lib/power/rte_power_pmd_mgmt.h
similarity index 100%
rename from lib/librte_power/rte_power_pmd_mgmt.h
rename to lib/power/rte_power_pmd_mgmt.h
diff --git a/lib/librte_power/version.map b/lib/power/version.map
similarity index 100%
rename from lib/librte_power/version.map
rename to lib/power/version.map
diff --git a/lib/librte_rawdev/meson.build b/lib/rawdev/meson.build
similarity index 100%
rename from lib/librte_rawdev/meson.build
rename to lib/rawdev/meson.build
diff --git a/lib/librte_rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c
similarity index 100%
rename from lib/librte_rawdev/rte_rawdev.c
rename to lib/rawdev/rte_rawdev.c
diff --git a/lib/librte_rawdev/rte_rawdev.h b/lib/rawdev/rte_rawdev.h
similarity index 100%
rename from lib/librte_rawdev/rte_rawdev.h
rename to lib/rawdev/rte_rawdev.h
diff --git a/lib/librte_rawdev/rte_rawdev_pmd.h b/lib/rawdev/rte_rawdev_pmd.h
similarity index 100%
rename from lib/librte_rawdev/rte_rawdev_pmd.h
rename to lib/rawdev/rte_rawdev_pmd.h
diff --git a/lib/librte_rawdev/version.map b/lib/rawdev/version.map
similarity index 100%
rename from lib/librte_rawdev/version.map
rename to lib/rawdev/version.map
diff --git a/lib/librte_rcu/meson.build b/lib/rcu/meson.build
similarity index 100%
rename from lib/librte_rcu/meson.build
rename to lib/rcu/meson.build
diff --git a/lib/librte_rcu/rcu_qsbr_pvt.h b/lib/rcu/rcu_qsbr_pvt.h
similarity index 100%
rename from lib/librte_rcu/rcu_qsbr_pvt.h
rename to lib/rcu/rcu_qsbr_pvt.h
diff --git a/lib/librte_rcu/rte_rcu_qsbr.c b/lib/rcu/rte_rcu_qsbr.c
similarity index 100%
rename from lib/librte_rcu/rte_rcu_qsbr.c
rename to lib/rcu/rte_rcu_qsbr.c
diff --git a/lib/librte_rcu/rte_rcu_qsbr.h b/lib/rcu/rte_rcu_qsbr.h
similarity index 100%
rename from lib/librte_rcu/rte_rcu_qsbr.h
rename to lib/rcu/rte_rcu_qsbr.h
diff --git a/lib/librte_rcu/version.map b/lib/rcu/version.map
similarity index 100%
rename from lib/librte_rcu/version.map
rename to lib/rcu/version.map
diff --git a/lib/librte_regexdev/meson.build b/lib/regexdev/meson.build
similarity index 100%
rename from lib/librte_regexdev/meson.build
rename to lib/regexdev/meson.build
diff --git a/lib/librte_regexdev/rte_regexdev.c b/lib/regexdev/rte_regexdev.c
similarity index 100%
rename from lib/librte_regexdev/rte_regexdev.c
rename to lib/regexdev/rte_regexdev.c
diff --git a/lib/librte_regexdev/rte_regexdev.h b/lib/regexdev/rte_regexdev.h
similarity index 100%
rename from lib/librte_regexdev/rte_regexdev.h
rename to lib/regexdev/rte_regexdev.h
diff --git a/lib/librte_regexdev/rte_regexdev_core.h b/lib/regexdev/rte_regexdev_core.h
similarity index 100%
rename from lib/librte_regexdev/rte_regexdev_core.h
rename to lib/regexdev/rte_regexdev_core.h
diff --git a/lib/librte_regexdev/rte_regexdev_driver.h b/lib/regexdev/rte_regexdev_driver.h
similarity index 100%
rename from lib/librte_regexdev/rte_regexdev_driver.h
rename to lib/regexdev/rte_regexdev_driver.h
diff --git a/lib/librte_regexdev/version.map b/lib/regexdev/version.map
similarity index 100%
rename from lib/librte_regexdev/version.map
rename to lib/regexdev/version.map
diff --git a/lib/librte_reorder/meson.build b/lib/reorder/meson.build
similarity index 100%
rename from lib/librte_reorder/meson.build
rename to lib/reorder/meson.build
diff --git a/lib/librte_reorder/rte_reorder.c b/lib/reorder/rte_reorder.c
similarity index 100%
rename from lib/librte_reorder/rte_reorder.c
rename to lib/reorder/rte_reorder.c
diff --git a/lib/librte_reorder/rte_reorder.h b/lib/reorder/rte_reorder.h
similarity index 100%
rename from lib/librte_reorder/rte_reorder.h
rename to lib/reorder/rte_reorder.h
diff --git a/lib/librte_reorder/version.map b/lib/reorder/version.map
similarity index 100%
rename from lib/librte_reorder/version.map
rename to lib/reorder/version.map
diff --git a/lib/librte_rib/meson.build b/lib/rib/meson.build
similarity index 100%
rename from lib/librte_rib/meson.build
rename to lib/rib/meson.build
diff --git a/lib/librte_rib/rte_rib.c b/lib/rib/rte_rib.c
similarity index 100%
rename from lib/librte_rib/rte_rib.c
rename to lib/rib/rte_rib.c
diff --git a/lib/librte_rib/rte_rib.h b/lib/rib/rte_rib.h
similarity index 100%
rename from lib/librte_rib/rte_rib.h
rename to lib/rib/rte_rib.h
diff --git a/lib/librte_rib/rte_rib6.c b/lib/rib/rte_rib6.c
similarity index 100%
rename from lib/librte_rib/rte_rib6.c
rename to lib/rib/rte_rib6.c
diff --git a/lib/librte_rib/rte_rib6.h b/lib/rib/rte_rib6.h
similarity index 100%
rename from lib/librte_rib/rte_rib6.h
rename to lib/rib/rte_rib6.h
diff --git a/lib/librte_rib/version.map b/lib/rib/version.map
similarity index 100%
rename from lib/librte_rib/version.map
rename to lib/rib/version.map
diff --git a/lib/librte_ring/meson.build b/lib/ring/meson.build
similarity index 100%
rename from lib/librte_ring/meson.build
rename to lib/ring/meson.build
diff --git a/lib/librte_ring/rte_ring.c b/lib/ring/rte_ring.c
similarity index 100%
rename from lib/librte_ring/rte_ring.c
rename to lib/ring/rte_ring.c
diff --git a/lib/librte_ring/rte_ring.h b/lib/ring/rte_ring.h
similarity index 100%
rename from lib/librte_ring/rte_ring.h
rename to lib/ring/rte_ring.h
diff --git a/lib/librte_ring/rte_ring_c11_pvt.h b/lib/ring/rte_ring_c11_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_c11_pvt.h
rename to lib/ring/rte_ring_c11_pvt.h
diff --git a/lib/librte_ring/rte_ring_core.h b/lib/ring/rte_ring_core.h
similarity index 100%
rename from lib/librte_ring/rte_ring_core.h
rename to lib/ring/rte_ring_core.h
diff --git a/lib/librte_ring/rte_ring_elem.h b/lib/ring/rte_ring_elem.h
similarity index 100%
rename from lib/librte_ring/rte_ring_elem.h
rename to lib/ring/rte_ring_elem.h
diff --git a/lib/librte_ring/rte_ring_elem_pvt.h b/lib/ring/rte_ring_elem_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_elem_pvt.h
rename to lib/ring/rte_ring_elem_pvt.h
diff --git a/lib/librte_ring/rte_ring_generic_pvt.h b/lib/ring/rte_ring_generic_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_generic_pvt.h
rename to lib/ring/rte_ring_generic_pvt.h
diff --git a/lib/librte_ring/rte_ring_hts.h b/lib/ring/rte_ring_hts.h
similarity index 100%
rename from lib/librte_ring/rte_ring_hts.h
rename to lib/ring/rte_ring_hts.h
diff --git a/lib/librte_ring/rte_ring_hts_elem_pvt.h b/lib/ring/rte_ring_hts_elem_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_hts_elem_pvt.h
rename to lib/ring/rte_ring_hts_elem_pvt.h
diff --git a/lib/librte_ring/rte_ring_peek.h b/lib/ring/rte_ring_peek.h
similarity index 100%
rename from lib/librte_ring/rte_ring_peek.h
rename to lib/ring/rte_ring_peek.h
diff --git a/lib/librte_ring/rte_ring_peek_elem_pvt.h b/lib/ring/rte_ring_peek_elem_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_peek_elem_pvt.h
rename to lib/ring/rte_ring_peek_elem_pvt.h
diff --git a/lib/librte_ring/rte_ring_peek_zc.h b/lib/ring/rte_ring_peek_zc.h
similarity index 100%
rename from lib/librte_ring/rte_ring_peek_zc.h
rename to lib/ring/rte_ring_peek_zc.h
diff --git a/lib/librte_ring/rte_ring_rts.h b/lib/ring/rte_ring_rts.h
similarity index 100%
rename from lib/librte_ring/rte_ring_rts.h
rename to lib/ring/rte_ring_rts.h
diff --git a/lib/librte_ring/rte_ring_rts_elem_pvt.h b/lib/ring/rte_ring_rts_elem_pvt.h
similarity index 100%
rename from lib/librte_ring/rte_ring_rts_elem_pvt.h
rename to lib/ring/rte_ring_rts_elem_pvt.h
diff --git a/lib/librte_ring/version.map b/lib/ring/version.map
similarity index 100%
rename from lib/librte_ring/version.map
rename to lib/ring/version.map
diff --git a/lib/librte_sched/meson.build b/lib/sched/meson.build
similarity index 100%
rename from lib/librte_sched/meson.build
rename to lib/sched/meson.build
diff --git a/lib/librte_sched/rte_approx.c b/lib/sched/rte_approx.c
similarity index 100%
rename from lib/librte_sched/rte_approx.c
rename to lib/sched/rte_approx.c
diff --git a/lib/librte_sched/rte_approx.h b/lib/sched/rte_approx.h
similarity index 100%
rename from lib/librte_sched/rte_approx.h
rename to lib/sched/rte_approx.h
diff --git a/lib/librte_sched/rte_red.c b/lib/sched/rte_red.c
similarity index 100%
rename from lib/librte_sched/rte_red.c
rename to lib/sched/rte_red.c
diff --git a/lib/librte_sched/rte_red.h b/lib/sched/rte_red.h
similarity index 100%
rename from lib/librte_sched/rte_red.h
rename to lib/sched/rte_red.h
diff --git a/lib/librte_sched/rte_sched.c b/lib/sched/rte_sched.c
similarity index 100%
rename from lib/librte_sched/rte_sched.c
rename to lib/sched/rte_sched.c
diff --git a/lib/librte_sched/rte_sched.h b/lib/sched/rte_sched.h
similarity index 100%
rename from lib/librte_sched/rte_sched.h
rename to lib/sched/rte_sched.h
diff --git a/lib/librte_sched/rte_sched_common.h b/lib/sched/rte_sched_common.h
similarity index 100%
rename from lib/librte_sched/rte_sched_common.h
rename to lib/sched/rte_sched_common.h
diff --git a/lib/librte_sched/version.map b/lib/sched/version.map
similarity index 100%
rename from lib/librte_sched/version.map
rename to lib/sched/version.map
diff --git a/lib/librte_security/meson.build b/lib/security/meson.build
similarity index 100%
rename from lib/librte_security/meson.build
rename to lib/security/meson.build
diff --git a/lib/librte_security/rte_security.c b/lib/security/rte_security.c
similarity index 100%
rename from lib/librte_security/rte_security.c
rename to lib/security/rte_security.c
diff --git a/lib/librte_security/rte_security.h b/lib/security/rte_security.h
similarity index 100%
rename from lib/librte_security/rte_security.h
rename to lib/security/rte_security.h
diff --git a/lib/librte_security/rte_security_driver.h b/lib/security/rte_security_driver.h
similarity index 100%
rename from lib/librte_security/rte_security_driver.h
rename to lib/security/rte_security_driver.h
diff --git a/lib/librte_security/version.map b/lib/security/version.map
similarity index 100%
rename from lib/librte_security/version.map
rename to lib/security/version.map
diff --git a/lib/librte_stack/meson.build b/lib/stack/meson.build
similarity index 100%
rename from lib/librte_stack/meson.build
rename to lib/stack/meson.build
diff --git a/lib/librte_stack/rte_stack.c b/lib/stack/rte_stack.c
similarity index 100%
rename from lib/librte_stack/rte_stack.c
rename to lib/stack/rte_stack.c
diff --git a/lib/librte_stack/rte_stack.h b/lib/stack/rte_stack.h
similarity index 100%
rename from lib/librte_stack/rte_stack.h
rename to lib/stack/rte_stack.h
diff --git a/lib/librte_stack/rte_stack_lf.c b/lib/stack/rte_stack_lf.c
similarity index 100%
rename from lib/librte_stack/rte_stack_lf.c
rename to lib/stack/rte_stack_lf.c
diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/stack/rte_stack_lf.h
similarity index 100%
rename from lib/librte_stack/rte_stack_lf.h
rename to lib/stack/rte_stack_lf.h
diff --git a/lib/librte_stack/rte_stack_lf_c11.h b/lib/stack/rte_stack_lf_c11.h
similarity index 100%
rename from lib/librte_stack/rte_stack_lf_c11.h
rename to lib/stack/rte_stack_lf_c11.h
diff --git a/lib/librte_stack/rte_stack_lf_generic.h b/lib/stack/rte_stack_lf_generic.h
similarity index 100%
rename from lib/librte_stack/rte_stack_lf_generic.h
rename to lib/stack/rte_stack_lf_generic.h
diff --git a/lib/librte_stack/rte_stack_lf_stubs.h b/lib/stack/rte_stack_lf_stubs.h
similarity index 100%
rename from lib/librte_stack/rte_stack_lf_stubs.h
rename to lib/stack/rte_stack_lf_stubs.h
diff --git a/lib/librte_stack/rte_stack_std.c b/lib/stack/rte_stack_std.c
similarity index 100%
rename from lib/librte_stack/rte_stack_std.c
rename to lib/stack/rte_stack_std.c
diff --git a/lib/librte_stack/rte_stack_std.h b/lib/stack/rte_stack_std.h
similarity index 100%
rename from lib/librte_stack/rte_stack_std.h
rename to lib/stack/rte_stack_std.h
diff --git a/lib/librte_stack/stack_pvt.h b/lib/stack/stack_pvt.h
similarity index 100%
rename from lib/librte_stack/stack_pvt.h
rename to lib/stack/stack_pvt.h
diff --git a/lib/librte_stack/version.map b/lib/stack/version.map
similarity index 100%
rename from lib/librte_stack/version.map
rename to lib/stack/version.map
diff --git a/lib/librte_table/meson.build b/lib/table/meson.build
similarity index 100%
rename from lib/librte_table/meson.build
rename to lib/table/meson.build
diff --git a/lib/librte_table/rte_lru.h b/lib/table/rte_lru.h
similarity index 100%
rename from lib/librte_table/rte_lru.h
rename to lib/table/rte_lru.h
diff --git a/lib/librte_table/rte_lru_arm64.h b/lib/table/rte_lru_arm64.h
similarity index 100%
rename from lib/librte_table/rte_lru_arm64.h
rename to lib/table/rte_lru_arm64.h
diff --git a/lib/librte_table/rte_lru_x86.h b/lib/table/rte_lru_x86.h
similarity index 100%
rename from lib/librte_table/rte_lru_x86.h
rename to lib/table/rte_lru_x86.h
diff --git a/lib/librte_table/rte_swx_table.h b/lib/table/rte_swx_table.h
similarity index 100%
rename from lib/librte_table/rte_swx_table.h
rename to lib/table/rte_swx_table.h
diff --git a/lib/librte_table/rte_swx_table_em.c b/lib/table/rte_swx_table_em.c
similarity index 100%
rename from lib/librte_table/rte_swx_table_em.c
rename to lib/table/rte_swx_table_em.c
diff --git a/lib/librte_table/rte_swx_table_em.h b/lib/table/rte_swx_table_em.h
similarity index 100%
rename from lib/librte_table/rte_swx_table_em.h
rename to lib/table/rte_swx_table_em.h
diff --git a/lib/librte_table/rte_swx_table_wm.c b/lib/table/rte_swx_table_wm.c
similarity index 100%
rename from lib/librte_table/rte_swx_table_wm.c
rename to lib/table/rte_swx_table_wm.c
diff --git a/lib/librte_table/rte_swx_table_wm.h b/lib/table/rte_swx_table_wm.h
similarity index 100%
rename from lib/librte_table/rte_swx_table_wm.h
rename to lib/table/rte_swx_table_wm.h
diff --git a/lib/librte_table/rte_table.h b/lib/table/rte_table.h
similarity index 100%
rename from lib/librte_table/rte_table.h
rename to lib/table/rte_table.h
diff --git a/lib/librte_table/rte_table_acl.c b/lib/table/rte_table_acl.c
similarity index 100%
rename from lib/librte_table/rte_table_acl.c
rename to lib/table/rte_table_acl.c
diff --git a/lib/librte_table/rte_table_acl.h b/lib/table/rte_table_acl.h
similarity index 100%
rename from lib/librte_table/rte_table_acl.h
rename to lib/table/rte_table_acl.h
diff --git a/lib/librte_table/rte_table_array.c b/lib/table/rte_table_array.c
similarity index 100%
rename from lib/librte_table/rte_table_array.c
rename to lib/table/rte_table_array.c
diff --git a/lib/librte_table/rte_table_array.h b/lib/table/rte_table_array.h
similarity index 100%
rename from lib/librte_table/rte_table_array.h
rename to lib/table/rte_table_array.h
diff --git a/lib/librte_table/rte_table_hash.h b/lib/table/rte_table_hash.h
similarity index 100%
rename from lib/librte_table/rte_table_hash.h
rename to lib/table/rte_table_hash.h
diff --git a/lib/librte_table/rte_table_hash_cuckoo.c b/lib/table/rte_table_hash_cuckoo.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_cuckoo.c
rename to lib/table/rte_table_hash_cuckoo.c
diff --git a/lib/librte_table/rte_table_hash_cuckoo.h b/lib/table/rte_table_hash_cuckoo.h
similarity index 100%
rename from lib/librte_table/rte_table_hash_cuckoo.h
rename to lib/table/rte_table_hash_cuckoo.h
diff --git a/lib/librte_table/rte_table_hash_ext.c b/lib/table/rte_table_hash_ext.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_ext.c
rename to lib/table/rte_table_hash_ext.c
diff --git a/lib/librte_table/rte_table_hash_func.h b/lib/table/rte_table_hash_func.h
similarity index 100%
rename from lib/librte_table/rte_table_hash_func.h
rename to lib/table/rte_table_hash_func.h
diff --git a/lib/librte_table/rte_table_hash_func_arm64.h b/lib/table/rte_table_hash_func_arm64.h
similarity index 100%
rename from lib/librte_table/rte_table_hash_func_arm64.h
rename to lib/table/rte_table_hash_func_arm64.h
diff --git a/lib/librte_table/rte_table_hash_key16.c b/lib/table/rte_table_hash_key16.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_key16.c
rename to lib/table/rte_table_hash_key16.c
diff --git a/lib/librte_table/rte_table_hash_key32.c b/lib/table/rte_table_hash_key32.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_key32.c
rename to lib/table/rte_table_hash_key32.c
diff --git a/lib/librte_table/rte_table_hash_key8.c b/lib/table/rte_table_hash_key8.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_key8.c
rename to lib/table/rte_table_hash_key8.c
diff --git a/lib/librte_table/rte_table_hash_lru.c b/lib/table/rte_table_hash_lru.c
similarity index 100%
rename from lib/librte_table/rte_table_hash_lru.c
rename to lib/table/rte_table_hash_lru.c
diff --git a/lib/librte_table/rte_table_lpm.c b/lib/table/rte_table_lpm.c
similarity index 100%
rename from lib/librte_table/rte_table_lpm.c
rename to lib/table/rte_table_lpm.c
diff --git a/lib/librte_table/rte_table_lpm.h b/lib/table/rte_table_lpm.h
similarity index 100%
rename from lib/librte_table/rte_table_lpm.h
rename to lib/table/rte_table_lpm.h
diff --git a/lib/librte_table/rte_table_lpm_ipv6.c b/lib/table/rte_table_lpm_ipv6.c
similarity index 100%
rename from lib/librte_table/rte_table_lpm_ipv6.c
rename to lib/table/rte_table_lpm_ipv6.c
diff --git a/lib/librte_table/rte_table_lpm_ipv6.h b/lib/table/rte_table_lpm_ipv6.h
similarity index 100%
rename from lib/librte_table/rte_table_lpm_ipv6.h
rename to lib/table/rte_table_lpm_ipv6.h
diff --git a/lib/librte_table/rte_table_stub.c b/lib/table/rte_table_stub.c
similarity index 100%
rename from lib/librte_table/rte_table_stub.c
rename to lib/table/rte_table_stub.c
diff --git a/lib/librte_table/rte_table_stub.h b/lib/table/rte_table_stub.h
similarity index 100%
rename from lib/librte_table/rte_table_stub.h
rename to lib/table/rte_table_stub.h
diff --git a/lib/librte_table/version.map b/lib/table/version.map
similarity index 100%
rename from lib/librte_table/version.map
rename to lib/table/version.map
diff --git a/lib/librte_telemetry/meson.build b/lib/telemetry/meson.build
similarity index 80%
rename from lib/librte_telemetry/meson.build
rename to lib/telemetry/meson.build
index 719973ff92..f84c9aa3be 100644
--- a/lib/librte_telemetry/meson.build
+++ b/lib/telemetry/meson.build
@@ -5,4 +5,4 @@ includes = [global_inc]
sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
headers = files('rte_telemetry.h')
-includes += include_directories('../librte_metrics')
+includes += include_directories('../metrics')
diff --git a/lib/librte_telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h
similarity index 100%
rename from lib/librte_telemetry/rte_telemetry.h
rename to lib/telemetry/rte_telemetry.h
diff --git a/lib/librte_telemetry/telemetry.c b/lib/telemetry/telemetry.c
similarity index 100%
rename from lib/librte_telemetry/telemetry.c
rename to lib/telemetry/telemetry.c
diff --git a/lib/librte_telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c
similarity index 100%
rename from lib/librte_telemetry/telemetry_data.c
rename to lib/telemetry/telemetry_data.c
diff --git a/lib/librte_telemetry/telemetry_data.h b/lib/telemetry/telemetry_data.h
similarity index 100%
rename from lib/librte_telemetry/telemetry_data.h
rename to lib/telemetry/telemetry_data.h
diff --git a/lib/librte_telemetry/telemetry_internal.h b/lib/telemetry/telemetry_internal.h
similarity index 100%
rename from lib/librte_telemetry/telemetry_internal.h
rename to lib/telemetry/telemetry_internal.h
diff --git a/lib/librte_telemetry/telemetry_json.h b/lib/telemetry/telemetry_json.h
similarity index 100%
rename from lib/librte_telemetry/telemetry_json.h
rename to lib/telemetry/telemetry_json.h
diff --git a/lib/librte_telemetry/telemetry_legacy.c b/lib/telemetry/telemetry_legacy.c
similarity index 100%
rename from lib/librte_telemetry/telemetry_legacy.c
rename to lib/telemetry/telemetry_legacy.c
diff --git a/lib/librte_telemetry/version.map b/lib/telemetry/version.map
similarity index 100%
rename from lib/librte_telemetry/version.map
rename to lib/telemetry/version.map
diff --git a/lib/librte_timer/meson.build b/lib/timer/meson.build
similarity index 100%
rename from lib/librte_timer/meson.build
rename to lib/timer/meson.build
diff --git a/lib/librte_timer/rte_timer.c b/lib/timer/rte_timer.c
similarity index 100%
rename from lib/librte_timer/rte_timer.c
rename to lib/timer/rte_timer.c
diff --git a/lib/librte_timer/rte_timer.h b/lib/timer/rte_timer.h
similarity index 100%
rename from lib/librte_timer/rte_timer.h
rename to lib/timer/rte_timer.h
diff --git a/lib/librte_timer/version.map b/lib/timer/version.map
similarity index 100%
rename from lib/librte_timer/version.map
rename to lib/timer/version.map
diff --git a/lib/librte_vhost/fd_man.c b/lib/vhost/fd_man.c
similarity index 100%
rename from lib/librte_vhost/fd_man.c
rename to lib/vhost/fd_man.c
diff --git a/lib/librte_vhost/fd_man.h b/lib/vhost/fd_man.h
similarity index 100%
rename from lib/librte_vhost/fd_man.h
rename to lib/vhost/fd_man.h
diff --git a/lib/librte_vhost/iotlb.c b/lib/vhost/iotlb.c
similarity index 100%
rename from lib/librte_vhost/iotlb.c
rename to lib/vhost/iotlb.c
diff --git a/lib/librte_vhost/iotlb.h b/lib/vhost/iotlb.h
similarity index 100%
rename from lib/librte_vhost/iotlb.h
rename to lib/vhost/iotlb.h
diff --git a/lib/librte_vhost/meson.build b/lib/vhost/meson.build
similarity index 100%
rename from lib/librte_vhost/meson.build
rename to lib/vhost/meson.build
diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/vhost/rte_vdpa.h
similarity index 100%
rename from lib/librte_vhost/rte_vdpa.h
rename to lib/vhost/rte_vdpa.h
diff --git a/lib/librte_vhost/rte_vdpa_dev.h b/lib/vhost/rte_vdpa_dev.h
similarity index 100%
rename from lib/librte_vhost/rte_vdpa_dev.h
rename to lib/vhost/rte_vdpa_dev.h
diff --git a/lib/librte_vhost/rte_vhost.h b/lib/vhost/rte_vhost.h
similarity index 100%
rename from lib/librte_vhost/rte_vhost.h
rename to lib/vhost/rte_vhost.h
diff --git a/lib/librte_vhost/rte_vhost_async.h b/lib/vhost/rte_vhost_async.h
similarity index 100%
rename from lib/librte_vhost/rte_vhost_async.h
rename to lib/vhost/rte_vhost_async.h
diff --git a/lib/librte_vhost/rte_vhost_crypto.h b/lib/vhost/rte_vhost_crypto.h
similarity index 100%
rename from lib/librte_vhost/rte_vhost_crypto.h
rename to lib/vhost/rte_vhost_crypto.h
diff --git a/lib/librte_vhost/socket.c b/lib/vhost/socket.c
similarity index 100%
rename from lib/librte_vhost/socket.c
rename to lib/vhost/socket.c
diff --git a/lib/librte_vhost/vdpa.c b/lib/vhost/vdpa.c
similarity index 100%
rename from lib/librte_vhost/vdpa.c
rename to lib/vhost/vdpa.c
diff --git a/lib/librte_vhost/version.map b/lib/vhost/version.map
similarity index 100%
rename from lib/librte_vhost/version.map
rename to lib/vhost/version.map
diff --git a/lib/librte_vhost/vhost.c b/lib/vhost/vhost.c
similarity index 100%
rename from lib/librte_vhost/vhost.c
rename to lib/vhost/vhost.c
diff --git a/lib/librte_vhost/vhost.h b/lib/vhost/vhost.h
similarity index 100%
rename from lib/librte_vhost/vhost.h
rename to lib/vhost/vhost.h
diff --git a/lib/librte_vhost/vhost_crypto.c b/lib/vhost/vhost_crypto.c
similarity index 100%
rename from lib/librte_vhost/vhost_crypto.c
rename to lib/vhost/vhost_crypto.c
diff --git a/lib/librte_vhost/vhost_user.c b/lib/vhost/vhost_user.c
similarity index 100%
rename from lib/librte_vhost/vhost_user.c
rename to lib/vhost/vhost_user.c
diff --git a/lib/librte_vhost/vhost_user.h b/lib/vhost/vhost_user.h
similarity index 100%
rename from lib/librte_vhost/vhost_user.h
rename to lib/vhost/vhost_user.h
diff --git a/lib/librte_vhost/virtio_crypto.h b/lib/vhost/virtio_crypto.h
similarity index 100%
rename from lib/librte_vhost/virtio_crypto.h
rename to lib/vhost/virtio_crypto.h
diff --git a/lib/librte_vhost/virtio_net.c b/lib/vhost/virtio_net.c
similarity index 100%
rename from lib/librte_vhost/virtio_net.c
rename to lib/vhost/virtio_net.c
diff --git a/license/exceptions.txt b/license/exceptions.txt
index 636c69b9bf..1bd4dbf8f7 100644
--- a/license/exceptions.txt
+++ b/license/exceptions.txt
@@ -12,8 +12,8 @@ Note that following licenses are not exceptions:-
---------------------------------------------------------------------------------------------------
SPDX Identifier TB Approval Date GB Approval Date File name
---------------------------------------------------------------------------------------------------
-1.MIT 10/23/2019 02/10/2020 lib/librte_eal/windows/include/dirent.h
-2.BSD-2-Clause 10/23/2019 12/18/2019 lib/librte_eal/windows/include/getopt.h
+1.MIT 10/23/2019 02/10/2020 lib/eal/windows/include/dirent.h
+2.BSD-2-Clause 10/23/2019 12/18/2019 lib/eal/windows/include/getopt.h
3.ISC AND
- BSD-2-Clause 10/23/2019 12/18/2019 lib/librte_eal/windows/getopt.c
+ BSD-2-Clause 10/23/2019 12/18/2019 lib/eal/windows/getopt.c
---------------------------------------------------------------------------------------------------
diff --git a/meson.build b/meson.build
index 30b5a43794..882aaf4211 100644
--- a/meson.build
+++ b/meson.build
@@ -36,9 +36,9 @@ endif
# able to be included in any file. We also store a global array of include dirs
# for passing to pmdinfogen scripts
global_inc = include_directories('.', 'config',
- 'lib/librte_eal/include',
- 'lib/librte_eal/@0@/include'.format(host_machine.system()),
- 'lib/librte_eal/@0@/include'.format(arch_subdir),
+ 'lib/eal/include',
+ 'lib/eal/@0@/include'.format(host_machine.system()),
+ 'lib/eal/@0@/include'.format(arch_subdir),
)
# do configuration and get tool paths
--
2.27.0
^ permalink raw reply [relevance 1%]
* Re: [dpdk-dev] [PATCH] eal: move DMA mapping from bus-specific to generic driver
2021-03-31 22:53 4% ` Thomas Monjalon
@ 2021-04-01 8:40 0% ` Kinsella, Ray
2021-04-12 15:03 0% ` Kinsella, Ray
1 sibling, 0 replies; 200+ results
From: Kinsella, Ray @ 2021-04-01 8:40 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, hemant.agrawal, rosen.xu, sthemmin, longli, jerinj,
ferruh.yigit, andrew.rybchenko, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko, Maxime Coquelin, Chenbo Xia, xuemingl,
david.marchand
On 31/03/2021 23:53, Thomas Monjalon wrote:
> 01/04/2021 00:45, Thomas Monjalon:
>> The operations of DMA mapping and unmapping are controlled in some
>> bus drivers, following rte_bus specification.
>> If the device driver don't provide any specific mapping operation,
>> the bus driver may have a fallback (VFIO case for PCI).
>>
>> The DMA mapping done by the device drivers are called
>> from the bus drivers via function pointers in bus-specific structures:
>> rte_vdev_driver and rte_pci_driver.
>>
>> The device driver DMA mapping is not specific to the bus,
>> so it can be generalized to all device drivers, based on rte_device.
>> That's why the function pointers dma_map and dma_unmap
>> are moved to rte_driver, avoiding useless casts of device object.
>>
>> The function prototypes rte_dev_dma_map_t and rte_dev_dma_unmap_t
>> are removed from rte_bus.h because the definition in rte_dev.h is enough,
>> but they are still used in rte_bus for bus drivers,
>> while being added in rte_driver for device drivers,
>> and removed from rte_vdev_driver/rte_pci_driver.
>>
>> The impacted device drivers are mlx5 (PCI) and virtio_user (vdev).
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>> ---
>> Depends-on: series-16017 ("pci: add rte prefix")
>> ---
>> drivers/bus/pci/pci_common.c | 8 ++--
>> drivers/bus/pci/rte_bus_pci.h | 40 --------------------
>> drivers/bus/vdev/rte_bus_vdev.h | 40 --------------------
>> drivers/bus/vdev/vdev.c | 32 +++++-----------
>> drivers/common/mlx5/mlx5_common_pci.c | 30 ++++++++-------
>> drivers/net/mlx5/mlx5.c | 4 +-
>> drivers/net/mlx5/mlx5_mr.c | 50 +++++++++++++------------
>> drivers/net/mlx5/mlx5_rxtx.h | 4 +-
>> drivers/net/virtio/virtio_user_ethdev.c | 22 +++++------
>> lib/librte_eal/include/rte_bus.h | 42 ---------------------
>> lib/librte_eal/include/rte_dev.h | 49 +++++++++++++++++++++++-
>> 11 files changed, 117 insertions(+), 204 deletions(-)
>
> The ABI checker reports some issues on the driver interface.
> It needs to be carefully analyzed, because driver interface
> should not be part of the ABI compatibility contract.
>
ok - I will take a look.
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH 1/2] ethdev: add pre-defined meter policy API
@ 2021-04-01 6:54 1% ` Li Zhang
0 siblings, 0 replies; 200+ results
From: Li Zhang @ 2021-04-01 6:54 UTC (permalink / raw)
To: dekelp, orika, viacheslavo, matan, shahafs, cristian.dumitrescu,
lironh, Wisam Jaddo, Xiaoyun Li, Jasvinder Singh,
Thomas Monjalon, Ferruh Yigit, Andrew Rybchenko, Ray Kinsella,
Neil Horman
Cc: dev, rasland, roniba, Haifei Luo
Currently, the flow meter policy does not support multiple actions
per color; also the allowed action types per color are very limited.
In addition, the policy cannot be pre-defined.
Due to the growing in flow actions offload abilities there is a potential
for the user to use variety of actions per color differently.
This new meter policy API comes to allow this potential in the most ethdev
common way using rte_flow action definition.
A list of rte_flow actions will be provided by the user per color
in order to create a meter policy.
In addition, the API forces to pre-define the policy before
the meters creation in order to allow sharing of single policy
with multiple meters efficiently.
meter_policy_id is added into struct rte_mtr_params.
So that it can get the policy during the meters creation.
Policy id 0 is default policy. Action per color as below:
green - nothing, yellow - nothing, red - drop
Allow coloring the packet using a new rte_flow_action_color
as could be done by the old policy API,
The next API function were added:
- rte_mtr_meter_policy_create
- rte_mtr_meter_policy_delete
- rte_mtr_meter_policy_update
- rte_mtr_meter_policy_validate
The next struct was changed:
- rte_mtr_params
- rte_mtr_capabilities
The next API was deleted:
- rte_mtr_policer_actions_update
To support this API the following app were changed:
app/test-flow-perf: clean meter policer
app/testpmd: clean meter policer
To support this API the following drivers were changed:
net/softnic: support meter policy API
1. cleans meter rte_mtr_policer_action.
2. Support policy API to get color action as policer action did.
The color action will be mapped into rte_table_action_policer.
3. Create default policy if policy id is RTE_MTR_DEFAULT_POLICY_ID.
default policy actoins:
green - do nothing, yellow - do nothing, red - drop
net/mlx5: clean meter creation management
Cleans and breaks part of the current meter management
in order to allow better design with policy API.
Signed-off-by: Li Zhang <lizh@nvidia.com>
Signed-off-by: Haifei Luo <haifeil@nvidia.com>
---
app/test-flow-perf/main.c | 7 -
app/test-pmd/cmdline.c | 1 -
app/test-pmd/cmdline_mtr.c | 172 -------
app/test-pmd/cmdline_mtr.h | 1 -
doc/guides/rel_notes/release_20_11.rst | 3 +
drivers/net/mlx5/mlx5.h | 24 +-
drivers/net/mlx5/mlx5_flow.c | 46 --
drivers/net/mlx5/mlx5_flow.h | 18 +-
drivers/net/mlx5/mlx5_flow_aso.c | 8 +-
drivers/net/mlx5/mlx5_flow_dv.c | 461 +-----------------
drivers/net/mlx5/mlx5_flow_meter.c | 369 +-------------
drivers/net/softnic/rte_eth_softnic_flow.c | 19 +-
.../net/softnic/rte_eth_softnic_internals.h | 18 +-
drivers/net/softnic/rte_eth_softnic_meter.c | 303 +++++++++---
lib/librte_ethdev/rte_flow.h | 18 +
lib/librte_ethdev/rte_mtr.c | 55 ++-
lib/librte_ethdev/rte_mtr.h | 166 +++++--
lib/librte_ethdev/rte_mtr_driver.h | 44 +-
lib/librte_ethdev/version.map | 4 +
19 files changed, 507 insertions(+), 1230 deletions(-)
diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
index 99d0463456..66ec776017 100644
--- a/app/test-flow-perf/main.c
+++ b/app/test-flow-perf/main.c
@@ -924,13 +924,6 @@ create_meter_rule(int port_id, uint32_t counter)
/*create meter*/
params.meter_profile_id = default_prof_id;
- params.action[RTE_COLOR_GREEN] =
- MTR_POLICER_ACTION_COLOR_GREEN;
- params.action[RTE_COLOR_YELLOW] =
- MTR_POLICER_ACTION_COLOR_YELLOW;
- params.action[RTE_COLOR_RED] =
- MTR_POLICER_ACTION_DROP;
-
ret = rte_mtr_create(port_id, counter, ¶ms, 1, &error);
if (ret != 0) {
printf("Port %u create meter idx(%d) error(%d) message: %s\n",
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 14110eb2e4..dcb5f9c871 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -17069,7 +17069,6 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_del_port_meter,
(cmdline_parse_inst_t *)&cmd_set_port_meter_profile,
(cmdline_parse_inst_t *)&cmd_set_port_meter_dscp_table,
- (cmdline_parse_inst_t *)&cmd_set_port_meter_policer_action,
(cmdline_parse_inst_t *)&cmd_set_port_meter_stats_mask,
(cmdline_parse_inst_t *)&cmd_show_port_meter_stats,
(cmdline_parse_inst_t *)&cmd_mcast_addr,
diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c
index 3982787d20..44394e3ea1 100644
--- a/app/test-pmd/cmdline_mtr.c
+++ b/app/test-pmd/cmdline_mtr.c
@@ -146,53 +146,6 @@ parse_meter_color_str(char *c_str, uint32_t *use_prev_meter_color,
return 0;
}
-static int
-string_to_policer_action(char *s)
-{
- if ((strcmp(s, "G") == 0) || (strcmp(s, "g") == 0))
- return MTR_POLICER_ACTION_COLOR_GREEN;
-
- if ((strcmp(s, "Y") == 0) || (strcmp(s, "y") == 0))
- return MTR_POLICER_ACTION_COLOR_YELLOW;
-
- if ((strcmp(s, "R") == 0) || (strcmp(s, "r") == 0))
- return MTR_POLICER_ACTION_COLOR_RED;
-
- if ((strcmp(s, "D") == 0) || (strcmp(s, "d") == 0))
- return MTR_POLICER_ACTION_DROP;
-
- return -1;
-}
-
-static int
-parse_policer_action_string(char *p_str, uint32_t action_mask,
- enum rte_mtr_policer_action actions[])
-{
- char *token;
- int count = __builtin_popcount(action_mask);
- int g_color = 0, y_color = 0, action, i;
-
- for (i = 0; i < count; i++) {
- token = strtok_r(p_str, PARSE_DELIMITER, &p_str);
- if (token == NULL)
- return -1;
-
- action = string_to_policer_action(token);
- if (action == -1)
- return -1;
-
- if (g_color == 0 && (action_mask & 0x1)) {
- actions[RTE_COLOR_GREEN] = action;
- g_color = 1;
- } else if (y_color == 0 && (action_mask & 0x2)) {
- actions[RTE_COLOR_YELLOW] = action;
- y_color = 1;
- } else
- actions[RTE_COLOR_RED] = action;
- }
- return 0;
-}
-
static int
parse_multi_token_string(char *t_str, uint16_t *port_id,
uint32_t *mtr_id, enum rte_color **dscp_table)
@@ -302,10 +255,6 @@ static void cmd_show_port_meter_cap_parsed(void *parsed_result,
cap.color_aware_trtcm_rfc2698_supported);
printf("cap.color_aware_trtcm_rfc4115_supported %" PRId32 "\n",
cap.color_aware_trtcm_rfc4115_supported);
- printf("cap.policer_action_recolor_supported %" PRId32 "\n",
- cap.policer_action_recolor_supported);
- printf("cap.policer_action_drop_supported %" PRId32 "\n",
- cap.policer_action_drop_supported);
printf("cap.stats_mask %" PRIx64 "\n", cap.stats_mask);
}
@@ -808,12 +757,6 @@ static void cmd_create_port_meter_parsed(void *parsed_result,
else
params.meter_enable = 0;
- params.action[RTE_COLOR_GREEN] =
- string_to_policer_action(res->g_action);
- params.action[RTE_COLOR_YELLOW] =
- string_to_policer_action(res->y_action);
- params.action[RTE_COLOR_RED] =
- string_to_policer_action(res->r_action);
params.stats_mask = res->statistics_mask;
ret = rte_mtr_create(port_id, mtr_id, ¶ms, shared, &error);
@@ -1181,121 +1124,6 @@ cmdline_parse_inst_t cmd_set_port_meter_dscp_table = {
},
};
-/* *** Set Port Meter Policer Action *** */
-struct cmd_set_port_meter_policer_action_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t port;
- cmdline_fixed_string_t meter;
- cmdline_fixed_string_t policer;
- cmdline_fixed_string_t action;
- uint16_t port_id;
- uint32_t mtr_id;
- uint32_t action_mask;
- cmdline_multi_string_t policer_action;
-};
-
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_set =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, set, "set");
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_port =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, port, "port");
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_meter =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, meter,
- "meter");
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_policer =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, policer,
- "policer");
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_action =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, action,
- "action");
-cmdline_parse_token_num_t cmd_set_port_meter_policer_action_port_id =
- TOKEN_NUM_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, port_id,
- RTE_UINT16);
-cmdline_parse_token_num_t cmd_set_port_meter_policer_action_mtr_id =
- TOKEN_NUM_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, mtr_id,
- RTE_UINT32);
-cmdline_parse_token_num_t cmd_set_port_meter_policer_action_action_mask =
- TOKEN_NUM_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result, action_mask,
- RTE_UINT32);
-cmdline_parse_token_string_t cmd_set_port_meter_policer_action_policer_action =
- TOKEN_STRING_INITIALIZER(
- struct cmd_set_port_meter_policer_action_result,
- policer_action, TOKEN_STRING_MULTI);
-
-static void cmd_set_port_meter_policer_action_parsed(void *parsed_result,
- __rte_unused struct cmdline *cl,
- __rte_unused void *data)
-{
- struct cmd_set_port_meter_policer_action_result *res = parsed_result;
- enum rte_mtr_policer_action *actions;
- struct rte_mtr_error error;
- uint32_t mtr_id = res->mtr_id;
- uint32_t action_mask = res->action_mask;
- uint16_t port_id = res->port_id;
- char *p_str = res->policer_action;
- int ret;
-
- if (port_id_is_invalid(port_id, ENABLED_WARN))
- return;
-
- /* Check: action mask */
- if (action_mask == 0 || (action_mask & (~0x7UL))) {
- printf(" Policer action mask not correct (error)\n");
- return;
- }
-
- /* Allocate memory for policer actions */
- actions = (enum rte_mtr_policer_action *)malloc(RTE_COLORS *
- sizeof(enum rte_mtr_policer_action));
- if (actions == NULL) {
- printf("Memory for policer actions not allocated (error)\n");
- return;
- }
- /* Parse policer action string */
- ret = parse_policer_action_string(p_str, action_mask, actions);
- if (ret) {
- printf(" Policer action string parse error\n");
- free(actions);
- return;
- }
-
- ret = rte_mtr_policer_actions_update(port_id, mtr_id,
- action_mask, actions, &error);
- if (ret != 0) {
- free(actions);
- print_err_msg(&error);
- return;
- }
-
- free(actions);
-}
-
-cmdline_parse_inst_t cmd_set_port_meter_policer_action = {
- .f = cmd_set_port_meter_policer_action_parsed,
- .data = NULL,
- .help_str = "set port meter policer action <port_id> <mtr_id> "
- "<action_mask> <action0> [<action1> <action2>]",
- .tokens = {
- (void *)&cmd_set_port_meter_policer_action_set,
- (void *)&cmd_set_port_meter_policer_action_port,
- (void *)&cmd_set_port_meter_policer_action_meter,
- (void *)&cmd_set_port_meter_policer_action_policer,
- (void *)&cmd_set_port_meter_policer_action_action,
- (void *)&cmd_set_port_meter_policer_action_port_id,
- (void *)&cmd_set_port_meter_policer_action_mtr_id,
- (void *)&cmd_set_port_meter_policer_action_action_mask,
- (void *)&cmd_set_port_meter_policer_action_policer_action,
- NULL,
- },
-};
-
/* *** Set Port Meter Stats Mask *** */
struct cmd_set_port_meter_stats_mask_result {
cmdline_fixed_string_t set;
diff --git a/app/test-pmd/cmdline_mtr.h b/app/test-pmd/cmdline_mtr.h
index e69d6da023..7e2713cea3 100644
--- a/app/test-pmd/cmdline_mtr.h
+++ b/app/test-pmd/cmdline_mtr.h
@@ -17,7 +17,6 @@ extern cmdline_parse_inst_t cmd_disable_port_meter;
extern cmdline_parse_inst_t cmd_del_port_meter;
extern cmdline_parse_inst_t cmd_set_port_meter_profile;
extern cmdline_parse_inst_t cmd_set_port_meter_dscp_table;
-extern cmdline_parse_inst_t cmd_set_port_meter_policer_action;
extern cmdline_parse_inst_t cmd_set_port_meter_stats_mask;
extern cmdline_parse_inst_t cmd_show_port_meter_stats;
diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst
index 7405a9864f..5a6839758a 100644
--- a/doc/guides/rel_notes/release_20_11.rst
+++ b/doc/guides/rel_notes/release_20_11.rst
@@ -663,6 +663,9 @@ API Changes
* sched: Removed ``tb_rate``, ``tc_rate``, ``tc_period`` and ``tb_size``
from ``struct rte_sched_subport_params``.
+* ethdev: Added meter API to support pre-defined policy, rte_flow action list per color.
+ ``rte_mtr_meter_policy_create()``, ``rte_mtr_meter_policy_delete()`` and
+ ``rte_mtr_create_with_policy()``
ABI Changes
-----------
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 08efa5d15d..b182fb6c19 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -593,14 +593,6 @@ struct mlx5_dev_shared_port {
/* Modify this value if enum rte_mtr_color changes. */
#define RTE_MTR_DROPPED RTE_COLORS
-/* Meter policer statistics */
-struct mlx5_flow_policer_stats {
- uint32_t pass_cnt;
- /**< Color counter for pass. */
- uint32_t drop_cnt;
- /**< Color counter for drop. */
-};
-
/* Meter table structure. */
struct mlx5_meter_domain_info {
struct mlx5_flow_tbl_resource *tbl;
@@ -639,24 +631,12 @@ struct mlx5_meter_domains_infos {
/* Meter parameter structure. */
struct mlx5_flow_meter_info {
- uint32_t meter_id;
- /**< Meter id. */
struct mlx5_flow_meter_profile *profile;
/**< Meter profile parameters. */
rte_spinlock_t sl; /**< Meter action spinlock. */
- /** Policer actions (per meter output color). */
- enum rte_mtr_policer_action action[RTE_COLORS];
/** Set of stats counters to be enabled.
* @see enum rte_mtr_stats_type
*/
- uint32_t green_bytes:1;
- /** Set green bytes stats to be enabled. */
- uint32_t green_pkts:1;
- /** Set green packets stats to be enabled. */
- uint32_t red_bytes:1;
- /** Set red bytes stats to be enabled. */
- uint32_t red_pkts:1;
- /** Set red packets stats to be enabled. */
uint32_t bytes_dropped:1;
/** Set bytes dropped stats to be enabled. */
uint32_t pkts_dropped:1;
@@ -691,8 +671,8 @@ struct mlx5_flow_meter_info {
uint32_t transfer:1;
struct mlx5_meter_domains_infos *mfts;
/**< Flow table created for this meter. */
- struct mlx5_flow_policer_stats policer_stats;
- /**< Meter policer statistics. */
+ uint32_t drop_cnt;
+ /**< Color counter for drop. */
uint32_t ref_cnt;
/**< Use count. */
struct mlx5_indexed_pool *flow_ipool;
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 615fe99b69..2d0daf631a 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -6654,52 +6654,6 @@ mlx5_flow_destroy_mtr_tbls(struct rte_eth_dev *dev,
return fops->destroy_mtr_tbls(dev, tbls);
}
-/**
- * Prepare policer rules.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] fm
- * Pointer to flow meter structure.
- * @param[in] attr
- * Pointer to flow attributes.
- *
- * @return
- * 0 on success, -1 otherwise.
- */
-int
-mlx5_flow_prepare_policer_rules(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr)
-{
- const struct mlx5_flow_driver_ops *fops;
-
- fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- return fops->prepare_policer_rules(dev, fm, attr);
-}
-
-/**
- * Destroy policer rules.
- *
- * @param[in] fm
- * Pointer to flow meter structure.
- * @param[in] attr
- * Pointer to flow attributes.
- *
- * @return
- * 0 on success, -1 otherwise.
- */
-int
-mlx5_flow_destroy_policer_rules(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr)
-{
- const struct mlx5_flow_driver_ops *fops;
-
- fops = flow_get_drv_ops(MLX5_FLOW_TYPE_DV);
- return fops->destroy_policer_rules(dev, fm, attr);
-}
-
/**
* Allocate the needed aso flow meter id.
*
diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
index 59e9ce2c9e..8e4530f32c 100644
--- a/drivers/net/mlx5/mlx5_flow.h
+++ b/drivers/net/mlx5/mlx5_flow.h
@@ -838,6 +838,8 @@ struct mlx5_legacy_flow_meter {
/* Must be the first in struct. */
TAILQ_ENTRY(mlx5_legacy_flow_meter) next;
/**< Pointer to the next flow meter structure. */
+ uint32_t meter_id;
+ /**< Meter id. */
uint32_t idx; /* Index to meter object. */
};
@@ -1077,14 +1079,6 @@ typedef struct mlx5_meter_domains_infos *(*mlx5_flow_create_mtr_tbls_t)
(struct rte_eth_dev *dev);
typedef int (*mlx5_flow_destroy_mtr_tbls_t)(struct rte_eth_dev *dev,
struct mlx5_meter_domains_infos *tbls);
-typedef int (*mlx5_flow_create_policer_rules_t)
- (struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr);
-typedef int (*mlx5_flow_destroy_policer_rules_t)
- (struct rte_eth_dev *dev,
- const struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr);
typedef uint32_t (*mlx5_flow_mtr_alloc_t)
(struct rte_eth_dev *dev);
typedef void (*mlx5_flow_mtr_free_t)(struct rte_eth_dev *dev,
@@ -1141,8 +1135,6 @@ struct mlx5_flow_driver_ops {
mlx5_flow_query_t query;
mlx5_flow_create_mtr_tbls_t create_mtr_tbls;
mlx5_flow_destroy_mtr_tbls_t destroy_mtr_tbls;
- mlx5_flow_create_policer_rules_t prepare_policer_rules;
- mlx5_flow_destroy_policer_rules_t destroy_policer_rules;
mlx5_flow_mtr_alloc_t create_meter;
mlx5_flow_mtr_free_t free_meter;
mlx5_flow_counter_alloc_t counter_alloc;
@@ -1372,12 +1364,6 @@ struct mlx5_meter_domains_infos *mlx5_flow_create_mtr_tbls
(struct rte_eth_dev *dev);
int mlx5_flow_destroy_mtr_tbls(struct rte_eth_dev *dev,
struct mlx5_meter_domains_infos *tbl);
-int mlx5_flow_prepare_policer_rules(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr);
-int mlx5_flow_destroy_policer_rules(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr);
int mlx5_flow_meter_flush(struct rte_eth_dev *dev,
struct rte_mtr_error *error);
int mlx5_flow_dv_discover_counter_offset_support(struct rte_eth_dev *dev);
diff --git a/drivers/net/mlx5/mlx5_flow_aso.c b/drivers/net/mlx5/mlx5_flow_aso.c
index 712f655761..4d13743ecc 100644
--- a/drivers/net/mlx5/mlx5_flow_aso.c
+++ b/drivers/net/mlx5/mlx5_flow_aso.c
@@ -809,8 +809,8 @@ mlx5_aso_meter_update_by_wqe(struct mlx5_dev_ctx_shared *sh,
/* Waiting for wqe resource. */
usleep(MLX5_ASO_WQE_CQE_RESPONSE_DELAY);
} while (--poll_wqe_times);
- DRV_LOG(ERR, "Fail to send WQE for ASO meter %d",
- mtr->fm.meter_id);
+ DRV_LOG(ERR, "Fail to send WQE for ASO meter offset %d",
+ mtr->offset);
return -1;
}
@@ -845,7 +845,7 @@ mlx5_aso_mtr_wait(struct mlx5_dev_ctx_shared *sh,
/* Waiting for CQE ready. */
usleep(MLX5_ASO_WQE_CQE_RESPONSE_DELAY);
} while (--poll_cqe_times);
- DRV_LOG(ERR, "Fail to poll CQE ready for ASO meter %d",
- mtr->fm.meter_id);
+ DRV_LOG(ERR, "Fail to poll CQE ready for ASO meter offset %d",
+ mtr->offset);
return -1;
}
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index c4c54d4043..ec6097b395 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -184,31 +184,6 @@ flow_dv_attr_init(const struct rte_flow_item *item, union flow_dv_attr *attr,
attr->valid = 1;
}
-/**
- * Convert rte_mtr_color to mlx5 color.
- *
- * @param[in] rcol
- * rte_mtr_color.
- *
- * @return
- * mlx5 color.
- */
-static int
-rte_col_2_mlx5_col(enum rte_color rcol)
-{
- switch (rcol) {
- case RTE_COLOR_GREEN:
- return MLX5_FLOW_COLOR_GREEN;
- case RTE_COLOR_YELLOW:
- return MLX5_FLOW_COLOR_YELLOW;
- case RTE_COLOR_RED:
- return MLX5_FLOW_COLOR_RED;
- default:
- break;
- }
- return MLX5_FLOW_COLOR_UNDEFINED;
-}
-
struct field_modify_info {
uint32_t size; /* Size of field in protocol header, in bytes. */
uint32_t offset; /* Offset of field in protocol header, in bytes. */
@@ -6011,12 +5986,10 @@ flow_dv_mtr_pool_create(struct rte_eth_dev *dev,
mtrmng->n_valid++;
for (i = 1; i < MLX5_ASO_MTRS_PER_POOL; ++i) {
pool->mtrs[i].offset = i;
- pool->mtrs[i].fm.meter_id = UINT32_MAX;
LIST_INSERT_HEAD(&mtrmng->meters,
&pool->mtrs[i], next);
}
pool->mtrs[0].offset = 0;
- pool->mtrs[0].fm.meter_id = UINT32_MAX;
*mtr_free = &pool->mtrs[0];
return pool;
}
@@ -6039,7 +6012,6 @@ flow_dv_aso_mtr_release_to_pool(struct rte_eth_dev *dev, uint32_t mtr_idx)
MLX5_ASSERT(aso_mtr);
rte_spinlock_lock(&mtrmng->mtrsl);
aso_mtr->state = ASO_METER_FREE;
- aso_mtr->fm.meter_id = UINT32_MAX;
LIST_INSERT_HEAD(&mtrmng->meters, aso_mtr, next);
rte_spinlock_unlock(&mtrmng->mtrsl);
}
@@ -6081,8 +6053,8 @@ flow_dv_mtr_alloc(struct rte_eth_dev *dev)
mtr_free->state = ASO_METER_WAIT;
rte_spinlock_unlock(&mtrmng->mtrsl);
pool = container_of(mtr_free,
- struct mlx5_aso_mtr_pool,
- mtrs[mtr_free->offset]);
+ struct mlx5_aso_mtr_pool,
+ mtrs[mtr_free->offset]);
mtr_idx = MLX5_MAKE_MTR_IDX(pool->index, mtr_free->offset);
if (!mtr_free->fm.meter_action) {
reg_id = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR, 0, &error);
@@ -13565,433 +13537,6 @@ flow_dv_create_mtr_tbl(struct rte_eth_dev *dev)
return NULL;
}
-/**
- * Destroy the meter table matchers.
- * Lock free, (mutex should be acquired by caller).
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in,out] dtb
- * Pointer to DV meter table.
- *
- * @return
- * Always 0.
- */
-static int
-flow_dv_destroy_mtr_matchers(struct rte_eth_dev *dev,
- struct mlx5_meter_domain_info *dtb)
-{
- struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_flow_tbl_data_entry *tbl;
-
- if (!priv->config.dv_flow_en)
- return 0;
- if (dtb->drop_matcher) {
- tbl = container_of(dtb->drop_matcher->tbl, typeof(*tbl), tbl);
- mlx5_cache_unregister(&tbl->matchers,
- &dtb->drop_matcher->entry);
- dtb->drop_matcher = NULL;
- }
- if (dtb->color_matcher) {
- tbl = container_of(dtb->color_matcher->tbl, typeof(*tbl), tbl);
- mlx5_cache_unregister(&tbl->matchers,
- &dtb->color_matcher->entry);
- dtb->color_matcher = NULL;
- }
- return 0;
-}
-
-/**
- * Create the matchers for meter table.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] color_reg_c_idx
- * Reg C index for color match.
- * @param[in] mtr_id_reg_c_idx
- * Reg C index for meter_id match.
- * @param[in] mtr_id_mask
- * Mask for meter_id match criteria.
- * @param[in,out] dtb
- * Pointer to DV meter table.
- * @param[out] error
- * Perform verbose error reporting if not NULL.
- *
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
- */
-static int
-flow_dv_prepare_mtr_matchers(struct rte_eth_dev *dev,
- uint32_t color_reg_c_idx,
- uint32_t mtr_id_reg_c_idx,
- uint32_t mtr_id_mask,
- struct mlx5_meter_domain_info *dtb,
- struct rte_flow_error *error)
-{
- struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_flow_tbl_data_entry *tbl_data;
- struct mlx5_cache_entry *entry;
- struct mlx5_flow_dv_matcher matcher = {
- .mask = {
- .size = sizeof(matcher.mask.buf) -
- MLX5_ST_SZ_BYTES(fte_match_set_misc4),
- },
- .tbl = dtb->tbl,
- };
- struct mlx5_flow_dv_match_params value = {
- .size = sizeof(value.buf) -
- MLX5_ST_SZ_BYTES(fte_match_set_misc4),
- };
- struct mlx5_flow_cb_ctx ctx = {
- .error = error,
- .data = &matcher,
- };
-
- tbl_data = container_of(dtb->tbl, struct mlx5_flow_tbl_data_entry, tbl);
- if (!dtb->drop_matcher) {
- /* Create matchers for Drop. */
- flow_dv_match_meta_reg(matcher.mask.buf, value.buf,
- mtr_id_reg_c_idx, 0, mtr_id_mask);
- matcher.priority = MLX5_REG_BITS * 2 - priv->max_mtr_bits;
- matcher.crc = rte_raw_cksum((const void *)matcher.mask.buf,
- matcher.mask.size);
- entry = mlx5_cache_register(&tbl_data->matchers, &ctx);
- if (!entry) {
- DRV_LOG(ERR, "Failed to register meter drop matcher.");
- return -1;
- }
- dtb->drop_matcher =
- container_of(entry, struct mlx5_flow_dv_matcher, entry);
- }
- if (!dtb->color_matcher) {
- /* Create matchers for Color + meter_id. */
- if (priv->mtr_reg_share) {
- flow_dv_match_meta_reg(matcher.mask.buf, value.buf,
- color_reg_c_idx, 0,
- (mtr_id_mask |
- LS32_MASK(MLX5_MTR_COLOR_BITS)));
- } else {
- flow_dv_match_meta_reg(matcher.mask.buf, value.buf,
- color_reg_c_idx, 0,
- LS32_MASK(MLX5_MTR_COLOR_BITS));
- flow_dv_match_meta_reg(matcher.mask.buf, value.buf,
- mtr_id_reg_c_idx, 0, mtr_id_mask);
- }
- matcher.priority = MLX5_REG_BITS - priv->max_mtr_bits;
- matcher.crc = rte_raw_cksum((const void *)matcher.mask.buf,
- matcher.mask.size);
- entry = mlx5_cache_register(&tbl_data->matchers, &ctx);
- if (!entry) {
- DRV_LOG(ERR, "Failed to register meter color matcher.");
- return -1;
- }
- dtb->color_matcher =
- container_of(entry, struct mlx5_flow_dv_matcher, entry);
- }
- return 0;
-}
-
-/**
- * Destroy domain policer rule.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] dt
- * Pointer to domain table.
- */
-static void
-flow_dv_destroy_domain_policer_rule(struct rte_eth_dev *dev,
- struct mlx5_meter_domain_info *dt)
-{
- if (dt->drop_rule) {
- claim_zero(mlx5_flow_os_destroy_flow(dt->drop_rule));
- dt->drop_rule = NULL;
- }
- if (dt->green_rule) {
- claim_zero(mlx5_flow_os_destroy_flow(dt->green_rule));
- dt->green_rule = NULL;
- }
- flow_dv_destroy_mtr_matchers(dev, dt);
- if (dt->jump_actn) {
- claim_zero(mlx5_flow_os_destroy_flow_action(dt->jump_actn));
- dt->jump_actn = NULL;
- }
-}
-
-/**
- * Destroy policer rules.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] fm
- * Pointer to flow meter structure.
- * @param[in] attr
- * Pointer to flow attributes.
- *
- * @return
- * Always 0.
- */
-static int
-flow_dv_destroy_policer_rules(struct rte_eth_dev *dev,
- const struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr)
-{
- struct mlx5_meter_domains_infos *mtb = fm ? fm->mfts : NULL;
-
- if (!mtb)
- return 0;
- if (attr->egress)
- flow_dv_destroy_domain_policer_rule(dev, &mtb->egress);
- if (attr->ingress)
- flow_dv_destroy_domain_policer_rule(dev, &mtb->ingress);
- if (attr->transfer)
- flow_dv_destroy_domain_policer_rule(dev, &mtb->transfer);
- return 0;
-}
-
-/**
- * Create specify domain meter policer rule.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] fm
- * Pointer to flow meter structure.
- * @param[in] mtr_idx
- * meter index.
- * @param[in] mtb
- * Pointer to DV meter table set.
- * @param[out] drop_rule
- * The address of pointer saving drop rule.
- * @param[out] color_rule
- * The address of pointer saving green rule.
- *
- * @return
- * 0 on success, -1 otherwise.
- */
-static int
-flow_dv_create_policer_forward_rule(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- uint32_t mtr_idx,
- struct mlx5_meter_domain_info *dtb,
- void **drop_rule,
- void **green_rule)
-{
- struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_flow_dv_match_params matcher = {
- .size = sizeof(matcher.buf) -
- MLX5_ST_SZ_BYTES(fte_match_set_misc4),
- };
- struct mlx5_flow_dv_match_params value = {
- .size = sizeof(value.buf) -
- MLX5_ST_SZ_BYTES(fte_match_set_misc4),
- };
- struct mlx5_meter_domains_infos *mtb = fm->mfts;
- struct rte_flow_error error;
- uint32_t color_reg_c = mlx5_flow_get_reg_id(dev, MLX5_MTR_COLOR,
- 0, &error);
- uint32_t mtr_id_reg_c = mlx5_flow_get_reg_id(dev, MLX5_MTR_ID,
- 0, &error);
- uint8_t mtr_id_offset = priv->mtr_reg_share ? MLX5_MTR_COLOR_BITS : 0;
- uint32_t mtr_id_mask = LS32_MASK(priv->max_mtr_bits) << mtr_id_offset;
- void *actions[METER_ACTIONS];
- int i;
- int ret = 0;
-
- /* Create jump action. */
- if (!dtb->jump_actn)
- ret = mlx5_flow_os_create_flow_action_dest_flow_tbl
- (dtb->sfx_tbl->obj, &dtb->jump_actn);
- if (ret) {
- DRV_LOG(ERR, "Failed to create policer jump action.");
- goto error;
- }
- /* Prepare matchers. */
- if (!dtb->drop_matcher || !dtb->color_matcher) {
- ret = flow_dv_prepare_mtr_matchers(dev, color_reg_c,
- mtr_id_reg_c, mtr_id_mask,
- dtb, &error);
- if (ret) {
- DRV_LOG(ERR, "Failed to setup matchers for mtr table.");
- goto error;
- }
- }
- /* Create Drop flow, matching meter_id only. */
- i = 0;
- flow_dv_match_meta_reg(matcher.buf, value.buf, mtr_id_reg_c,
- (mtr_idx << mtr_id_offset), UINT32_MAX);
- if (mtb->drop_count)
- actions[i++] = mtb->drop_count;
- actions[i++] = priv->sh->esw_drop_action;
- ret = mlx5_flow_os_create_flow(dtb->drop_matcher->matcher_object,
- (void *)&value, i, actions, drop_rule);
- if (ret) {
- DRV_LOG(ERR, "Failed to create meter policer drop rule.");
- goto error;
- }
- /* Create flow matching Green color + meter_id. */
- i = 0;
- if (priv->mtr_reg_share) {
- flow_dv_match_meta_reg(matcher.buf, value.buf, color_reg_c,
- ((mtr_idx << mtr_id_offset) |
- rte_col_2_mlx5_col(RTE_COLOR_GREEN)),
- UINT32_MAX);
- } else {
- flow_dv_match_meta_reg(matcher.buf, value.buf, color_reg_c,
- rte_col_2_mlx5_col(RTE_COLOR_GREEN),
- UINT32_MAX);
- flow_dv_match_meta_reg(matcher.buf, value.buf, mtr_id_reg_c,
- mtr_idx, UINT32_MAX);
- }
- if (mtb->green_count)
- actions[i++] = mtb->green_count;
- actions[i++] = dtb->jump_actn;
- ret = mlx5_flow_os_create_flow(dtb->color_matcher->matcher_object,
- (void *)&value, i, actions, green_rule);
- if (ret) {
- DRV_LOG(ERR, "Failed to create meter policer color rule.");
- goto error;
- }
- return 0;
-error:
- rte_errno = errno;
- return -1;
-}
-
-/**
- * Prepare policer rules for all domains.
- * If meter already initialized, this will replace all old rules with new ones.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] fm
- * Pointer to flow meter structure.
- * @param[in] attr
- * Pointer to flow attributes.
- *
- * @return
- * 0 on success, -1 otherwise.
- */
-static int
-flow_dv_prepare_policer_rules(struct rte_eth_dev *dev,
- struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr)
-{
- struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_meter_domains_infos *mtb = fm->mfts;
- bool initialized = false;
- struct mlx5_flow_counter *cnt;
- void *egress_drop_rule = NULL;
- void *egress_green_rule = NULL;
- void *ingress_drop_rule = NULL;
- void *ingress_green_rule = NULL;
- void *transfer_drop_rule = NULL;
- void *transfer_green_rule = NULL;
- uint32_t mtr_idx;
- int ret;
-
- /* Get the statistics counters for green/drop. */
- if (fm->policer_stats.pass_cnt) {
- cnt = flow_dv_counter_get_by_idx(dev,
- fm->policer_stats.pass_cnt,
- NULL);
- mtb->green_count = cnt->action;
- } else {
- mtb->green_count = NULL;
- }
- if (fm->policer_stats.drop_cnt) {
- cnt = flow_dv_counter_get_by_idx(dev,
- fm->policer_stats.drop_cnt,
- NULL);
- mtb->drop_count = cnt->action;
- } else {
- mtb->drop_count = NULL;
- }
- /**
- * If flow meter has been initilized, all policer rules
- * are created. So can get if meter initialized by checking
- * any policer rule.
- */
- if (mtb->egress.drop_rule)
- initialized = true;
- if (priv->sh->meter_aso_en) {
- struct mlx5_aso_mtr *aso_mtr = NULL;
- struct mlx5_aso_mtr_pool *pool;
-
- aso_mtr = container_of(fm, struct mlx5_aso_mtr, fm);
- pool = container_of(aso_mtr, struct mlx5_aso_mtr_pool,
- mtrs[aso_mtr->offset]);
- mtr_idx = MLX5_MAKE_MTR_IDX(pool->index, aso_mtr->offset);
- } else {
- struct mlx5_legacy_flow_meter *legacy_fm;
-
- legacy_fm = container_of(fm, struct mlx5_legacy_flow_meter, fm);
- mtr_idx = legacy_fm->idx;
- }
- if (attr->egress) {
- ret = flow_dv_create_policer_forward_rule(dev,
- fm, mtr_idx, &mtb->egress,
- &egress_drop_rule, &egress_green_rule);
- if (ret) {
- DRV_LOG(ERR, "Failed to create egress policer.");
- goto error;
- }
- }
- if (attr->ingress) {
- ret = flow_dv_create_policer_forward_rule(dev,
- fm, mtr_idx, &mtb->ingress,
- &ingress_drop_rule, &ingress_green_rule);
- if (ret) {
- DRV_LOG(ERR, "Failed to create ingress policer.");
- goto error;
- }
- }
- if (attr->transfer) {
- ret = flow_dv_create_policer_forward_rule(dev,
- fm, mtr_idx, &mtb->transfer,
- &transfer_drop_rule, &transfer_green_rule);
- if (ret) {
- DRV_LOG(ERR, "Failed to create transfer policer.");
- goto error;
- }
- }
- /* Replace old flows if existing. */
- if (mtb->egress.drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->egress.drop_rule));
- if (mtb->egress.green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->egress.green_rule));
- if (mtb->ingress.drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->ingress.drop_rule));
- if (mtb->ingress.green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->ingress.green_rule));
- if (mtb->transfer.drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->transfer.drop_rule));
- if (mtb->transfer.green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(mtb->transfer.green_rule));
- mtb->egress.drop_rule = egress_drop_rule;
- mtb->egress.green_rule = egress_green_rule;
- mtb->ingress.drop_rule = ingress_drop_rule;
- mtb->ingress.green_rule = ingress_green_rule;
- mtb->transfer.drop_rule = transfer_drop_rule;
- mtb->transfer.green_rule = transfer_green_rule;
- return 0;
-error:
- if (egress_drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(egress_drop_rule));
- if (egress_green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(egress_green_rule));
- if (ingress_drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(ingress_drop_rule));
- if (ingress_green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(ingress_green_rule));
- if (transfer_drop_rule)
- claim_zero(mlx5_flow_os_destroy_flow(transfer_drop_rule));
- if (transfer_green_rule)
- claim_zero(mlx5_flow_os_destroy_flow(transfer_green_rule));
- if (!initialized)
- flow_dv_destroy_policer_rules(dev, fm, attr);
- return -1;
-}
-
/**
* Validate the batch counter support in root table.
*
@@ -14285,8 +13830,6 @@ const struct mlx5_flow_driver_ops mlx5_flow_dv_drv_ops = {
.query = flow_dv_query,
.create_mtr_tbls = flow_dv_create_mtr_tbl,
.destroy_mtr_tbls = flow_dv_destroy_mtr_tbl,
- .prepare_policer_rules = flow_dv_prepare_policer_rules,
- .destroy_policer_rules = flow_dv_destroy_policer_rules,
.create_meter = flow_dv_mtr_alloc,
.free_meter = flow_dv_aso_mtr_release_to_pool,
.counter_alloc = flow_dv_counter_allocate,
diff --git a/drivers/net/mlx5/mlx5_flow_meter.c b/drivers/net/mlx5/mlx5_flow_meter.c
index c2a063abdb..af0a1c18cb 100644
--- a/drivers/net/mlx5/mlx5_flow_meter.c
+++ b/drivers/net/mlx5/mlx5_flow_meter.c
@@ -329,7 +329,6 @@ mlx5_flow_mtr_cap_get(struct rte_eth_dev *dev,
cap->chaining_n_mtrs_per_flow_max = 1; /* Chaining is not supported. */
cap->meter_srtcm_rfc2697_n_max = qattr->flow_meter_old ? cap->n_max : 0;
cap->meter_rate_max = 1ULL << 40; /* 1 Tera tokens per sec. */
- cap->policer_action_drop_supported = 1;
cap->stats_mask = RTE_MTR_STATS_N_BYTES_DROPPED |
RTE_MTR_STATS_N_PKTS_DROPPED;
return 0;
@@ -436,90 +435,6 @@ mlx5_flow_meter_profile_delete(struct rte_eth_dev *dev,
return 0;
}
-/**
- * Convert wrong color setting action to verbose error.
- *
- * @param[in] action
- * Policy color action.
- *
- * @return
- * Verbose meter color error type.
- */
-static inline enum rte_mtr_error_type
-action2error(enum rte_mtr_policer_action action)
-{
- switch (action) {
- case MTR_POLICER_ACTION_COLOR_GREEN:
- return RTE_MTR_ERROR_TYPE_POLICER_ACTION_GREEN;
- case MTR_POLICER_ACTION_COLOR_YELLOW:
- return RTE_MTR_ERROR_TYPE_POLICER_ACTION_YELLOW;
- case MTR_POLICER_ACTION_COLOR_RED:
- return RTE_MTR_ERROR_TYPE_POLICER_ACTION_RED;
- default:
- break;
- }
- return RTE_MTR_ERROR_TYPE_UNSPECIFIED;
-}
-
-/**
- * Check meter validation.
- *
- * @param[in] priv
- * Pointer to mlx5 private data structure.
- * @param[in] meter_id
- * Meter id.
- * @param[in] params
- * Pointer to rte meter parameters.
- * @param[out] error
- * Pointer to rte meter error structure.
- *
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
- */
-static int
-mlx5_flow_meter_validate(struct mlx5_priv *priv, uint32_t meter_id,
- struct rte_mtr_params *params,
- struct rte_mtr_error *error)
-{
- /* Meter must use global drop action. */
- if (!priv->sh->esw_drop_action)
- return -rte_mtr_error_set(error, ENOTSUP,
- RTE_MTR_ERROR_TYPE_MTR_PARAMS,
- NULL,
- "No drop action ready for meter.");
- /* Meter params must not be NULL. */
- if (params == NULL)
- return -rte_mtr_error_set(error, EINVAL,
- RTE_MTR_ERROR_TYPE_MTR_PARAMS,
- NULL, "Meter object params null.");
- /* Previous meter color is not supported. */
- if (params->use_prev_mtr_color)
- return -rte_mtr_error_set(error, ENOTSUP,
- RTE_MTR_ERROR_TYPE_MTR_PARAMS,
- NULL,
- "Previous meter color "
- "not supported.");
- /* Validate policer settings. */
- if (params->action[RTE_COLOR_RED] != MTR_POLICER_ACTION_DROP)
- return -rte_mtr_error_set
- (error, ENOTSUP,
- action2error(params->action[RTE_COLOR_RED]),
- NULL,
- "Red color only supports drop action.");
- if (params->action[RTE_COLOR_GREEN] != MTR_POLICER_ACTION_COLOR_GREEN)
- return -rte_mtr_error_set
- (error, ENOTSUP,
- action2error(params->action[RTE_COLOR_GREEN]),
- NULL,
- "Green color only supports recolor green action.");
- /* Validate meter id. */
- if (mlx5_flow_meter_find(priv, meter_id, NULL))
- return -rte_mtr_error_set(error, EEXIST,
- RTE_MTR_ERROR_TYPE_MTR_ID, NULL,
- "Meter object already exists.");
- return 0;
-}
-
/**
* Modify the flow meter action.
*
@@ -629,167 +544,14 @@ static void
mlx5_flow_meter_stats_enable_update(struct mlx5_flow_meter_info *fm,
uint64_t stats_mask)
{
- fm->green_bytes = (stats_mask & RTE_MTR_STATS_N_BYTES_GREEN) ? 1 : 0;
- fm->green_pkts = (stats_mask & RTE_MTR_STATS_N_PKTS_GREEN) ? 1 : 0;
- fm->red_bytes = (stats_mask & RTE_MTR_STATS_N_BYTES_RED) ? 1 : 0;
- fm->red_pkts = (stats_mask & RTE_MTR_STATS_N_PKTS_RED) ? 1 : 0;
fm->bytes_dropped =
(stats_mask & RTE_MTR_STATS_N_BYTES_DROPPED) ? 1 : 0;
fm->pkts_dropped = (stats_mask & RTE_MTR_STATS_N_PKTS_DROPPED) ? 1 : 0;
}
-/**
- * Create meter rules.
- *
- * @param[in] dev
- * Pointer to Ethernet device.
- * @param[in] meter_id
- * Meter id.
- * @param[in] params
- * Pointer to rte meter parameters.
- * @param[in] shared
- * Meter shared with other flow or not.
- * @param[out] error
- * Pointer to rte meter error structure.
- *
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
- */
-static int
-mlx5_flow_meter_create(struct rte_eth_dev *dev, uint32_t meter_id,
- struct rte_mtr_params *params, int shared,
- struct rte_mtr_error *error)
-{
- struct mlx5_priv *priv = dev->data->dev_private;
- struct mlx5_legacy_flow_meters *fms = &priv->flow_meters;
- struct mlx5_flow_meter_profile *fmp;
- struct mlx5_legacy_flow_meter *legacy_fm;
- struct mlx5_flow_meter_info *fm;
- const struct rte_flow_attr attr = {
- .ingress = 1,
- .egress = 1,
- .transfer = priv->config.dv_esw_en ? 1 : 0,
- };
- struct mlx5_indexed_pool_config flow_ipool_cfg = {
- .size = 0,
- .trunk_size = 64,
- .need_lock = 1,
- .type = "mlx5_flow_mtr_flow_id_pool",
- };
- struct mlx5_aso_mtr *aso_mtr;
- union mlx5_l3t_data data;
- uint32_t mtr_idx;
- int ret;
- uint8_t mtr_id_bits;
- uint8_t mtr_reg_bits = priv->mtr_reg_share ?
- MLX5_MTR_IDLE_BITS_IN_COLOR_REG : MLX5_REG_BITS;
-
- if (!priv->mtr_en)
- return -rte_mtr_error_set(error, ENOTSUP,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
- "Meter is not supported");
- /* Validate the parameters. */
- ret = mlx5_flow_meter_validate(priv, meter_id, params, error);
- if (ret)
- return ret;
- /* Meter profile must exist. */
- fmp = mlx5_flow_meter_profile_find(priv, params->meter_profile_id);
- if (fmp == NULL)
- return -rte_mtr_error_set(error, ENOENT,
- RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
- NULL, "Meter profile id not valid.");
- /* Allocate the flow meter memory. */
- if (priv->sh->meter_aso_en) {
- mtr_idx = mlx5_flow_mtr_alloc(dev);
- if (!mtr_idx)
- return -rte_mtr_error_set(error, ENOMEM,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
- "Memory alloc failed for meter.");
- aso_mtr = mlx5_aso_meter_by_idx(priv, mtr_idx);
- fm = &aso_mtr->fm;
- } else {
- legacy_fm = mlx5_ipool_zmalloc
- (priv->sh->ipool[MLX5_IPOOL_MTR], &mtr_idx);
- if (legacy_fm == NULL)
- return -rte_mtr_error_set(error, ENOMEM,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
- "Memory alloc failed for meter.");
- legacy_fm->idx = mtr_idx;
- fm = &legacy_fm->fm;
- }
- mtr_id_bits = MLX5_REG_BITS - __builtin_clz(mtr_idx);
- if ((mtr_id_bits + priv->max_mtr_flow_bits) > mtr_reg_bits) {
- DRV_LOG(ERR, "Meter number exceeds max limit.");
- goto error;
- }
- if (mtr_id_bits > priv->max_mtr_bits)
- priv->max_mtr_bits = mtr_id_bits;
- /* Fill the flow meter parameters. */
- fm->meter_id = meter_id;
- fm->profile = fmp;
- memcpy(fm->action, params->action, sizeof(params->action));
- mlx5_flow_meter_stats_enable_update(fm, params->stats_mask);
- /* Alloc policer counters. */
- if (fm->green_bytes || fm->green_pkts) {
- fm->policer_stats.pass_cnt = mlx5_counter_alloc(dev);
- if (!fm->policer_stats.pass_cnt)
- goto error;
- }
- if (fm->red_bytes || fm->red_pkts ||
- fm->bytes_dropped || fm->pkts_dropped) {
- fm->policer_stats.drop_cnt = mlx5_counter_alloc(dev);
- if (!fm->policer_stats.drop_cnt)
- goto error;
- }
- fm->mfts = mlx5_flow_create_mtr_tbls(dev);
- if (!fm->mfts)
- goto error;
- ret = mlx5_flow_prepare_policer_rules(dev, fm, &attr);
- if (ret)
- goto error;
- /* Add to the flow meter list. */
- if (!priv->sh->meter_aso_en)
- TAILQ_INSERT_TAIL(fms, legacy_fm, next);
- fm->active_state = 1; /* Config meter starts as active. */
- fm->is_enable = 1;
- fm->shared = !!shared;
- __atomic_add_fetch(&fm->profile->ref_cnt, 1, __ATOMIC_RELAXED);
- fm->flow_ipool = mlx5_ipool_create(&flow_ipool_cfg);
- if (!fm->flow_ipool)
- goto error;
- rte_spinlock_init(&fm->sl);
- /* If ASO meter supported, allocate ASO flow meter. */
- if (priv->sh->meter_aso_en) {
- aso_mtr = container_of(fm, struct mlx5_aso_mtr, fm);
- ret = mlx5_aso_meter_update_by_wqe(priv->sh, aso_mtr);
- if (ret)
- goto error;
- data.dword = mtr_idx;
- if (mlx5_l3t_set_entry(priv->mtr_idx_tbl, meter_id, &data))
- goto error;
- }
- return 0;
-error:
- mlx5_flow_destroy_policer_rules(dev, fm, &attr);
- mlx5_flow_destroy_mtr_tbls(dev, fm->mfts);
- /* Free policer counters. */
- if (fm->policer_stats.pass_cnt)
- mlx5_counter_free(dev, fm->policer_stats.pass_cnt);
- if (fm->policer_stats.drop_cnt)
- mlx5_counter_free(dev, fm->policer_stats.drop_cnt);
- if (priv->sh->meter_aso_en)
- mlx5_flow_mtr_free(dev, mtr_idx);
- else
- mlx5_ipool_free(priv->sh->ipool[MLX5_IPOOL_MTR], mtr_idx);
- return -rte_mtr_error_set(error, -ret,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED,
- NULL, "Failed to create devx meter.");
-}
-
static int
mlx5_flow_meter_params_flush(struct rte_eth_dev *dev,
struct mlx5_flow_meter_info *fm,
- const struct rte_flow_attr *attr,
uint32_t mtr_idx)
{
struct mlx5_priv *priv = dev->data->dev_private;
@@ -810,15 +572,12 @@ mlx5_flow_meter_params_flush(struct rte_eth_dev *dev,
legacy_fm = container_of(fm, struct mlx5_legacy_flow_meter, fm);
TAILQ_REMOVE(fms, legacy_fm, next);
}
- /* Free policer counters. */
- if (fm->policer_stats.pass_cnt)
- mlx5_counter_free(dev, fm->policer_stats.pass_cnt);
- if (fm->policer_stats.drop_cnt)
- mlx5_counter_free(dev, fm->policer_stats.drop_cnt);
+ /* Free drop counters. */
+ if (fm->drop_cnt)
+ mlx5_counter_free(dev, fm->drop_cnt);
/* Free meter flow table. */
if (fm->flow_ipool)
mlx5_ipool_destroy(fm->flow_ipool);
- mlx5_flow_destroy_policer_rules(dev, fm, attr);
mlx5_flow_destroy_mtr_tbls(dev, fm->mfts);
if (priv->sh->meter_aso_en)
mlx5_flow_mtr_free(dev, mtr_idx);
@@ -847,11 +606,6 @@ mlx5_flow_meter_destroy(struct rte_eth_dev *dev, uint32_t meter_id,
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_flow_meter_info *fm;
- const struct rte_flow_attr attr = {
- .ingress = 1,
- .egress = 1,
- .transfer = priv->config.dv_esw_en ? 1 : 0,
- };
uint32_t mtr_idx = 0;
if (!priv->mtr_en)
@@ -876,7 +630,7 @@ mlx5_flow_meter_destroy(struct rte_eth_dev *dev, uint32_t meter_id,
"Fail to delete ASO Meter in index table.");
}
/* Destroy the meter profile. */
- if (mlx5_flow_meter_params_flush(dev, fm, &attr, mtr_idx))
+ if (mlx5_flow_meter_params_flush(dev, fm, mtr_idx))
return -rte_mtr_error_set(error, EINVAL,
RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
NULL, "MTR object meter profile invalid.");
@@ -1102,13 +856,6 @@ mlx5_flow_meter_stats_update(struct rte_eth_dev *dev,
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_flow_meter_info *fm;
- const struct rte_flow_attr attr = {
- .ingress = 1,
- .egress = 1,
- .transfer = priv->config.dv_esw_en ? 1 : 0,
- };
- bool need_updated = false;
- struct mlx5_flow_policer_stats old_policer_stats;
if (!priv->mtr_en)
return -rte_mtr_error_set(error, ENOTSUP,
@@ -1120,69 +867,6 @@ mlx5_flow_meter_stats_update(struct rte_eth_dev *dev,
return -rte_mtr_error_set(error, ENOENT,
RTE_MTR_ERROR_TYPE_MTR_ID,
NULL, "Meter object id not valid.");
- old_policer_stats.pass_cnt = 0;
- old_policer_stats.drop_cnt = 0;
- if (!!((RTE_MTR_STATS_N_PKTS_GREEN |
- RTE_MTR_STATS_N_BYTES_GREEN) & stats_mask) !=
- !!fm->policer_stats.pass_cnt) {
- need_updated = true;
- if (fm->policer_stats.pass_cnt) {
- old_policer_stats.pass_cnt = fm->policer_stats.pass_cnt;
- fm->policer_stats.pass_cnt = 0;
- } else {
- fm->policer_stats.pass_cnt =
- mlx5_counter_alloc(dev);
- if (!fm->policer_stats.pass_cnt)
- return -rte_mtr_error_set(error, ENOMEM,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
- "Counter alloc failed for meter.");
- }
- }
- if (!!((RTE_MTR_STATS_N_PKTS_RED | RTE_MTR_STATS_N_BYTES_RED |
- RTE_MTR_STATS_N_PKTS_DROPPED | RTE_MTR_STATS_N_BYTES_DROPPED) &
- stats_mask) !=
- !!fm->policer_stats.drop_cnt) {
- need_updated = true;
- if (fm->policer_stats.drop_cnt) {
- old_policer_stats.drop_cnt = fm->policer_stats.drop_cnt;
- fm->policer_stats.drop_cnt = 0;
- } else {
- fm->policer_stats.drop_cnt =
- mlx5_counter_alloc(dev);
- if (!fm->policer_stats.drop_cnt)
- return -rte_mtr_error_set(error, ENOMEM,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED, NULL,
- "Counter alloc failed for meter.");
- }
- }
- if (need_updated) {
- if (mlx5_flow_prepare_policer_rules(dev, fm, &attr)) {
- if (fm->policer_stats.pass_cnt &&
- fm->policer_stats.pass_cnt !=
- old_policer_stats.pass_cnt)
- mlx5_counter_free(dev,
- fm->policer_stats.pass_cnt);
- fm->policer_stats.pass_cnt =
- old_policer_stats.pass_cnt;
- if (fm->policer_stats.drop_cnt &&
- fm->policer_stats.drop_cnt !=
- old_policer_stats.drop_cnt)
- mlx5_counter_free(dev,
- fm->policer_stats.drop_cnt);
- fm->policer_stats.pass_cnt =
- old_policer_stats.pass_cnt;
- return -rte_mtr_error_set(error, ENOTSUP,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED,
- NULL, "Failed to create meter policer rules.");
- }
- /* Free old policer counters. */
- if (old_policer_stats.pass_cnt)
- mlx5_counter_free(dev,
- old_policer_stats.pass_cnt);
- if (old_policer_stats.drop_cnt)
- mlx5_counter_free(dev,
- old_policer_stats.drop_cnt);
- }
mlx5_flow_meter_stats_enable_update(fm, stats_mask);
return 0;
}
@@ -1216,7 +900,6 @@ mlx5_flow_meter_stats_read(struct rte_eth_dev *dev,
{
struct mlx5_priv *priv = dev->data->dev_private;
struct mlx5_flow_meter_info *fm;
- struct mlx5_flow_policer_stats *ps;
uint64_t pkts;
uint64_t bytes;
int ret = 0;
@@ -1231,35 +914,14 @@ mlx5_flow_meter_stats_read(struct rte_eth_dev *dev,
return -rte_mtr_error_set(error, ENOENT,
RTE_MTR_ERROR_TYPE_MTR_ID,
NULL, "Meter object id not valid.");
- ps = &fm->policer_stats;
*stats_mask = 0;
- if (fm->green_bytes)
- *stats_mask |= RTE_MTR_STATS_N_BYTES_GREEN;
- if (fm->green_pkts)
- *stats_mask |= RTE_MTR_STATS_N_PKTS_GREEN;
- if (fm->red_bytes)
- *stats_mask |= RTE_MTR_STATS_N_BYTES_RED;
- if (fm->red_pkts)
- *stats_mask |= RTE_MTR_STATS_N_PKTS_RED;
if (fm->bytes_dropped)
*stats_mask |= RTE_MTR_STATS_N_BYTES_DROPPED;
if (fm->pkts_dropped)
*stats_mask |= RTE_MTR_STATS_N_PKTS_DROPPED;
memset(stats, 0, sizeof(*stats));
- if (ps->pass_cnt) {
- ret = mlx5_counter_query(dev, ps->pass_cnt, clear, &pkts,
- &bytes);
- if (ret)
- goto error;
- /* If need to read the packets, set it. */
- if (fm->green_pkts)
- stats->n_pkts[RTE_COLOR_GREEN] = pkts;
- /* If need to read the bytes, set it. */
- if (fm->green_bytes)
- stats->n_bytes[RTE_COLOR_GREEN] = bytes;
- }
- if (ps->drop_cnt) {
- ret = mlx5_counter_query(dev, ps->drop_cnt, clear, &pkts,
+ if (fm->drop_cnt) {
+ ret = mlx5_counter_query(dev, fm->drop_cnt, clear, &pkts,
&bytes);
if (ret)
goto error;
@@ -1273,20 +935,18 @@ mlx5_flow_meter_stats_read(struct rte_eth_dev *dev,
return 0;
error:
return -rte_mtr_error_set(error, ret, RTE_MTR_ERROR_TYPE_STATS, NULL,
- "Failed to read policer counters.");
+ "Failed to read meter drop counters.");
}
static const struct rte_mtr_ops mlx5_flow_mtr_ops = {
.capabilities_get = mlx5_flow_mtr_cap_get,
.meter_profile_add = mlx5_flow_meter_profile_add,
.meter_profile_delete = mlx5_flow_meter_profile_delete,
- .create = mlx5_flow_meter_create,
.destroy = mlx5_flow_meter_destroy,
.meter_enable = mlx5_flow_meter_enable,
.meter_disable = mlx5_flow_meter_disable,
.meter_profile_update = mlx5_flow_meter_profile_update,
.meter_dscp_table_update = NULL,
- .policer_actions_update = NULL,
.stats_update = mlx5_flow_meter_stats_update,
.stats_read = mlx5_flow_meter_stats_read,
};
@@ -1344,12 +1004,11 @@ mlx5_flow_meter_find(struct mlx5_priv *priv, uint32_t meter_id,
aso_mtr = mlx5_aso_meter_by_idx(priv, data.dword);
/* Remove reference taken by the mlx5_l3t_get_entry. */
mlx5_l3t_clear_entry(priv->mtr_idx_tbl, meter_id);
- MLX5_ASSERT(meter_id == aso_mtr->fm.meter_id);
rte_spinlock_unlock(&mtrmng->mtrsl);
return &aso_mtr->fm;
}
TAILQ_FOREACH(legacy_fm, fms, next)
- if (meter_id == legacy_fm->fm.meter_id) {
+ if (meter_id == legacy_fm->meter_id) {
if (mtr_idx)
*mtr_idx = legacy_fm->idx;
return &legacy_fm->fm;
@@ -1517,11 +1176,6 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error)
struct mlx5_legacy_flow_meter *legacy_fm;
struct mlx5_flow_meter_info *fm;
struct mlx5_aso_mtr_pool *mtr_pool;
- const struct rte_flow_attr attr = {
- .ingress = 1,
- .egress = 1,
- .transfer = priv->config.dv_esw_en ? 1 : 0,
- };
void *tmp;
uint32_t i, offset, mtr_idx;
@@ -1533,9 +1187,8 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error)
offset++) {
fm = &mtr_pool->mtrs[offset].fm;
mtr_idx = MLX5_MAKE_MTR_IDX(i, offset);
- if (fm->meter_id != UINT32_MAX &&
- mlx5_flow_meter_params_flush(dev,
- fm, &attr, mtr_idx))
+ if (mlx5_flow_meter_params_flush(dev,
+ fm, mtr_idx))
return -rte_mtr_error_set
(error, EINVAL,
RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
@@ -1545,7 +1198,7 @@ mlx5_flow_meter_flush(struct rte_eth_dev *dev, struct rte_mtr_error *error)
} else {
TAILQ_FOREACH_SAFE(legacy_fm, fms, next, tmp) {
fm = &legacy_fm->fm;
- if (mlx5_flow_meter_params_flush(dev, fm, &attr, 0))
+ if (mlx5_flow_meter_params_flush(dev, fm, 0))
return -rte_mtr_error_set(error, EINVAL,
RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
NULL, "MTR object meter profile invalid.");
diff --git a/drivers/net/softnic/rte_eth_softnic_flow.c b/drivers/net/softnic/rte_eth_softnic_flow.c
index 7925bad1c0..27eaf380cd 100644
--- a/drivers/net/softnic/rte_eth_softnic_flow.c
+++ b/drivers/net/softnic/rte_eth_softnic_flow.c
@@ -1166,6 +1166,7 @@ flow_rule_action_get(struct pmd_internals *softnic,
{
struct softnic_table_action_profile *profile;
struct softnic_table_action_profile_params *params;
+ struct softnic_mtr_meter_policy *policy;
int n_jump_queue_rss_drop = 0;
int n_count = 0;
int n_mark = 0;
@@ -1621,15 +1622,25 @@ flow_rule_action_get(struct pmd_internals *softnic,
return -1;
}
}
-
+ /* Meter policy must exist */
+ policy = softnic_mtr_meter_policy_find(softnic,
+ m->params.meter_policy_id);
+ if (policy == NULL) {
+ rte_flow_error_set(error,
+ EINVAL,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL,
+ "METER: fail to find meter policy");
+ return -1;
+ }
/* RTE_TABLE_ACTION_METER */
rule_action->mtr.mtr[0].meter_profile_id = meter_profile_id;
rule_action->mtr.mtr[0].policer[RTE_COLOR_GREEN] =
- softnic_table_action_policer(m->params.action[RTE_COLOR_GREEN]);
+ policy->policer[RTE_COLOR_GREEN];
rule_action->mtr.mtr[0].policer[RTE_COLOR_YELLOW] =
- softnic_table_action_policer(m->params.action[RTE_COLOR_YELLOW]);
+ policy->policer[RTE_COLOR_YELLOW];
rule_action->mtr.mtr[0].policer[RTE_COLOR_RED] =
- softnic_table_action_policer(m->params.action[RTE_COLOR_RED]);
+ policy->policer[RTE_COLOR_RED];
rule_action->mtr.tc_mask = 1;
rule_action->action_mask |= 1 << RTE_TABLE_ACTION_MTR;
break;
diff --git a/drivers/net/softnic/rte_eth_softnic_internals.h b/drivers/net/softnic/rte_eth_softnic_internals.h
index faf90a5a8c..1b3186ef0b 100644
--- a/drivers/net/softnic/rte_eth_softnic_internals.h
+++ b/drivers/net/softnic/rte_eth_softnic_internals.h
@@ -83,6 +83,16 @@ struct softnic_mtr_meter_profile {
TAILQ_HEAD(softnic_mtr_meter_profile_list, softnic_mtr_meter_profile);
+/* MTR meter policy */
+struct softnic_mtr_meter_policy {
+ TAILQ_ENTRY(softnic_mtr_meter_policy) node;
+ uint32_t meter_policy_id;
+ enum rte_table_action_policer policer[RTE_COLORS];
+ uint32_t n_users;
+};
+
+TAILQ_HEAD(softnic_mtr_meter_policy_list, softnic_mtr_meter_policy);
+
/* MTR meter object */
struct softnic_mtr {
TAILQ_ENTRY(softnic_mtr) node;
@@ -95,6 +105,7 @@ TAILQ_HEAD(softnic_mtr_list, softnic_mtr);
struct mtr_internals {
struct softnic_mtr_meter_profile_list meter_profiles;
+ struct softnic_mtr_meter_policy_list meter_policies;
struct softnic_mtr_list mtrs;
};
@@ -678,6 +689,10 @@ struct softnic_mtr_meter_profile *
softnic_mtr_meter_profile_find(struct pmd_internals *p,
uint32_t meter_profile_id);
+struct softnic_mtr_meter_policy *
+softnic_mtr_meter_policy_find(struct pmd_internals *p,
+ uint32_t meter_policy_id);
+
extern const struct rte_mtr_ops pmd_mtr_ops;
/**
@@ -841,9 +856,6 @@ softnic_table_action_profile_create(struct pmd_internals *p,
const char *name,
struct softnic_table_action_profile_params *params);
-enum rte_table_action_policer
-softnic_table_action_policer(enum rte_mtr_policer_action action);
-
/**
* Pipeline
*/
diff --git a/drivers/net/softnic/rte_eth_softnic_meter.c b/drivers/net/softnic/rte_eth_softnic_meter.c
index 31a2a0e6d9..99f5291556 100644
--- a/drivers/net/softnic/rte_eth_softnic_meter.c
+++ b/drivers/net/softnic/rte_eth_softnic_meter.c
@@ -65,27 +65,6 @@ softnic_mtr_meter_profile_find(struct pmd_internals *p,
return NULL;
}
-enum rte_table_action_policer
-softnic_table_action_policer(enum rte_mtr_policer_action action)
-{
- switch (action) {
- case MTR_POLICER_ACTION_COLOR_GREEN:
- return RTE_TABLE_ACTION_POLICER_COLOR_GREEN;
-
- /* FALLTHROUGH */
- case MTR_POLICER_ACTION_COLOR_YELLOW:
- return RTE_TABLE_ACTION_POLICER_COLOR_YELLOW;
-
- /* FALLTHROUGH */
- case MTR_POLICER_ACTION_COLOR_RED:
- return RTE_TABLE_ACTION_POLICER_COLOR_RED;
-
- /* FALLTHROUGH */
- default:
- return RTE_TABLE_ACTION_POLICER_DROP;
- }
-}
-
static int
meter_profile_check(struct rte_eth_dev *dev,
uint32_t meter_profile_id,
@@ -200,6 +179,129 @@ pmd_mtr_meter_profile_delete(struct rte_eth_dev *dev,
return 0;
}
+struct softnic_mtr_meter_policy *
+softnic_mtr_meter_policy_find(struct pmd_internals *p,
+ uint32_t meter_policy_id)
+{
+ struct softnic_mtr_meter_policy_list *mpl = &p->mtr.meter_policies;
+ struct softnic_mtr_meter_policy *mp;
+
+ TAILQ_FOREACH(mp, mpl, node)
+ if (meter_policy_id == mp->meter_policy_id)
+ return mp;
+
+ return NULL;
+}
+
+/* MTR meter policy create */
+static int
+pmd_mtr_meter_policy_create(struct rte_eth_dev *dev,
+ uint32_t meter_policy_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error)
+{
+ struct pmd_internals *p = dev->data->dev_private;
+ struct softnic_mtr_meter_policy_list *mpl = &p->mtr.meter_policies;
+ struct softnic_mtr_meter_policy *mp;
+ const struct rte_flow_action *act;
+ const struct rte_flow_action_color *recolor;
+ uint32_t i;
+
+ /* Meter policy ID must be valid. */
+ if (meter_policy_id == UINT32_MAX)
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "Meter policy id not valid");
+
+ for (i = 0; i < RTE_COLORS; i++) {
+ act = actions[i];
+ if (act && act->type != RTE_FLOW_ACTION_TYPE_METER_COLOR &&
+ act->type != RTE_FLOW_ACTION_TYPE_DROP)
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
+ NULL,
+ "Action invalid");
+ }
+
+ /* Memory allocation */
+ mp = calloc(1, sizeof(struct softnic_mtr_meter_policy));
+ if (mp == NULL)
+ return -rte_mtr_error_set(error,
+ ENOMEM,
+ RTE_MTR_ERROR_TYPE_UNSPECIFIED,
+ NULL,
+ "Memory alloc failed");
+
+ /* Fill in */
+ mp->meter_policy_id = meter_policy_id;
+ for (i = 0; i < RTE_COLORS; i++) {
+ mp->policer[i] = RTE_TABLE_ACTION_POLICER_DROP;
+ act = actions[i];
+ if (!act)
+ continue;
+ if (act->type == RTE_FLOW_ACTION_TYPE_METER_COLOR) {
+ recolor = act->conf;
+ switch (recolor->color) {
+ case RTE_COLOR_GREEN:
+ mp->policer[i] =
+ RTE_TABLE_ACTION_POLICER_COLOR_GREEN;
+ break;
+ case RTE_COLOR_YELLOW:
+ mp->policer[i] =
+ RTE_TABLE_ACTION_POLICER_COLOR_YELLOW;
+ break;
+ case RTE_COLOR_RED:
+ mp->policer[i] =
+ RTE_TABLE_ACTION_POLICER_COLOR_RED;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /* Add to list */
+ TAILQ_INSERT_TAIL(mpl, mp, node);
+
+ return 0;
+}
+
+/* MTR meter policy delete */
+static int
+pmd_mtr_meter_policy_delete(struct rte_eth_dev *dev,
+ uint32_t meter_policy_id,
+ struct rte_mtr_error *error)
+{
+ struct pmd_internals *p = dev->data->dev_private;
+ struct softnic_mtr_meter_policy *mp;
+
+ /* Meter policy must exist */
+ mp = softnic_mtr_meter_policy_find(p, meter_policy_id);
+ if (mp == NULL)
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "Meter policy id invalid");
+
+ /* Check unused */
+ if (mp->n_users)
+ return -rte_mtr_error_set(error,
+ EBUSY,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "Meter policy in use");
+
+ /* Remove from list */
+ TAILQ_REMOVE(&p->mtr.meter_policies, mp, node);
+ free(mp);
+
+ return 0;
+}
+
struct softnic_mtr *
softnic_mtr_find(struct pmd_internals *p, uint32_t mtr_id)
{
@@ -267,8 +369,13 @@ pmd_mtr_create(struct rte_eth_dev *dev,
struct pmd_internals *p = dev->data->dev_private;
struct softnic_mtr_list *ml = &p->mtr.mtrs;
struct softnic_mtr_meter_profile *mp;
+ struct softnic_mtr_meter_policy *policy;
struct softnic_mtr *m;
int status;
+ struct rte_flow_action actions[RTE_COLORS];
+ struct rte_flow_action_color recolor[RTE_COLORS];
+ const struct rte_flow_action *acts[RTE_COLORS];
+ enum rte_color i;
/* Check parameters */
status = mtr_check(p, mtr_id, params, shared, error);
@@ -283,6 +390,46 @@ pmd_mtr_create(struct rte_eth_dev *dev,
RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
NULL,
"Meter profile id not valid");
+ /* Meter policy must exist */
+ policy = softnic_mtr_meter_policy_find(p, params->meter_policy_id);
+ if (policy == NULL) {
+ /* Create default policy */
+ if (params->meter_policy_id == RTE_MTR_DEFAULT_POLICY_ID) {
+ /* Green - do nothing, yellow - do nothing.*/
+ for (i = 0; i < RTE_COLOR_RED; i++) {
+ actions[i].type =
+ RTE_FLOW_ACTION_TYPE_METER_COLOR;
+ recolor[i].color = i;
+ actions[i].conf = &recolor[i];
+ acts[i] = &actions[i];
+ }
+ /* Red - drop.*/
+ actions[RTE_COLOR_RED].type =
+ RTE_FLOW_ACTION_TYPE_DROP;
+ acts[RTE_COLOR_RED] = &actions[RTE_COLOR_RED];
+ status = pmd_mtr_meter_policy_create(dev,
+ RTE_MTR_DEFAULT_POLICY_ID,
+ acts,
+ error);
+ if (status)
+ return status;
+
+ policy = softnic_mtr_meter_policy_find(p,
+ params->meter_policy_id);
+ if (policy == NULL)
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "Fail to find meter default policy");
+ } else {
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "Meter policy id invalid");
+ }
+ }
/* Memory allocation */
m = calloc(1, sizeof(struct softnic_mtr));
@@ -302,6 +449,7 @@ pmd_mtr_create(struct rte_eth_dev *dev,
/* Update dependencies */
mp->n_users++;
+ policy->n_users++;
return 0;
}
@@ -316,6 +464,8 @@ pmd_mtr_destroy(struct rte_eth_dev *dev,
struct softnic_mtr_list *ml = &p->mtr.mtrs;
struct softnic_mtr_meter_profile *mp;
struct softnic_mtr *m;
+ struct softnic_mtr_meter_policy *policy;
+ int status;
/* MTR object must exist */
m = softnic_mtr_find(p, mtr_id);
@@ -343,8 +493,28 @@ pmd_mtr_destroy(struct rte_eth_dev *dev,
NULL,
"MTR object meter profile invalid");
+ /* Meter policy must exist */
+ policy = softnic_mtr_meter_policy_find(p, m->params.meter_policy_id);
+ if (policy == NULL)
+ return -rte_mtr_error_set(error,
+ EINVAL,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ NULL,
+ "MTR object meter policy invalid");
+
/* Update dependencies */
mp->n_users--;
+ policy->n_users--;
+
+ /* Destory default policy*/
+ if (!policy->n_users &&
+ m->params.meter_policy_id == RTE_MTR_DEFAULT_POLICY_ID) {
+ status = pmd_mtr_meter_policy_delete(dev,
+ RTE_MTR_DEFAULT_POLICY_ID,
+ error);
+ if (status)
+ return status;
+ }
/* Remove from list */
TAILQ_REMOVE(ml, m, node);
@@ -506,18 +676,18 @@ pmd_mtr_meter_dscp_table_update(struct rte_eth_dev *dev,
return 0;
}
-/* MTR object policer action update */
+/* MTR object policy update */
static int
-pmd_mtr_policer_actions_update(struct rte_eth_dev *dev,
+pmd_mtr_meter_policy_update(struct rte_eth_dev *dev,
uint32_t mtr_id,
- uint32_t action_mask,
- enum rte_mtr_policer_action *actions,
+ uint32_t meter_policy_id,
struct rte_mtr_error *error)
{
struct pmd_internals *p = dev->data->dev_private;
struct softnic_mtr *m;
uint32_t i;
int status;
+ struct softnic_mtr_meter_policy *mp_new, *mp_old;
/* MTR object id must be valid */
m = softnic_mtr_find(p, mtr_id);
@@ -527,29 +697,14 @@ pmd_mtr_policer_actions_update(struct rte_eth_dev *dev,
RTE_MTR_ERROR_TYPE_MTR_ID,
NULL,
"MTR object id not valid");
-
- /* Valid policer actions */
- if (actions == NULL)
+ /* Meter policy must exist */
+ mp_new = softnic_mtr_meter_policy_find(p, meter_policy_id);
+ if (mp_new == NULL)
return -rte_mtr_error_set(error,
EINVAL,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
NULL,
- "Invalid actions");
-
- for (i = 0; i < RTE_COLORS; i++) {
- if (action_mask & (1 << i)) {
- if (actions[i] != MTR_POLICER_ACTION_COLOR_GREEN &&
- actions[i] != MTR_POLICER_ACTION_COLOR_YELLOW &&
- actions[i] != MTR_POLICER_ACTION_COLOR_RED &&
- actions[i] != MTR_POLICER_ACTION_DROP) {
- return -rte_mtr_error_set(error,
- EINVAL,
- RTE_MTR_ERROR_TYPE_UNSPECIFIED,
- NULL,
- " Invalid action value");
- }
- }
- }
+ "Meter policy id invalid");
/* MTR object owner valid? */
if (m->flow) {
@@ -561,9 +716,7 @@ pmd_mtr_policer_actions_update(struct rte_eth_dev *dev,
/* Set action */
for (i = 0; i < RTE_COLORS; i++)
- if (action_mask & (1 << i))
- action.mtr.mtr[0].policer[i] =
- softnic_table_action_policer(actions[i]);
+ action.mtr.mtr[0].policer[i] = mp_new->policer[i];
/* Re-add the rule */
status = softnic_pipeline_table_rule_add(p,
@@ -587,10 +740,14 @@ pmd_mtr_policer_actions_update(struct rte_eth_dev *dev,
1, NULL, 1);
}
- /* Meter: Update policer actions */
- for (i = 0; i < RTE_COLORS; i++)
- if (action_mask & (1 << i))
- m->params.action[i] = actions[i];
+ mp_old = softnic_mtr_meter_policy_find(p, m->params.meter_policy_id);
+
+ /* Meter: Set meter profile */
+ m->params.meter_policy_id = meter_policy_id;
+
+ /* Update dependencies*/
+ mp_old->n_users--;
+ mp_new->n_users++;
return 0;
}
@@ -607,28 +764,40 @@ pmd_mtr_policer_actions_update(struct rte_eth_dev *dev,
/* MTR object stats read */
static void
-mtr_stats_convert(struct softnic_mtr *m,
+mtr_stats_convert(struct pmd_internals *p,
+ struct softnic_mtr *m,
struct rte_table_action_mtr_counters_tc *in,
struct rte_mtr_stats *out,
uint64_t *out_mask)
{
+ struct softnic_mtr_meter_policy *mp;
+
memset(&out, 0, sizeof(out));
*out_mask = 0;
+ /* Meter policy must exist */
+ mp = softnic_mtr_meter_policy_find(p, m->params.meter_policy_id);
+ if (mp == NULL)
+ return;
+
if (in->n_packets_valid) {
uint32_t i;
for (i = 0; i < RTE_COLORS; i++) {
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_GREEN)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_GREEN)
out->n_pkts[RTE_COLOR_GREEN] += in->n_packets[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_YELLOW)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_YELLOW)
out->n_pkts[RTE_COLOR_YELLOW] += in->n_packets[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_RED)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_RED)
out->n_pkts[RTE_COLOR_RED] += in->n_packets[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_DROP)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_DROP)
out->n_pkts_dropped += in->n_packets[i];
}
@@ -639,16 +808,20 @@ mtr_stats_convert(struct softnic_mtr *m,
uint32_t i;
for (i = 0; i < RTE_COLORS; i++) {
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_GREEN)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_GREEN)
out->n_bytes[RTE_COLOR_GREEN] += in->n_bytes[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_YELLOW)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_YELLOW)
out->n_bytes[RTE_COLOR_YELLOW] += in->n_bytes[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_COLOR_RED)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_COLOR_RED)
out->n_bytes[RTE_COLOR_RED] += in->n_bytes[i];
- if (m->params.action[i] == MTR_POLICER_ACTION_DROP)
+ if (mp->policer[i] ==
+ RTE_TABLE_ACTION_POLICER_DROP)
out->n_bytes_dropped += in->n_bytes[i];
}
@@ -714,7 +887,8 @@ pmd_mtr_stats_read(struct rte_eth_dev *dev,
struct rte_mtr_stats s;
uint64_t s_mask = 0;
- mtr_stats_convert(m,
+ mtr_stats_convert(p,
+ m,
&counters.stats[0],
&s,
&s_mask);
@@ -735,6 +909,9 @@ const struct rte_mtr_ops pmd_mtr_ops = {
.meter_profile_add = pmd_mtr_meter_profile_add,
.meter_profile_delete = pmd_mtr_meter_profile_delete,
+ .meter_policy_create = pmd_mtr_meter_policy_create,
+ .meter_policy_delete = pmd_mtr_meter_policy_delete,
+
.create = pmd_mtr_create,
.destroy = pmd_mtr_destroy,
.meter_enable = NULL,
@@ -742,7 +919,7 @@ const struct rte_mtr_ops pmd_mtr_ops = {
.meter_profile_update = pmd_mtr_meter_profile_update,
.meter_dscp_table_update = pmd_mtr_meter_dscp_table_update,
- .policer_actions_update = pmd_mtr_policer_actions_update,
+ .meter_policy_update = pmd_mtr_meter_policy_update,
.stats_update = NULL,
.stats_read = pmd_mtr_stats_read,
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 6cc57136ac..60fede4983 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -32,6 +32,7 @@
#include <rte_ecpri.h>
#include <rte_mbuf.h>
#include <rte_mbuf_dyn.h>
+#include <rte_meter.h>
#ifdef __cplusplus
extern "C" {
@@ -2267,6 +2268,13 @@ enum rte_flow_action_type {
* See struct rte_flow_action_modify_field.
*/
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
+
+ /**
+ * Color the packet to reflect the meter color result.
+ *
+ * See struct rte_flow_action_color.
+ */
+ RTE_FLOW_ACTION_TYPE_METER_COLOR,
};
/**
@@ -2859,6 +2867,16 @@ struct rte_flow_action_set_dscp {
*/
struct rte_flow_shared_action;
+/**
+ * RTE_FLOW_ACTION_TYPE_COLOR
+ *
+ * The meter color should be set in the packet meta-data
+ * (i.e. struct rte_mbuf::sched::color).
+ */
+struct rte_flow_action_color {
+ enum rte_color color; /**< Green/Yellow/Red. */
+};
+
/**
* Field IDs for MODIFY_FIELD action.
*/
diff --git a/lib/librte_ethdev/rte_mtr.c b/lib/librte_ethdev/rte_mtr.c
index 3073ac03f2..27041467c5 100644
--- a/lib/librte_ethdev/rte_mtr.c
+++ b/lib/librte_ethdev/rte_mtr.c
@@ -91,6 +91,40 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
meter_profile_id, error);
}
+/* MTR meter policy validate */
+int
+rte_mtr_meter_policy_validate(uint16_t port_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error)
+{
+ struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+ return RTE_MTR_FUNC(port_id, meter_policy_validate)(dev,
+ actions, error);
+}
+
+/* MTR meter policy create */
+int
+rte_mtr_meter_policy_create(uint16_t port_id,
+ uint32_t policy_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error)
+{
+ struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+ return RTE_MTR_FUNC(port_id, meter_policy_create)(dev,
+ policy_id, actions, error);
+}
+
+/** MTR meter policy delete */
+int
+rte_mtr_meter_policy_delete(uint16_t port_id,
+ uint32_t policy_id,
+ struct rte_mtr_error *error)
+{
+ struct rte_eth_dev *dev = &rte_eth_devices[port_id];
+ return RTE_MTR_FUNC(port_id, meter_policy_delete)(dev,
+ policy_id, error);
+}
+
/** MTR object create */
int
rte_mtr_create(uint16_t port_id,
@@ -149,29 +183,28 @@ rte_mtr_meter_profile_update(uint16_t port_id,
mtr_id, meter_profile_id, error);
}
-/** MTR object meter DSCP table update */
+/** MTR object meter policy update */
int
-rte_mtr_meter_dscp_table_update(uint16_t port_id,
+rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
- enum rte_color *dscp_table,
+ uint32_t meter_policy_id,
struct rte_mtr_error *error)
{
struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- return RTE_MTR_FUNC(port_id, meter_dscp_table_update)(dev,
- mtr_id, dscp_table, error);
+ return RTE_MTR_FUNC(port_id, meter_policy_update)(dev,
+ mtr_id, meter_policy_id, error);
}
-/** MTR object policer action update */
+/** MTR object meter DSCP table update */
int
-rte_mtr_policer_actions_update(uint16_t port_id,
+rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id,
- uint32_t action_mask,
- enum rte_mtr_policer_action *actions,
+ enum rte_color *dscp_table,
struct rte_mtr_error *error)
{
struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- return RTE_MTR_FUNC(port_id, policer_actions_update)(dev,
- mtr_id, action_mask, actions, error);
+ return RTE_MTR_FUNC(port_id, meter_dscp_table_update)(dev,
+ mtr_id, dscp_table, error);
}
/** MTR object enabled stats update */
diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h
index 916a09c5c3..50b343dd27 100644
--- a/lib/librte_ethdev/rte_mtr.h
+++ b/lib/librte_ethdev/rte_mtr.h
@@ -49,6 +49,7 @@
#include <rte_compat.h>
#include <rte_common.h>
#include <rte_meter.h>
+#include <rte_flow.h>
#ifdef __cplusplus
extern "C" {
@@ -174,23 +175,6 @@ struct rte_mtr_meter_profile {
};
};
-/**
- * Policer actions
- */
-enum rte_mtr_policer_action {
- /** Recolor the packet as green. */
- MTR_POLICER_ACTION_COLOR_GREEN = 0,
-
- /** Recolor the packet as yellow. */
- MTR_POLICER_ACTION_COLOR_YELLOW,
-
- /** Recolor the packet as red. */
- MTR_POLICER_ACTION_COLOR_RED,
-
- /** Drop the packet. */
- MTR_POLICER_ACTION_DROP,
-};
-
/**
* Parameters for each traffic metering & policing object
*
@@ -232,13 +216,13 @@ struct rte_mtr_params {
*/
int meter_enable;
- /** Policer actions (per meter output color). */
- enum rte_mtr_policer_action action[RTE_COLORS];
-
/** Set of stats counters to be enabled.
* @see enum rte_mtr_stats_type
*/
uint64_t stats_mask;
+
+ /** Meter policy ID. */
+ uint32_t meter_policy_id;
};
/**
@@ -324,6 +308,13 @@ struct rte_mtr_capabilities {
*/
uint64_t meter_rate_max;
+ /**
+ * Maximum number of policy objects that can have.
+ * The value of 0 is invalid. Policy must be supported for meter.
+ * The maximum value is *n_max*.
+ */
+ uint64_t meter_policy_n_max;
+
/**
* When non-zero, it indicates that color aware mode is supported for
* the srTCM RFC 2697 metering algorithm.
@@ -342,18 +333,6 @@ struct rte_mtr_capabilities {
*/
int color_aware_trtcm_rfc4115_supported;
- /** When non-zero, it indicates that the policer packet recolor actions
- * are supported.
- * @see enum rte_mtr_policer_action
- */
- int policer_action_recolor_supported;
-
- /** When non-zero, it indicates that the policer packet drop action is
- * supported.
- * @see enum rte_mtr_policer_action
- */
- int policer_action_drop_supported;
-
/** Set of supported statistics counter types.
* @see enum rte_mtr_stats_type
*/
@@ -379,6 +358,8 @@ enum rte_mtr_error_type {
RTE_MTR_ERROR_TYPE_STATS_MASK,
RTE_MTR_ERROR_TYPE_STATS,
RTE_MTR_ERROR_TYPE_SHARED,
+ RTE_MTR_ERROR_TYPE_METER_POLICY_ID,
+ RTE_MTR_ERROR_TYPE_METER_POLICY,
};
/**
@@ -462,6 +443,92 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
uint32_t meter_profile_id,
struct rte_mtr_error *error);
+/**
+ * Policy id 0 is default policy.
+ * Action per color as below:
+ * green - do nothing, yellow - do nothing, red - drop
+ * It can be used without creating it by
+ * the rte_mtr_meter_policy_create function.
+ */
+#define RTE_MTR_DEFAULT_POLICY_ID 0
+
+/**
+ * Check whether a meter policy can be created on a given port.
+ *
+ * The meter policy is validated for correctness and
+ * whether it could be accepted by the device given sufficient resources.
+ * The policy is checked against the current capability information
+ * meter_policy_n_max configuration.
+ * The policy may also optionally be validated against existing
+ * device policy resources.
+ * This function has no effect on the target device.
+ *
+ * @param[in] port_id
+ * The port identifier of the Ethernet device.
+ * @param[in] actions
+ * Associated action list per color.
+ * list NULL is legal and means no special action.
+ * (list terminated by the END action).
+ * @param[out] error
+ * Error details. Filled in only on error, when not NULL.
+ *
+ * @return
+ * 0 on success, non-zero error code otherwise.
+ *
+ */
+__rte_experimental
+int
+rte_mtr_meter_policy_validate(uint16_t port_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error);
+
+/**
+ * Meter policy add
+ *
+ * Create a new meter policy. The new policy
+ * is used to create single or multiple MTR objects.
+ *
+ * @param[in] port_id
+ * The port identifier of the Ethernet device.
+ * @param[in] policy_id
+ * Policy identifier for the new meter policy.
+ * @param[in] actions
+ * Associated actions per color.
+ * list NULL is legal and means no special action.
+ * (list terminated by the END action).
+ * @param[out] error
+ * Error details. Filled in only on error, when not NULL.
+ * @return
+ * 0 on success, non-zero error code otherwise.
+ */
+__rte_experimental
+int
+rte_mtr_meter_policy_create(uint16_t port_id,
+ uint32_t policy_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error);
+
+/**
+ * Meter policy delete
+ *
+ * Delete an existing meter policy. This operation fails when there is
+ * currently at least one user (i.e. MTR object) of this policy.
+ *
+ * @param[in] port_id
+ * The port identifier of the Ethernet device.
+ * @param[in] policy_id
+ * Policy identifier.
+ * @param[out] error
+ * Error details. Filled in only on error, when not NULL.
+ * @return
+ * 0 on success, non-zero error code otherwise.
+ */
+__rte_experimental
+int
+rte_mtr_meter_policy_delete(uint16_t port_id,
+ uint32_t policy_id,
+ struct rte_mtr_error *error);
+
/**
* MTR object create
*
@@ -587,18 +654,14 @@ rte_mtr_meter_profile_update(uint16_t port_id,
struct rte_mtr_error *error);
/**
- * MTR object DSCP table update
+ * MTR object meter policy update
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] mtr_id
* MTR object ID. Needs to be valid.
- * @param[in] dscp_table
- * When non-NULL: it points to a pre-allocated and pre-populated table with
- * exactly 64 elements providing the input color for each value of the
- * IPv4/IPv6 Differentiated Services Code Point (DSCP) input packet field.
- * When NULL: it is equivalent to setting this parameter to an “all-green”
- * populated table (i.e. table with all the 64 elements set to green color).
+ * @param[in] meter_policy_id
+ * Meter policy ID for the current MTR object. Needs to be valid.
* @param[out] error
* Error details. Filled in only on error, when not NULL.
* @return
@@ -606,26 +669,24 @@ rte_mtr_meter_profile_update(uint16_t port_id,
*/
__rte_experimental
int
-rte_mtr_meter_dscp_table_update(uint16_t port_id,
+rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
- enum rte_color *dscp_table,
+ uint32_t meter_policy_id,
struct rte_mtr_error *error);
/**
- * MTR object policer actions update
+ * MTR object DSCP table update
*
* @param[in] port_id
* The port identifier of the Ethernet device.
* @param[in] mtr_id
* MTR object ID. Needs to be valid.
- * @param[in] action_mask
- * Bit mask indicating which policer actions need to be updated. One or more
- * policer actions can be updated in a single function invocation. To update
- * the policer action associated with color C, bit (1 << C) needs to be set in
- * *action_mask* and element at position C in the *actions* array needs to be
- * valid.
- * @param[in] actions
- * Pre-allocated and pre-populated array of policer actions.
+ * @param[in] dscp_table
+ * When non-NULL: it points to a pre-allocated and pre-populated table with
+ * exactly 64 elements providing the input color for each value of the
+ * IPv4/IPv6 Differentiated Services Code Point (DSCP) input packet field.
+ * When NULL: it is equivalent to setting this parameter to an “all-green”
+ * populated table (i.e. table with all the 64 elements set to green color).
* @param[out] error
* Error details. Filled in only on error, when not NULL.
* @return
@@ -633,10 +694,9 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
*/
__rte_experimental
int
-rte_mtr_policer_actions_update(uint16_t port_id,
+rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id,
- uint32_t action_mask,
- enum rte_mtr_policer_action *actions,
+ enum rte_color *dscp_table,
struct rte_mtr_error *error);
/**
diff --git a/lib/librte_ethdev/rte_mtr_driver.h b/lib/librte_ethdev/rte_mtr_driver.h
index a0ddc2b5f4..98260ac40b 100644
--- a/lib/librte_ethdev/rte_mtr_driver.h
+++ b/lib/librte_ethdev/rte_mtr_driver.h
@@ -41,6 +41,22 @@ typedef int (*rte_mtr_meter_profile_delete_t)(struct rte_eth_dev *dev,
struct rte_mtr_error *error);
/**< @internal MTR meter profile delete */
+typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error);
+/**< @internal MTR meter policy validate */
+
+typedef int (*rte_mtr_meter_policy_create_t)(struct rte_eth_dev *dev,
+ uint32_t policy_id,
+ const struct rte_flow_action *actions[RTE_COLORS],
+ struct rte_mtr_error *error);
+/**< @internal MTR meter policy add */
+
+typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev,
+ uint32_t policy_id,
+ struct rte_mtr_error *error);
+/**< @internal MTR meter policy delete */
+
typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev,
uint32_t mtr_id,
struct rte_mtr_params *params,
@@ -69,18 +85,17 @@ typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev,
struct rte_mtr_error *error);
/**< @internal MTR object meter profile update */
-typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev,
+typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev,
uint32_t mtr_id,
- enum rte_color *dscp_table,
+ uint32_t meter_policy_id,
struct rte_mtr_error *error);
-/**< @internal MTR object meter DSCP table update */
+/**< @internal MTR object meter policy update */
-typedef int (*rte_mtr_policer_actions_update_t)(struct rte_eth_dev *dev,
+typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev,
uint32_t mtr_id,
- uint32_t action_mask,
- enum rte_mtr_policer_action *actions,
+ enum rte_color *dscp_table,
struct rte_mtr_error *error);
-/**< @internal MTR object policer action update*/
+/**< @internal MTR object meter DSCP table update */
typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev,
uint32_t mtr_id,
@@ -124,14 +139,23 @@ struct rte_mtr_ops {
/** MTR object meter DSCP table update */
rte_mtr_meter_dscp_table_update_t meter_dscp_table_update;
- /** MTR object policer action update */
- rte_mtr_policer_actions_update_t policer_actions_update;
-
/** MTR object enabled stats update */
rte_mtr_stats_update_t stats_update;
/** MTR object stats read */
rte_mtr_stats_read_t stats_read;
+
+ /** MTR meter policy validate */
+ rte_mtr_meter_policy_validate_t meter_policy_validate;
+
+ /** MTR meter policy create */
+ rte_mtr_meter_policy_create_t meter_policy_create;
+
+ /** MTR meter policy delete */
+ rte_mtr_meter_policy_delete_t meter_policy_delete;
+
+ /** MTR object meter policy update */
+ rte_mtr_meter_policy_update_t meter_policy_update;
};
/**
diff --git a/lib/librte_ethdev/version.map b/lib/librte_ethdev/version.map
index 93ad388e96..a45834b87f 100644
--- a/lib/librte_ethdev/version.map
+++ b/lib/librte_ethdev/version.map
@@ -246,6 +246,10 @@ EXPERIMENTAL {
# added in 21.05
rte_eth_representor_info_get;
+ rte_mtr_meter_policy_create;
+ rte_mtr_meter_policy_delete;
+ rte_mtr_meter_policy_update;
+ rte_mtr_meter_policy_validate;
};
INTERNAL {
--
2.27.0
^ permalink raw reply [relevance 1%]
* Re: [dpdk-dev] [PATCH] eal: move DMA mapping from bus-specific to generic driver
@ 2021-03-31 22:53 4% ` Thomas Monjalon
2021-04-01 8:40 0% ` Kinsella, Ray
2021-04-12 15:03 0% ` Kinsella, Ray
0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2021-03-31 22:53 UTC (permalink / raw)
To: Ray Kinsella
Cc: dev, hemant.agrawal, rosen.xu, sthemmin, longli, jerinj,
ferruh.yigit, andrew.rybchenko, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko, Maxime Coquelin, Chenbo Xia, xuemingl,
david.marchand
01/04/2021 00:45, Thomas Monjalon:
> The operations of DMA mapping and unmapping are controlled in some
> bus drivers, following rte_bus specification.
> If the device driver don't provide any specific mapping operation,
> the bus driver may have a fallback (VFIO case for PCI).
>
> The DMA mapping done by the device drivers are called
> from the bus drivers via function pointers in bus-specific structures:
> rte_vdev_driver and rte_pci_driver.
>
> The device driver DMA mapping is not specific to the bus,
> so it can be generalized to all device drivers, based on rte_device.
> That's why the function pointers dma_map and dma_unmap
> are moved to rte_driver, avoiding useless casts of device object.
>
> The function prototypes rte_dev_dma_map_t and rte_dev_dma_unmap_t
> are removed from rte_bus.h because the definition in rte_dev.h is enough,
> but they are still used in rte_bus for bus drivers,
> while being added in rte_driver for device drivers,
> and removed from rte_vdev_driver/rte_pci_driver.
>
> The impacted device drivers are mlx5 (PCI) and virtio_user (vdev).
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> Depends-on: series-16017 ("pci: add rte prefix")
> ---
> drivers/bus/pci/pci_common.c | 8 ++--
> drivers/bus/pci/rte_bus_pci.h | 40 --------------------
> drivers/bus/vdev/rte_bus_vdev.h | 40 --------------------
> drivers/bus/vdev/vdev.c | 32 +++++-----------
> drivers/common/mlx5/mlx5_common_pci.c | 30 ++++++++-------
> drivers/net/mlx5/mlx5.c | 4 +-
> drivers/net/mlx5/mlx5_mr.c | 50 +++++++++++++------------
> drivers/net/mlx5/mlx5_rxtx.h | 4 +-
> drivers/net/virtio/virtio_user_ethdev.c | 22 +++++------
> lib/librte_eal/include/rte_bus.h | 42 ---------------------
> lib/librte_eal/include/rte_dev.h | 49 +++++++++++++++++++++++-
> 11 files changed, 117 insertions(+), 204 deletions(-)
The ABI checker reports some issues on the driver interface.
It needs to be carefully analyzed, because driver interface
should not be part of the ABI compatibility contract.
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [dpdk-dev v2] cryptodev: change raw data path dequeue API
2021-03-16 11:14 9% [dpdk-dev] cryptodev: change raw data path dequeue API Fan Zhang
@ 2021-03-31 17:20 4% ` Fan Zhang
0 siblings, 0 replies; 200+ results
From: Fan Zhang @ 2021-03-31 17:20 UTC (permalink / raw)
To: dev; +Cc: gakhil, Fan Zhang
This patch changes the experimental raw data path dequeue burst API.
Originally the API enforces the user to provide callback function
to get maximum dequeue count. This change gives the user one more
option to pass directly the expected dequeue count.
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
app/test/test_cryptodev.c | 8 +-------
doc/guides/rel_notes/release_21_05.rst | 3 +++
drivers/crypto/qat/qat_sym_hw_dp.c | 21 ++++++++++++++++++---
lib/librte_cryptodev/rte_cryptodev.c | 5 +++--
lib/librte_cryptodev/rte_cryptodev.h | 8 ++++++++
5 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index f91debc168..a910547423 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -162,12 +162,6 @@ ceil_byte_length(uint32_t num_bits)
return (num_bits >> 3);
}
-static uint32_t
-get_raw_dp_dequeue_count(void *user_data __rte_unused)
-{
- return 1;
-}
-
static void
post_process_raw_dp_op(void *user_data, uint32_t index __rte_unused,
uint8_t is_op_success)
@@ -345,7 +339,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
n = n_success = 0;
while (count++ < MAX_RAW_DEQUEUE_COUNT && n == 0) {
n = rte_cryptodev_raw_dequeue_burst(ctx,
- get_raw_dp_dequeue_count, post_process_raw_dp_op,
+ NULL, 1, post_process_raw_dp_op,
(void **)&ret_op, 0, &n_success,
&dequeue_status);
if (dequeue_status < 0) {
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 8e686cc627..943f1596c5 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -130,6 +130,9 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* cryptodev: the function ``rte_cryptodev_raw_dequeue_burst`` is added a
+ parameter ``max_nb_to_dequeue`` to give user a more flexible dequeue control.
+
ABI Changes
-----------
diff --git a/drivers/crypto/qat/qat_sym_hw_dp.c b/drivers/crypto/qat/qat_sym_hw_dp.c
index 01afb883e3..2f64de44a1 100644
--- a/drivers/crypto/qat/qat_sym_hw_dp.c
+++ b/drivers/crypto/qat/qat_sym_hw_dp.c
@@ -707,6 +707,7 @@ qat_sym_dp_enqueue_chain_jobs(void *qp_data, uint8_t *drv_ctx,
static __rte_always_inline uint32_t
qat_sym_dp_dequeue_burst(void *qp_data, uint8_t *drv_ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success_jobs, int *return_status)
@@ -736,9 +737,23 @@ qat_sym_dp_dequeue_burst(void *qp_data, uint8_t *drv_ctx,
resp_opaque = (void *)(uintptr_t)resp->opaque_data;
/* get the dequeue count */
- n = get_dequeue_count(resp_opaque);
- if (unlikely(n == 0))
- return 0;
+ if (get_dequeue_count) {
+ n = get_dequeue_count(resp_opaque);
+ if (unlikely(n == 0))
+ return 0;
+ else if (n > 1) {
+ head = (head + rx_queue->msg_size * (n - 1)) &
+ rx_queue->modulo_mask;
+ resp = (struct icp_qat_fw_comn_resp *)(
+ (uint8_t *)rx_queue->base_addr + head);
+ if (*(uint32_t *)resp == ADF_RING_EMPTY_SIG)
+ return 0;
+ }
+ } else {
+ if (unlikely(max_nb_to_dequeue == 0))
+ return 0;
+ n = max_nb_to_dequeue;
+ }
out_user_data[0] = resp_opaque;
status = QAT_SYM_DP_IS_RESP_SUCCESS(resp);
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 40f55a3cd0..0c16b04f80 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -2232,13 +2232,14 @@ rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
uint32_t
rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success_jobs, int *status)
{
return (*ctx->dequeue_burst)(ctx->qp_data, ctx->drv_ctx_data,
- get_dequeue_count, post_dequeue, out_user_data,
- is_user_data_array, n_success_jobs, status);
+ get_dequeue_count, max_nb_to_dequeue, post_dequeue,
+ out_user_data, is_user_data_array, n_success_jobs, status);
}
int
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index ae34f33f69..b2a1255112 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -1546,6 +1546,9 @@ typedef void (*rte_cryptodev_raw_post_dequeue_t)(void *user_data,
* @param drv_ctx Driver specific context data.
* @param get_dequeue_count User provided callback function to
* obtain dequeue operation count.
+ * @param max_nb_to_dequeue When get_dequeue_count is NULL this
+ * value is used to pass the maximum
+ * number of operations to be dequeued.
* @param post_dequeue User provided callback function to
* post-process a dequeued operation.
* @param out_user_data User data pointer array to be retrieve
@@ -1580,6 +1583,7 @@ typedef void (*rte_cryptodev_raw_post_dequeue_t)(void *user_data,
typedef uint32_t (*cryptodev_sym_raw_dequeue_burst_t)(void *qp,
uint8_t *drv_ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success, int *dequeue_status);
@@ -1747,6 +1751,9 @@ rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
* data.
* @param get_dequeue_count User provided callback function to
* obtain dequeue operation count.
+ * @param max_nb_to_dequeue When get_dequeue_count is NULL this
+ * value is used to pass the maximum
+ * number of operations to be dequeued.
* @param post_dequeue User provided callback function to
* post-process a dequeued operation.
* @param out_user_data User data pointer array to be retrieve
@@ -1782,6 +1789,7 @@ __rte_experimental
uint32_t
rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success, int *dequeue_status);
--
2.25.1
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v10 0/8] Introduce event vectorization
2021-03-30 8:22 4% ` [dpdk-dev] [PATCH v9 " pbhagavatula
@ 2021-03-31 9:29 4% ` pbhagavatula
2021-04-03 9:44 0% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-31 9:29 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~742.3% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without this patchset applied:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.071 mpps
With the patchset applied and Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.123 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
42.715 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v10 Changes:
- Update Rx adapter documentation with flow identifier bitfield format. (Jay)
v9 Changes:
- Update Rx adapter documentation w.r.t SW event vectorizations. (Jay)
- Push partial vectors to event device on queue delete. (Jay)
v8 Changes:
- Fix incorrect shift for vector timeout interval.(Jay)
- Code reallocation.(Jay)
v7 Changes:
- More doxygen fixes.(Jay)
- Reduce code duplication in 4/8.(Jay)
v6 Changes:
- Make rte_errno sign consistant.(Jay)
- Gramatical and doxygen fixes. (Jay)
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 +++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 57 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 327 +++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 114 +++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1562 insertions(+), 91 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
2021-03-31 0:44 3% [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10 Honnappa Nagarahalli
@ 2021-03-31 8:52 0% ` Tom Barbette
2021-04-06 13:13 0% ` Morten Brørup
0 siblings, 1 reply; 200+ results
From: Tom Barbette @ 2021-03-31 8:52 UTC (permalink / raw)
To: Honnappa Nagarahalli, dev; +Cc: nd, Alireza Farshin
Le 31-03-21 à 02:44, Honnappa Nagarahalli a écrit :
> - Ability to tune the values of #defines
> * Few prominent points discussed
> - This will result in #ifdefs in the code (for ex: in testpmd)
> - One option is for all the PMDs to document their configurable #defines in PMD specific header files. Having these distributed is much easier to search.
> - Can some of the existing #defines be converted to runtime configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
> * Bruce to think about converting the doc to a blog or an email on the mailing list. But soliciting feedback is most important.
One alternative path worth looking at is to encourage the use of LTO,
and modify APIs so the configuration can be provided at linking time,
and propagated by the compiler.
E.g. one can define rte_max_lcore as a weak constant symbol, equal to
128. At linking time the user may provide a rte_max_lcore that is more
tailored, and still, dynamic arrays[rte_max_lcore] will be allocatable
on the .bss section, avoiding an indirection. The compiler will be able
to optimize loops etc which is impossible with pure runtime configuration.
In packetmill.io we actually pushed this to the next level where the
driver can completely change its behavior without recompiling DPDK
itself and spawning ifdefs everywhere.
However the price is the slowiness of LTO...
My 2 cents.
Tom
^ permalink raw reply [relevance 0%]
* [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10
@ 2021-03-31 0:44 3% Honnappa Nagarahalli
2021-03-31 8:52 0% ` Tom Barbette
0 siblings, 1 reply; 200+ results
From: Honnappa Nagarahalli @ 2021-03-31 0:44 UTC (permalink / raw)
To: dev; +Cc: nd, nd
Minutes of Technical Board Meeting, 2021-03-10
Members Attending:
- Aaron Conole
- Bruce Richardson
- Ferruh Yigit
- Hemant Agrawal
- Honnappa Nagarahalli (Chair)
- Jerin Jacob
- Kevin Traynor
- Konstantin Ananyev
- Maxime Coquelin
- Olivier Matz
- Stephen Hemminger
- Thomas Monjalon
NOTE: The Technical Board meetings take place every second Wednesday on https://meet.jit.si/DPDK at 3 pm UTC.
Meetings are public, and DPDK community members are welcome to attend.
Agenda and minutes can be found at http://core.dpdk.org/techboard/minutes
NOTE: Next meeting will be on Wednesday 2021-03-24 @3pm UTC, and will be chaired by Jerin.
#1 Build config improvement proposal
* Discussion centered around the following issues
- Ability to enable/disable compilation of libraries and PMDs. There was no objection from the techboard members on the requirement.
- Ability to enable/disable #defines
- Ability to tune the values of #defines
* Few prominent points discussed
- This will result in #ifdefs in the code (for ex: in testpmd)
- One option is for all the PMDs to document their configurable #defines in PMD specific header files. Having these distributed is much easier to search.
- Can some of the existing #defines be converted to runtime configurations? For ex: RTE_MAX_LCORE? This might impact ABI.
* Bruce to think about converting the doc to a blog or an email on the mailing list. But soliciting feedback is most important.
#2 DMARC on mailing list
* Ali Alnubani is working on the issue and will have a mailing list to test
#3 Documenting criteria on adding/removing members to technical board
* Thomas has sent patches to the Techboard. Board members to review and provide feedback.
#4 Criteria for adding new members to security team?
* Being known to members of the Techboard would be one criteria.
* AI: Ferruh to put out a document or email to propose the criteria
#5 Testing leader's role definition
* AI: Aaron Conole has it completed and will send it to the Techboard.
#6 Approval for blog on C11 adoption
* Konstantin has provided the comments
* Awaiting comments from PPC maintainers
#7 Update on DTS usability
* Intel engineers working on DTS are involved in providing the feedback
* If the test cases can be added to the unit tests, it should be allowed as well. i.e. DTS should not be made mandatory. This will provide flexibility for developers.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v2] ethdev: introduce enable_driver_sdk to install driver headers
2021-03-24 11:27 0% ` Ferruh Yigit
2021-03-24 11:30 0% ` Thomas Monjalon
@ 2021-03-30 12:50 0% ` Ferruh Yigit
1 sibling, 0 replies; 200+ results
From: Ferruh Yigit @ 2021-03-30 12:50 UTC (permalink / raw)
To: Tyler Retzlaff, thomas
Cc: dev, andrew.rybchenko, bruce.richardson, Shepard Siegel, David Marchand
On 3/24/2021 11:27 AM, Ferruh Yigit wrote:
> On 3/24/2021 4:32 AM, Tyler Retzlaff wrote:
>> On Tue, Mar 23, 2021 at 05:04:08PM +0000, Ferruh Yigit wrote:
>>>> diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build
>>>> index c37b2e377..4353fa6b7 100644
>>>> --- a/lib/librte_ethdev/meson.build
>>>> +++ b/lib/librte_ethdev/meson.build
>>>> @@ -20,8 +20,14 @@ headers = files('rte_ethdev.h',
>>>> 'rte_mtr_driver.h',
>>>> 'rte_tm.h',
>>>> 'rte_tm_driver.h')
>>>> +
>>>> indirect_headers += files(
>>>> 'rte_ethdev_core.h',
>>>> 'rte_eth_ctrl.h')
>>>> +driver_sdk_headers += files(
>>>> + 'ethdev_driver.h',
>>>> + 'ethdev_pci.h',
>>>> + 'ethdev_vdev.h')
>>>> +
>>>> deps += ['net', 'kvargs', 'meter', 'telemetry']
>>>
>>
>> i feel like i missed a reply here. but just to clarify only ethdev will
>> be covered by this patch. inclusion of other driver headers was
>> discussed off list (sorry) and it emerged that it would result in
>> withdraw a number of driver api/abi that had not been marked as
>> __rte_internal.
>>
>> for driver api that were being exported as 'stable' a deprecation notice
>> will need to be issued in order to make them part of the
>> driver_sdk_headers. for that reason only ethdev is being made available
>> under this option for now.
>>
>> please ack/nack the patch as-is
>>
>
> I am OK the patch for the ethdev part, hence
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
>
Applied to dpdk-next-net/main, thanks.
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v9 0/8] Introduce event vectorization
2021-03-26 14:08 4% ` [dpdk-dev] [PATCH v8 " pbhagavatula
@ 2021-03-30 8:22 4% ` pbhagavatula
2021-03-31 9:29 4% ` [dpdk-dev] [PATCH v10 " pbhagavatula
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-30 8:22 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~742.3% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without this patchset applied:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.071 mpps
With the patchset applied and Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.123 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
42.715 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v9 Changes:
- Update Rx adapter documentation w.r.t SW event vectorizations. (Jay)
- Push partial vectors to event device on queue delete. (Jay)
v8 Changes:
- Fix incorrect shift for vector timeout interval.(Jay)
- Code reallocation.(Jay)
v7 Changes:
- More doxygen fixes.(Jay)
- Reduce code duplication in 4/8.(Jay)
v6 Changes:
- Make rte_errno sign consistant.(Jay)
- Gramatical and doxygen fixes. (Jay)
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 +++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 49 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 327 +++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 114 +++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1554 insertions(+), 91 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] cryptodev: change raw data path dequeue API
@ 2021-03-30 8:07 4% Akhil Goyal
0 siblings, 0 replies; 200+ results
From: Akhil Goyal @ 2021-03-30 8:07 UTC (permalink / raw)
To: Fan Zhang, dev, thomas; +Cc: hemant.agrawal, g.singh
> diff --git a/doc/guides/rel_notes/release_21_05.rst
> b/doc/guides/rel_notes/release_21_05.rst
> index 21dc6d234..b9ca0cc30 100644
> --- a/doc/guides/rel_notes/release_21_05.rst
> +++ b/doc/guides/rel_notes/release_21_05.rst
> @@ -130,6 +130,8 @@ ABI Changes
>
> * No ABI change that would break compatibility with 20.11.
>
> +* cryptodev: the function ``rte_cryptodev_raw_dequeue_burst`` is added a
> + parameter ``max_nb_to_dequeue`` to give user a more flexible dequeue
> control.
>
ABI changes are not allowed until 20.11, however, this change is an API change
(not ABI) for an experimental API which can be allowed.
Could you please move this to relevant section.
@Hemant: any comments on this patch?
Regards,
Akhil
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v5] build: alias default build as generic
2021-03-29 10:49 3% ` [dpdk-dev] [PATCH v4] " Juraj Linkeš
@ 2021-03-30 6:40 3% ` Juraj Linkeš
0 siblings, 0 replies; 200+ results
From: Juraj Linkeš @ 2021-03-30 6:40 UTC (permalink / raw)
To: bruce.richardson, thomas, david.marchand, Ruifeng.Wang,
Honnappa.Nagarahalli, jerinjacobk, ferruh.yigit
Cc: dev, Juraj Linkeš
The current machine='default' build name is not descriptive. The actual
default build is machine='native'. Add an alternative string which does
the same build and better describes what we're building:
machine='generic'. Leave machine='default' for backwards compatibility.
Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
.ci/linux-build.sh | 2 +-
config/arm/meson.build | 7 ++++---
config/meson.build | 13 +++++++------
devtools/test-meson-builds.sh | 14 +++++++-------
doc/guides/prog_guide/build-sdk-meson.rst | 4 ++--
meson_options.txt | 2 +-
6 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 91e43a975b..3cbeb193a1 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -77,7 +77,7 @@ else
OPTS="$OPTS -Dexamples=all"
fi
-OPTS="$OPTS -Dmachine=default"
+OPTS="$OPTS -Dmachine=generic"
OPTS="$OPTS --default-library=$DEF_LIB"
OPTS="$OPTS --buildtype=debugoptimized"
OPTS="$OPTS -Dcheck_includes=true"
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 00bc4610a3..aaed89bd5b 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation.
# Copyright(c) 2017 Cavium, Inc
+# Copyright(c) 2021 PANTHEON.tech s.r.o.
# common flags to all aarch64 builds, with lowest priority
flags_common = [
@@ -208,8 +209,8 @@ if dpdk_conf.get('RTE_ARCH_32')
else
# aarch64 build
if not meson.is_cross_build()
- if machine == 'default'
- # default build
+ if machine == 'generic'
+ # generic build
implementer_id = 'generic'
part_number = 'generic'
else
@@ -256,7 +257,7 @@ else
'(-Dmachine=generic) build.')
endif
- # use default flags with implementer flags
+ # use common flags with implementer flags
dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', [])
# apply supported machine args
diff --git a/config/meson.build b/config/meson.build
index 66a2edcc47..3268cf6804 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -70,21 +70,22 @@ else
machine = get_option('machine')
endif
-# machine type 'default' is special, it defaults to the per arch agreed common
-# minimal baseline needed for DPDK.
+# machine type 'generic' is special, it selects the per arch agreed common
+# minimal baseline needed for DPDK. Machine type 'default' is also supported
+# with the same meaning for backwards compatibility.
# That might not be the most optimized, but the most portable version while
# still being able to support the CPU features required for DPDK.
# This can be bumped up by the DPDK project, but it can never be an
# invariant like 'native'
-if machine == 'default'
+if machine == 'default' or machine == 'generic'
if host_machine.cpu_family().startswith('x86')
- # matches the old pre-meson build systems default
+ # matches the old pre-meson build systems generic machine
machine = 'corei7'
elif host_machine.cpu_family().startswith('arm')
machine = 'armv7-a'
elif host_machine.cpu_family().startswith('aarch')
- # arm64 manages defaults in config/arm/meson.build
- machine = 'default'
+ # arm64 manages generic config in config/arm/meson.build
+ machine = 'generic'
elif host_machine.cpu_family().startswith('ppc')
machine = 'power8'
endif
diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index c11ae87e0d..daf817ac3e 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -223,12 +223,12 @@ done
# test compilation with minimal x86 instruction set
# Set the install path for libraries to "lib" explicitly to prevent problems
# with pkg-config prefixes if installed in "lib/x86_64-linux-gnu" later.
-default_machine='nehalem'
-if ! check_cc_flags "-march=$default_machine" ; then
- default_machine='corei7'
+generic_machine='nehalem'
+if ! check_cc_flags "-march=$generic_machine" ; then
+ generic_machine='corei7'
fi
-build build-x86-default cc skipABI -Dcheck_includes=true \
- -Dlibdir=lib -Dmachine=$default_machine $use_shared
+build build-x86-generic cc skipABI -Dcheck_includes=true \
+ -Dlibdir=lib -Dmachine=$generic_machine $use_shared
# 32-bit with default compiler
if check_cc_flags '-m32' ; then
@@ -271,10 +271,10 @@ for f in $srcdir/config/ppc/ppc* ; do
build $targetdir $f ABI $use_shared
done
-# Test installation of the x86-default target, to be used for checking
+# Test installation of the x86-generic target, to be used for checking
# the sample apps build using the pkg-config file for cflags and libs
load_env cc
-build_path=$(readlink -f $builds_dir/build-x86-default)
+build_path=$(readlink -f $builds_dir/build-x86-generic)
export DESTDIR=$build_path/install
install_target $build_path $DESTDIR
pc_file=$(find $DESTDIR -name libdpdk.pc)
diff --git a/doc/guides/prog_guide/build-sdk-meson.rst b/doc/guides/prog_guide/build-sdk-meson.rst
index 3429e26479..c7e12eedfb 100644
--- a/doc/guides/prog_guide/build-sdk-meson.rst
+++ b/doc/guides/prog_guide/build-sdk-meson.rst
@@ -85,7 +85,7 @@ Project-specific options are passed used -Doption=value::
meson -Denable_docs=true fullbuild # build and install docs
- meson -Dmachine=default # use builder-independent baseline -march
+ meson -Dmachine=generic # use builder-independent baseline -march
meson -Ddisable_drivers=event/*,net/tap # disable tap driver and all
# eventdev PMDs for a smaller build
@@ -114,7 +114,7 @@ Examples of setting some of the same options using meson configure::
re-scan from meson.
.. note::
- machine=default uses a config that works on all supported architectures
+ machine=generic uses a config that works on all supported architectures
regardless of the capabilities of the machine where the build is happening.
As well as those settings taken from ``meson configure``, other options
diff --git a/meson_options.txt b/meson_options.txt
index 3b8c5d316d..686827bb1b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -21,7 +21,7 @@ option('include_subdir_arch', type: 'string', value: '',
option('kernel_dir', type: 'string', value: '',
description: 'Path to the kernel for building kernel modules. Headers must be in $kernel_dir or $kernel_dir/build. Modules will be installed in /lib/modules.')
option('machine', type: 'string', value: 'native',
- description: 'set the target machine type')
+ description: 'set the target machine type or "generic", a build usable on all machines of the build machine architecture or "native", which lets the compiler pick the architecture of the build machine.')
option('max_ethports', type: 'integer', value: 32,
description: 'maximum number of Ethernet devices')
option('max_lcores', type: 'integer', value: 128,
--
2.20.1
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [RFC 3/5] eal: lcore state FINISHED is not required
2021-03-19 13:42 3% ` Ananyev, Konstantin
@ 2021-03-30 2:54 0% ` Honnappa Nagarahalli
0 siblings, 0 replies; 200+ results
From: Honnappa Nagarahalli @ 2021-03-30 2:54 UTC (permalink / raw)
To: Ananyev, Konstantin, thomas, Feifei Wang, david.marchand
Cc: hemant.agrawal, Nipun.gupta@nxp.com, jerinj, Van Haaren, Harry,
Richardson, Bruce, dmitry.kozliuk, navasile, dmitrym, Kadam,
Pallavi, dev, Ruifeng Wang, nd, Honnappa Nagarahalli, nd
<snip>
>
> Hi everyone,
Thanks Konstantin for the review.
>
> > <snip>
> >
> > > >
> > > > > > Subject: [RFC 3/5] eal: lcore state FINISHED is not required
> > > > > >
> > > > > > FINISHED state seems to be used to indicate that the worker's
> > > > > > update of the 'state' is not visible to other threads. There
> > > > > > seems to be no requirement to have such a state.
> > > > >
> > > > > I am not sure "FINISHED" is necessary to be removed, and I
> > > > > propose some of my profiles for discussion.
> > > > > There are three states for lcore now:
> > > > > "WAIT": indicate lcore can start working
> > > > > "RUNNING": indicate lcore is working
> > > > > "FINISHED": indicate lcore has finished its working and wait to
> > > > > be reset
> > > > If you look at the definitions of "WAIT" and "FINISHED" states,
> > > > they look
> > > similar, except for "wait to be reset" in "FINISHED" state . The
> > > code really does not do anything to reset the lcore. It just changes the
> state to "WAIT".
>
>
> I agree that 3 states here seems excessive.
> Just 2 (RUNNING/IDLE) seems enough.
> Though we can't just remove FINISHED here - it will be an Abi breakage.
> Might be deprecate FINISHED now and remove in 21.11.
Agree, will add a new patch to deprecate the FINISHED state. Also, does the deprecation notice need to go into 20.08 release notes?
>
> Also need to decide what rte_eal_wait_lcore() should return in that case?
> Always zero, or always status of last function called?
I am not sure why ' rte_eal_wait_lcore' has the following code:
if (lcore_config[worker_id].state == WAIT)
return 0;
This indicates that the caller has called 'rte_eal_wait_lcore' function earlier. May be there is a use case where there are multiple threads waiting for the lcores to complete?
Anyway, IMO, returning the status of the last function always is better for this API.
>
> > > >
> > > > >
> > > > > From the description above, we can find "FINISHED" is different
> > > > > from "WAIT", it can shows that lcore has done the work and finished
> it.
> > > > > Thus, if we remove "FINISHED", maybe we will not know whether
> > > > > the lcore finishes its work or just doesn't start, because this
> > > > > two state has the
> > > same tag "WAIT".
> > > > Looking at "eal_thread_loop", the worker thread sets the state to
> "RUNNING"
> > > before sending the ack back to main core. After that it is
> > > guaranteed that the worker will run the assigned function. Only case
> > > where it will not run the assigned function is when the 'write'
> > > syscall fails, in which case it results in a panic.
> > >
> > > Quick note: it should not panic.
> > > We must find a way to return an error without crashing the whole
> > > application.
> > The syscalls are being used to communicate the status back to the main
> thread. If they fail, it is not possible to communicate the status.
> > May be it is better to panic.
> > We could change the implementation using shared variables, but it
> > would require polling the memory. May be the syscalls are being used to
> avoid polling. However, this polling would happen during init time (or similar)
> for a short duration.
>
> AFAIK we use read and write not for status communication, but sort of
> sleep/ack point.
> Though I agree if we can't do read/write from the system pipe then
> something is totally wrong, and probably there is no much point to continue.
>
> > >
> > >
> > > > > Furthermore, consider such a scenario:
> > > > > Core 1 need to monitor Core 2 state, if Core 2 finishes one
> > > > > task, Core 1 can start its working.
> > > > > However, if there is only one tag "WAIT", Core 1 maybe start
> > > > > its work at the wrong time, when Core 2 still does not start its
> > > > > task at state
> > > "WAIT".
> > > > > This is just my guess, and at present, there is no similar
> > > > > application scenario in dpdk.
> > > > To be able to do this effectively, core 1 needs to observe the
> > > > state change
> > > from WAIT->RUNNING->FINISHED. This requires that core 1 should be
> > > calling rte_eal_remote_launch and rte_eal_wait_lcore functions. It
> > > is not possible to observe this state transition from a 3rd core
> > > (for ex: a worker might go from
> > > RUNNING->FINISHED->WAIT->RUNNING which a 3rd core might not be
> able
> > > RUNNING->FINISHED->WAIT->to
> > > observe).
> > > >
> > > > >
> > > > > On the other hand, if we decide to remove "FINISHED", please
> > > > > consider the following files:
> > > > > 1. lib/librte_eal/linux/eal_thread.c: line 31
> > > > > lib/librte_eal/windows/eal_thread.c: line 22
> > > > > lib/librte_eal/freebsd/eal_thread.c: line 31
> > > > I have looked at these lines, they do not capture "why" FINISHED
> > > > state is
> > > required.
> > > >
> > > > 2.
> > > > > lib/librte_eal/include/rte_launch.h: line 24, 44, 121, 123, 131 3.
> > > > > examples/l2fwd-
> > > > > keepalive/main.c: line 510
> > > > > rte_eal_wait_lcore(id_core) can be removed. Because the core
> > > > > state has been checked as "WAIT", this is a redundant operation
> > >
> > >
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v5 00/10] eal: Add new API for threading
@ 2021-03-29 22:40 2% ` Narcisa Ana Maria Vasile
0 siblings, 0 replies; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-03-29 22:40 UTC (permalink / raw)
To: dev, thomas, dmitry.kozliuk, khot, navasile, dmitrym, roretzla,
talshn, ocardona
Cc: bruce.richardson, david.marchand, pallavi.kadam
From: Narcisa Vasile <navasile@microsoft.com>
EAL thread API
**Problem Statement**
DPDK currently uses the pthread interface to create and manage threads.
Windows does not support the POSIX thread programming model, so it currently
relies on a header file that hides the Windows calls under
pthread matched interfaces. Given that EAL should isolate the environment
specifics from the applications and libraries and mediate
all the communication with the operating systems, a new EAL interface
is needed for thread management.
**Goals**
* Introduce a generic EAL API for threading support that will remove
the current Windows pthread.h shim.
* Replace references to pthread_* across the DPDK codebase with the new
RTE_THREAD_* API.
* Allow users to choose between using the RTE_THREAD_* API or a
3rd party thread library through a configuration option.
**Design plan**
New API main files:
* rte_thread.h (librte_eal/include)
* rte_thread_types.h (librte_eal/include)
* rte_thread_windows_types.h (librte_eal/windows/include)
* rte_thread.c (librte_eal/windows)
* rte_thread.c (librte_eal/common)
For flexibility, the user is offered the option of either using the RTE_THREAD_* API or
a 3rd party thread library, through a meson flag “use_external_thread_lib”.
By default, this flag is set to FALSE, which means Windows libraries and applications
will use the RTE_THREAD_* API for managing threads.
If compiling on Windows and the “use_external_thread_lib” is *not* set,
the following files will be parsed:
* include/rte_thread.h
* windows/include/rte_thread_windows_types.h
* windows/rte_thread.c
In all other cases, the compilation/parsing includes the following files:
* include/rte_thread.h
* include/rte_thread_types.h
* common/rte_thread.c
**A schematic example of the design**
--------------------------------------------------
lib/librte_eal/include/rte_thread.h
int rte_thread_create();
lib/librte_eal/common/rte_thread.c
int rte_thread_create()
{
return pthread_create();
}
lib/librte_eal/windows/rte_thread.c
int rte_thread_create()
{
return CreateThread();
}
lib/librte_eal/windows/meson.build
if get_option('use_external_thread_lib')
sources += 'librte_eal/common/rte_thread.c'
else
sources += 'librte_eal/windows/rte_thread.c'
endif
-----------------------------------------------------
**Thread attributes**
When or after a thread is created, specific characteristics of the thread
can be adjusted. Given that the thread characteristics that are of interest
for DPDK applications are affinity and priority, the following structure
that represents thread attributes has been defined:
typedef struct
{
enum rte_thread_priority priority;
rte_cpuset_t cpuset;
} rte_thread_attr_t;
The *rte_thread_create()* function can optionally receive an rte_thread_attr_t
object that will cause the thread to be created with the affinity and priority
described by the attributes object. If no rte_thread_attr_t is passed
(parameter is NULL), the default affinity and priority are used.
An rte_thread_attr_t object can also be set to the default values
by calling *rte_thread_attr_init()*.
*Priority* is represented through an enum that currently advertises
two values for priority:
- RTE_THREAD_PRIORITY_NORMAL
- RTE_THREAD_PRIORITY_REALTIME_CRITICAL
The enum can be extended to allow for multiple priority levels.
rte_thread_set_priority - sets the priority of a thread
rte_thread_attr_set_priority - updates an rte_thread_attr_t object
with a new value for priority
The user can choose thread priority through an EAL parameter,
when starting an application. If EAL parameter is not used,
the per-platform default value for thread priority is used.
Otherwise administrator has an option to set one of available options:
--thread-prio normal
--thread-prio realtime
Example:
./dpdk-l2fwd -l 0-3 -n 4 –thread-prio normal -- -q 8 -p ffff
*Affinity* is described by the already known “rte_cpuset_t” type.
rte_thread_attr_set/get_affinity - sets/gets the affinity field in a
rte_thread_attr_t object
rte_thread_set/get_affinity – sets/gets the affinity of a thread
**Errors**
A translation function that maps Windows error codes to errno-style
error codes is provided.
**Future work**
Note that this patchset was focused on introducing new API that will
remove the Windows pthread.h shim. In DPDK, there are still a few references
to pthread_* that were not implemented in the shim.
The long term plan is for EAL to provide full threading support:
* Adding support for conditional variables
* Additional functionality offered by pthread_* (such as pthread_setname_np, etc.)
* Static mutex initializers are not used on Windows. If we must continue
using them, they need to be platform dependent and an implementation will
need to be provided for Windows.
v5:
- update cover letter with more details on the priority argument
v4:
- fix function description
- rebase
v3:
- rebase
v2:
- revert changes that break ABI
- break up changes into smaller patches
- fix coding style issues
- fix issues with errors
- fix parameter type in examples/kni.c
Narcisa Vasile (10):
eal: add thread id and simple thread functions
eal: add thread attributes
windows/eal: translate Windows errors to errno-style errors
eal: implement functions for thread affinity management
eal: implement thread priority management functions
eal: add thread lifetime management
eal: implement functions for mutex management
eal: implement functions for thread barrier management
eal: add EAL argument for setting thread priority
Enable the new EAL thread API
app/test/process.h | 6 +-
app/test/test_lcores.c | 16 +-
app/test/test_link_bonding.c | 10 +-
app/test/test_lpm_perf.c | 12 +-
config/meson.build | 4 +
drivers/bus/dpaa/base/qbman/bman_driver.c | 6 +-
drivers/bus/dpaa/base/qbman/dpaa_sys.c | 14 +-
drivers/bus/dpaa/base/qbman/process.c | 6 +-
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 6 +-
drivers/compress/mlx5/mlx5_compress.c | 10 +-
drivers/event/dlb/pf/base/dlb_osdep.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/af_xdp/rte_eth_af_xdp.c | 18 +-
drivers/net/ark/ark_ethdev.c | 4 +-
drivers/net/atlantic/atl_ethdev.c | 4 +-
drivers/net/atlantic/atl_types.h | 5 +-
.../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 24 +-
drivers/net/axgbe/axgbe_dev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.h | 8 +-
drivers/net/axgbe/axgbe_i2c.c | 4 +-
drivers/net/axgbe/axgbe_mdio.c | 8 +-
drivers/net/axgbe/axgbe_phy_impl.c | 6 +-
drivers/net/bnxt/bnxt.h | 16 +-
drivers/net/bnxt/bnxt_cpr.c | 4 +-
drivers/net/bnxt/bnxt_ethdev.c | 52 +-
drivers/net/bnxt/bnxt_irq.c | 8 +-
drivers/net/bnxt/bnxt_reps.c | 10 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 34 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 4 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 24 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h | 2 +-
drivers/net/ena/base/ena_plat_dpdk.h | 8 +-
drivers/net/enic/enic.h | 2 +-
drivers/net/hns3/hns3_ethdev.h | 2 +-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_mbx.c | 2 +-
drivers/net/ice/ice_dcf_parent.c | 4 +-
drivers/net/ipn3ke/ipn3ke_representor.c | 6 +-
drivers/net/ixgbe/ixgbe_ethdev.c | 2 +-
drivers/net/ixgbe/ixgbe_ethdev.h | 2 +-
drivers/net/kni/rte_eth_kni.c | 6 +-
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.c | 20 +-
drivers/net/mlx5/mlx5.h | 2 +-
drivers/net/mlx5/mlx5_txpp.c | 8 +-
drivers/net/mlx5/windows/mlx5_flow_os.c | 10 +-
drivers/net/mlx5/windows/mlx5_os.c | 2 +-
drivers/net/qede/base/bcm_osal.h | 8 +-
drivers/net/vhost/rte_eth_vhost.c | 22 +-
.../net/virtio/virtio_user/virtio_user_dev.c | 30 +-
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 8 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 36 +-
drivers/vdpa/mlx5/mlx5_vdpa.c | 24 +-
drivers/vdpa/mlx5/mlx5_vdpa.h | 6 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 67 +--
examples/kni/main.c | 6 +-
examples/vhost/main.c | 2 +-
examples/vhost_blk/vhost_blk.c | 10 +-
lib/librte_eal/common/eal_common_options.c | 36 +-
lib/librte_eal/common/eal_common_proc.c | 48 +-
lib/librte_eal/common/eal_common_thread.c | 43 +-
lib/librte_eal/common/eal_common_trace.c | 2 +-
lib/librte_eal/common/eal_internal_cfg.h | 2 +
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_private.h | 2 +-
lib/librte_eal/common/malloc_mp.c | 32 +-
lib/librte_eal/common/meson.build | 1 +
lib/librte_eal/common/rte_thread.c | 342 ++++++++++++
lib/librte_eal/freebsd/eal.c | 37 +-
lib/librte_eal/freebsd/eal_alarm.c | 12 +-
lib/librte_eal/freebsd/eal_interrupts.c | 4 +-
lib/librte_eal/freebsd/eal_thread.c | 8 +-
lib/librte_eal/include/meson.build | 1 +
lib/librte_eal/include/rte_lcore.h | 8 +-
lib/librte_eal/include/rte_per_lcore.h | 2 -
lib/librte_eal/include/rte_thread.h | 337 ++++++++++-
lib/librte_eal/include/rte_thread_types.h | 20 +
lib/librte_eal/linux/eal.c | 42 +-
lib/librte_eal/linux/eal_alarm.c | 10 +-
lib/librte_eal/linux/eal_interrupts.c | 4 +-
lib/librte_eal/linux/eal_thread.c | 8 +-
lib/librte_eal/linux/eal_timer.c | 2 +-
lib/librte_eal/rte_eal_exports.def | 20 +
lib/librte_eal/unix/meson.build | 1 -
lib/librte_eal/unix/rte_thread.c | 92 ---
lib/librte_eal/version.map | 21 +
lib/librte_eal/windows/eal.c | 26 +-
lib/librte_eal/windows/eal_interrupts.c | 6 +-
lib/librte_eal/windows/eal_lcore.c | 170 ++++--
lib/librte_eal/windows/eal_thread.c | 24 +-
lib/librte_eal/windows/eal_windows.h | 20 +-
lib/librte_eal/windows/include/meson.build | 1 +
lib/librte_eal/windows/include/pthread.h | 186 -------
.../include/rte_windows_thread_types.h | 19 +
lib/librte_eal/windows/include/sched.h | 2 +-
lib/librte_eal/windows/meson.build | 7 +-
lib/librte_eal/windows/rte_thread.c | 522 +++++++++++++++++-
lib/librte_ethdev/rte_ethdev.c | 4 +-
lib/librte_ethdev/rte_ethdev_core.h | 3 +-
lib/librte_ethdev/rte_flow.c | 4 +-
.../rte_event_eth_rx_adapter.c | 6 +-
lib/librte_vhost/fd_man.c | 40 +-
lib/librte_vhost/fd_man.h | 6 +-
lib/librte_vhost/socket.c | 124 +++--
lib/librte_vhost/vhost.c | 10 +-
meson_options.txt | 2 +
108 files changed, 2038 insertions(+), 929 deletions(-)
create mode 100644 lib/librte_eal/common/rte_thread.c
create mode 100644 lib/librte_eal/include/rte_thread_types.h
delete mode 100644 lib/librte_eal/unix/rte_thread.c
delete mode 100644 lib/librte_eal/windows/include/pthread.h
create mode 100644 lib/librte_eal/windows/include/rte_windows_thread_types.h
--
2.30.0.vfs.0.2
^ permalink raw reply [relevance 2%]
* Re: [dpdk-dev] [PATCH] ethdev: update qfi definition
2021-03-29 9:06 3% ` Raslan Darawsheh
@ 2021-03-29 11:14 0% ` Ferruh Yigit
0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2021-03-29 11:14 UTC (permalink / raw)
To: Raslan Darawsheh, Ori Kam, dev, Andrew Rybchenko, Ivan Malov
Cc: Slava Ovsiienko, Shiri Kuzin, ying.a.wang, stable,
NBU-Contact-Thomas Monjalon, Olivier Matz
On 3/29/2021 10:06 AM, Raslan Darawsheh wrote:
> Hi,
>
>> -----Original Message-----
>> From: Ori Kam <orika@nvidia.com>
>> Sent: Monday, March 29, 2021 11:53 AM
>> To: Ferruh Yigit <ferruh.yigit@intel.com>; Raslan Darawsheh
>> <rasland@nvidia.com>; dev@dpdk.org; Andrew Rybchenko
>> <andrew.rybchenko@oktetlabs.ru>; Ivan Malov <ivan.malov@oktetlabs.ru>
>> Cc: Slava Ovsiienko <viacheslavo@nvidia.com>; Shiri Kuzin
>> <shirik@nvidia.com>; ying.a.wang@intel.com; stable@dpdk.org; NBU-
>> Contact-Thomas Monjalon <thomas@monjalon.net>; Olivier Matz
>> <olivier.matz@6wind.com>
>> Subject: RE: [dpdk-dev] [PATCH] ethdev: update qfi definition
>>
>> Hi
>>
>>> -----Original Message-----
>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: update qfi definition
>>>
>>> On 3/23/2021 12:11 PM, Raslan Darawsheh wrote:
>>>> qfi field is 8 bits which represent single bit for
>>>> PPP (paging Policy Presence) single bit for RQI
>>>> (Reflective QoS Indicator) and 6 bits for qfi
>>>> (QoS Flow Identifier)
>>>
>>> Can you please put a reference for above information?
>>>>
> Sure, will send in V2,
>
>>>> This update the doxygen format and the mask for qfi
>>>> to properly identify the full 8 bits of the field.
>>>>
>>>> note: changing the default mask would cause different
>>>> patterns generated by testpmd.
>>>>
>>>> Fixes: 346553db5bd1 ("ethdev: add GTP extension header to flow API")
>>>> Cc: ying.a.wang@intel.com
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Raslan Darawsheh <rasland@nvidia.com>
>>>> ---
>>>> doc/guides/testpmd_app_ug/testpmd_funcs.rst | 3 ++-
>>>> lib/librte_ethdev/rte_flow.h | 4 ++--
>>>> 2 files changed, 4 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>>> b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>>>> index f59eb8a27d..dd39c4c3c2 100644
>>>> --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>>>> +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
>>>> @@ -3742,7 +3742,8 @@ This section lists supported pattern items and
>> their
>>> attributes, if any.
>>>> - ``gtp_psc``: match GTP PDU extension header with type 0x85.
>>>>
>>>> - ``pdu_type {unsigned}``: PDU type.
>>>> - - ``qfi {unsigned}``: QoS flow identifier.
>>>> +
>>>> + - ``qfi {unsigned}``: PPP, RQI and QoS flow identifier.
>>>>
>>>> - ``pppoes``, ``pppoed``: match PPPoE header.
>>>>
>>>> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
>>>> index 669e677e91..79106e0246 100644
>>>> --- a/lib/librte_ethdev/rte_flow.h
>>>> +++ b/lib/librte_ethdev/rte_flow.h
>>>> @@ -1392,14 +1392,14 @@ static const struct rte_flow_item_meta
>>> rte_flow_item_meta_mask = {
>>>> */
>>>> struct rte_flow_item_gtp_psc {
>>>> uint8_t pdu_type; /**< PDU type. */
>>>> - uint8_t qfi; /**< QoS flow identifier. */
>>>> + uint8_t qfi; /**< PPP, RQI, QoS flow identifier. */
>>>> };
>>>
>>> By design requirement, rte_flow_item_* should start with the relevant
>> protocol
>>> header.
>>>
>>> There is already a deprecation notice for using protocol header directly in
>> the
>>> rte_flow_item* [1] and Adrew/Ivan already fixed a few of them [2].
>>>
>>> Your patch is not directly related on this, but since you are touching to the
>>> flow_item, would you mind create a protocol struct for it first, and use it in
>>> the "struct rte_flow_item_gtp_psc"?
>>> So the protocol related update can be done in the protocol header, instead
>> of
>>> rte_flow struct.
>>>
>> +1
> Sure, I can create the new protocol and use it , and will send in V2. But, wouldn't it cause any ABI breakage ?
For the protocol header, it won't be problem since it is a new struct.
For the flow item struct, it may be, that is why need to use a union for now,
please check what Adrew/Ivan did.
>>
>>>
>>> [1]
>>>
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.d
>> pdk.
>>>
>> org%2Fdpdk%2Ftree%2Fdoc%2Fguides%2Frel_notes%2Fdeprecation.rst%3F
>> h%3
>>>
>> Dv21.02%23n99&data=04%7C01%7Corika%40nvidia.com%7C6391a4c064
>> 0
>>>
>> f4592b70b08d8f058e322%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0
>>>
>> %7C637523611870497932%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA
>> w
>>>
>> MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sda
>> t
>>>
>> a=vU%2F5oO47zb9erTnZL1pl9j0nHCKzea3NJgOeo1FTW0Q%3D&reserve
>> d=
>>> 0
>>>
>>> [2]
>>>
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.d
>> pdk.
>>> org%2Fnext%2Fdpdk-next-
>>>
>> net%2Fcommit%2F%3Fid%3D4a061a7bd70bfa023de23e8e654e&data=0
>> 4%
>>>
>> 7C01%7Corika%40nvidia.com%7C6391a4c0640f4592b70b08d8f058e322%7C43
>>>
>> 083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637523611870497932%7CU
>>>
>> nknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI
>> 6Ik
>>>
>> 1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=WurlQ5VSLqFGVthfRj363xZs
>> C
>>> No3xJuvxNQCFVcxdkk%3D&reserved=0
>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v4] build: alias default build as generic
@ 2021-03-29 10:49 3% ` Juraj Linkeš
2021-03-30 6:40 3% ` [dpdk-dev] [PATCH v5] " Juraj Linkeš
0 siblings, 1 reply; 200+ results
From: Juraj Linkeš @ 2021-03-29 10:49 UTC (permalink / raw)
To: bruce.richardson, thomas, david.marchand, Ruifeng.Wang,
Honnappa.Nagarahalli, jerinjacobk, ferruh.yigit
Cc: dev, Juraj Linkeš
The current machine='default' build name is not descriptive. The actual
default build is machine='native'. Add an alternative string which does
the same build and better describes what we're building:
machine='generic'. Leave machine='default' for backwards compatibility.
Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
config/arm/meson.build | 7 ++++---
config/meson.build | 13 +++++++------
devtools/test-meson-builds.sh | 14 +++++++-------
doc/guides/prog_guide/build-sdk-meson.rst | 4 ++--
meson_options.txt | 2 +-
5 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 00bc4610a3..aaed89bd5b 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation.
# Copyright(c) 2017 Cavium, Inc
+# Copyright(c) 2021 PANTHEON.tech s.r.o.
# common flags to all aarch64 builds, with lowest priority
flags_common = [
@@ -208,8 +209,8 @@ if dpdk_conf.get('RTE_ARCH_32')
else
# aarch64 build
if not meson.is_cross_build()
- if machine == 'default'
- # default build
+ if machine == 'generic'
+ # generic build
implementer_id = 'generic'
part_number = 'generic'
else
@@ -256,7 +257,7 @@ else
'(-Dmachine=generic) build.')
endif
- # use default flags with implementer flags
+ # use common flags with implementer flags
dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', [])
# apply supported machine args
diff --git a/config/meson.build b/config/meson.build
index 66a2edcc47..3268cf6804 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -70,21 +70,22 @@ else
machine = get_option('machine')
endif
-# machine type 'default' is special, it defaults to the per arch agreed common
-# minimal baseline needed for DPDK.
+# machine type 'generic' is special, it selects the per arch agreed common
+# minimal baseline needed for DPDK. Machine type 'default' is also supported
+# with the same meaning for backwards compatibility.
# That might not be the most optimized, but the most portable version while
# still being able to support the CPU features required for DPDK.
# This can be bumped up by the DPDK project, but it can never be an
# invariant like 'native'
-if machine == 'default'
+if machine == 'default' or machine == 'generic'
if host_machine.cpu_family().startswith('x86')
- # matches the old pre-meson build systems default
+ # matches the old pre-meson build systems generic machine
machine = 'corei7'
elif host_machine.cpu_family().startswith('arm')
machine = 'armv7-a'
elif host_machine.cpu_family().startswith('aarch')
- # arm64 manages defaults in config/arm/meson.build
- machine = 'default'
+ # arm64 manages generic config in config/arm/meson.build
+ machine = 'generic'
elif host_machine.cpu_family().startswith('ppc')
machine = 'power8'
endif
diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index c11ae87e0d..daf817ac3e 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -223,12 +223,12 @@ done
# test compilation with minimal x86 instruction set
# Set the install path for libraries to "lib" explicitly to prevent problems
# with pkg-config prefixes if installed in "lib/x86_64-linux-gnu" later.
-default_machine='nehalem'
-if ! check_cc_flags "-march=$default_machine" ; then
- default_machine='corei7'
+generic_machine='nehalem'
+if ! check_cc_flags "-march=$generic_machine" ; then
+ generic_machine='corei7'
fi
-build build-x86-default cc skipABI -Dcheck_includes=true \
- -Dlibdir=lib -Dmachine=$default_machine $use_shared
+build build-x86-generic cc skipABI -Dcheck_includes=true \
+ -Dlibdir=lib -Dmachine=$generic_machine $use_shared
# 32-bit with default compiler
if check_cc_flags '-m32' ; then
@@ -271,10 +271,10 @@ for f in $srcdir/config/ppc/ppc* ; do
build $targetdir $f ABI $use_shared
done
-# Test installation of the x86-default target, to be used for checking
+# Test installation of the x86-generic target, to be used for checking
# the sample apps build using the pkg-config file for cflags and libs
load_env cc
-build_path=$(readlink -f $builds_dir/build-x86-default)
+build_path=$(readlink -f $builds_dir/build-x86-generic)
export DESTDIR=$build_path/install
install_target $build_path $DESTDIR
pc_file=$(find $DESTDIR -name libdpdk.pc)
diff --git a/doc/guides/prog_guide/build-sdk-meson.rst b/doc/guides/prog_guide/build-sdk-meson.rst
index 3429e26479..c7e12eedfb 100644
--- a/doc/guides/prog_guide/build-sdk-meson.rst
+++ b/doc/guides/prog_guide/build-sdk-meson.rst
@@ -85,7 +85,7 @@ Project-specific options are passed used -Doption=value::
meson -Denable_docs=true fullbuild # build and install docs
- meson -Dmachine=default # use builder-independent baseline -march
+ meson -Dmachine=generic # use builder-independent baseline -march
meson -Ddisable_drivers=event/*,net/tap # disable tap driver and all
# eventdev PMDs for a smaller build
@@ -114,7 +114,7 @@ Examples of setting some of the same options using meson configure::
re-scan from meson.
.. note::
- machine=default uses a config that works on all supported architectures
+ machine=generic uses a config that works on all supported architectures
regardless of the capabilities of the machine where the build is happening.
As well as those settings taken from ``meson configure``, other options
diff --git a/meson_options.txt b/meson_options.txt
index 3b8c5d316d..686827bb1b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -21,7 +21,7 @@ option('include_subdir_arch', type: 'string', value: '',
option('kernel_dir', type: 'string', value: '',
description: 'Path to the kernel for building kernel modules. Headers must be in $kernel_dir or $kernel_dir/build. Modules will be installed in /lib/modules.')
option('machine', type: 'string', value: 'native',
- description: 'set the target machine type')
+ description: 'set the target machine type or "generic", a build usable on all machines of the build machine architecture or "native", which lets the compiler pick the architecture of the build machine.')
option('max_ethports', type: 'integer', value: 32,
description: 'maximum number of Ethernet devices')
option('max_lcores', type: 'integer', value: 128,
--
2.20.1
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] ethdev: update qfi definition
@ 2021-03-29 9:06 3% ` Raslan Darawsheh
2021-03-29 11:14 0% ` Ferruh Yigit
0 siblings, 1 reply; 200+ results
From: Raslan Darawsheh @ 2021-03-29 9:06 UTC (permalink / raw)
To: Ori Kam, Ferruh Yigit, dev, Andrew Rybchenko, Ivan Malov
Cc: Slava Ovsiienko, Shiri Kuzin, ying.a.wang, stable,
NBU-Contact-Thomas Monjalon, Olivier Matz
Hi,
> -----Original Message-----
> From: Ori Kam <orika@nvidia.com>
> Sent: Monday, March 29, 2021 11:53 AM
> To: Ferruh Yigit <ferruh.yigit@intel.com>; Raslan Darawsheh
> <rasland@nvidia.com>; dev@dpdk.org; Andrew Rybchenko
> <andrew.rybchenko@oktetlabs.ru>; Ivan Malov <ivan.malov@oktetlabs.ru>
> Cc: Slava Ovsiienko <viacheslavo@nvidia.com>; Shiri Kuzin
> <shirik@nvidia.com>; ying.a.wang@intel.com; stable@dpdk.org; NBU-
> Contact-Thomas Monjalon <thomas@monjalon.net>; Olivier Matz
> <olivier.matz@6wind.com>
> Subject: RE: [dpdk-dev] [PATCH] ethdev: update qfi definition
>
> Hi
>
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> > Subject: Re: [dpdk-dev] [PATCH] ethdev: update qfi definition
> >
> > On 3/23/2021 12:11 PM, Raslan Darawsheh wrote:
> > > qfi field is 8 bits which represent single bit for
> > > PPP (paging Policy Presence) single bit for RQI
> > > (Reflective QoS Indicator) and 6 bits for qfi
> > > (QoS Flow Identifier)
> >
> > Can you please put a reference for above information?
> > >
Sure, will send in V2,
> > > This update the doxygen format and the mask for qfi
> > > to properly identify the full 8 bits of the field.
> > >
> > > note: changing the default mask would cause different
> > > patterns generated by testpmd.
> > >
> > > Fixes: 346553db5bd1 ("ethdev: add GTP extension header to flow API")
> > > Cc: ying.a.wang@intel.com
> > > Cc: stable@dpdk.org
> > >
> > > Signed-off-by: Raslan Darawsheh <rasland@nvidia.com>
> > > ---
> > > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 3 ++-
> > > lib/librte_ethdev/rte_flow.h | 4 ++--
> > > 2 files changed, 4 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > index f59eb8a27d..dd39c4c3c2 100644
> > > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
> > > @@ -3742,7 +3742,8 @@ This section lists supported pattern items and
> their
> > attributes, if any.
> > > - ``gtp_psc``: match GTP PDU extension header with type 0x85.
> > >
> > > - ``pdu_type {unsigned}``: PDU type.
> > > - - ``qfi {unsigned}``: QoS flow identifier.
> > > +
> > > + - ``qfi {unsigned}``: PPP, RQI and QoS flow identifier.
> > >
> > > - ``pppoes``, ``pppoed``: match PPPoE header.
> > >
> > > diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> > > index 669e677e91..79106e0246 100644
> > > --- a/lib/librte_ethdev/rte_flow.h
> > > +++ b/lib/librte_ethdev/rte_flow.h
> > > @@ -1392,14 +1392,14 @@ static const struct rte_flow_item_meta
> > rte_flow_item_meta_mask = {
> > > */
> > > struct rte_flow_item_gtp_psc {
> > > uint8_t pdu_type; /**< PDU type. */
> > > - uint8_t qfi; /**< QoS flow identifier. */
> > > + uint8_t qfi; /**< PPP, RQI, QoS flow identifier. */
> > > };
> >
> > By design requirement, rte_flow_item_* should start with the relevant
> protocol
> > header.
> >
> > There is already a deprecation notice for using protocol header directly in
> the
> > rte_flow_item* [1] and Adrew/Ivan already fixed a few of them [2].
> >
> > Your patch is not directly related on this, but since you are touching to the
> > flow_item, would you mind create a protocol struct for it first, and use it in
> > the "struct rte_flow_item_gtp_psc"?
> > So the protocol related update can be done in the protocol header, instead
> of
> > rte_flow struct.
> >
> +1
Sure, I can create the new protocol and use it , and will send in V2. But, wouldn't it cause any ABI breakage ?
>
> >
> > [1]
> >
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.d
> pdk.
> >
> org%2Fdpdk%2Ftree%2Fdoc%2Fguides%2Frel_notes%2Fdeprecation.rst%3F
> h%3
> >
> Dv21.02%23n99&data=04%7C01%7Corika%40nvidia.com%7C6391a4c064
> 0
> >
> f4592b70b08d8f058e322%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0
> >
> %7C637523611870497932%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA
> w
> >
> MDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sda
> t
> >
> a=vU%2F5oO47zb9erTnZL1pl9j0nHCKzea3NJgOeo1FTW0Q%3D&reserve
> d=
> > 0
> >
> > [2]
> >
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.d
> pdk.
> > org%2Fnext%2Fdpdk-next-
> >
> net%2Fcommit%2F%3Fid%3D4a061a7bd70bfa023de23e8e654e&data=0
> 4%
> >
> 7C01%7Corika%40nvidia.com%7C6391a4c0640f4592b70b08d8f058e322%7C43
> >
> 083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637523611870497932%7CU
> >
> nknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI
> 6Ik
> >
> 1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=WurlQ5VSLqFGVthfRj363xZs
> C
> > No3xJuvxNQCFVcxdkk%3D&reserved=0
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [EXTERNAL] Re: Handling missing export functions in MSVC linkage
2021-03-26 8:39 0% ` Thomas Monjalon
@ 2021-03-26 14:14 0% ` Tyler Retzlaff
0 siblings, 0 replies; 200+ results
From: Tyler Retzlaff @ 2021-03-26 14:14 UTC (permalink / raw)
To: thomas, Dmitry Kozlyuk, ranjit.menon, Kadam, Pallavi,
Harini Ramakrishnan, navasile, Dmitry Malloy
Cc: dev, talshn, bruce.richardson, David Marchand, Omar Cardona
Unless I misunderstood the last status of this issue was that it was desired empty stubs that fail at runtime as opposed to conditionally generating exports.
Is this no longer the case?
-----Original Message-----
From: Thomas Monjalon <thomas@monjalon.net>
Sent: Friday, March 26, 2021 1:40 AM
To: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>; ranjit.menon <ranjit.menon@intel.com>; Kadam, Pallavi <pallavi.kadam@intel.com>; Harini Ramakrishnan <Harini.Ramakrishnan@microsoft.com>; navasile@linux.microsoft.com; Dmitry Malloy <dmitrym@microsoft.com>
Cc: dev@dpdk.org; talshn <talshn@mellanox.com>; bruce.richardson@intel.com; David Marchand <david.marchand@redhat.com>; Tyler Retzlaff <roretzla@microsoft.com>; Omar Cardona <ocardona@microsoft.com>
Subject: [EXTERNAL] Re: [dpdk-dev] Handling missing export functions in MSVC linkage
08/06/2020 10:33, David Marchand:
> On Mon, Jun 8, 2020 at 2:09 AM Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> wrote:
> > On Sun, 7 Jun 2020 12:26:56 +0000
> > If you create a .def manually, it will override the generation from
> > .map. Of cause, this adds manual work and ideally all .def files should be generated.
>
> On this topic, I just noticed that a patch of mine, that removed
> rte_eal_get_configuration() from the stable ABI, missed the
> declaration in rte_eal_exports.def.
> Probably worth adding a check in devtools/, to avoid further misalignment.
The .def file keeps being out of sync.
We need a script to avoid forgetting the sync, or/and we must generate this .def from the .map.
Ideally the full EAL API (except VFIO) should be implemented for Windows.
This situation is waiting for a solution for too much time.
Windows maintainers, please solve it.
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v4 00/10] eal: Add new API for threading
@ 2021-03-26 23:52 2% ` Narcisa Ana Maria Vasile
0 siblings, 0 replies; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-03-26 23:52 UTC (permalink / raw)
To: dev, thomas, dmitry.kozliuk, khot, navasile, dmitrym, roretzla,
talshn, ocardona
Cc: bruce.richardson, david.marchand, pallavi.kadam
From: Narcisa Vasile <navasile@microsoft.com>
EAL thread API
**Problem Statement**
DPDK currently uses the pthread interface to create and manage threads.
Windows does not support the POSIX thread programming model, so it currently
relies on a header file that hides the Windows calls under
pthread matched interfaces. Given that EAL should isolate the environment
specifics from the applications and libraries and mediate
all the communication with the operating systems, a new EAL interface
is needed for thread management.
**Goals**
* Introduce a generic EAL API for threading support that will remove
the current Windows pthread.h shim.
* Replace references to pthread_* across the DPDK codebase with the new
RTE_THREAD_* API.
* Allow users to choose between using the RTE_THREAD_* API or a
3rd party thread library through a configuration option.
**Design plan**
New API main files:
* rte_thread.h (librte_eal/include)
* rte_thread_types.h (librte_eal/include)
* rte_thread_windows_types.h (librte_eal/windows/include)
* rte_thread.c (librte_eal/windows)
* rte_thread.c (librte_eal/common)
For flexibility, the user is offered the option of either using the RTE_THREAD_* API or
a 3rd party thread library, through a meson flag “use_external_thread_lib”.
By default, this flag is set to FALSE, which means Windows libraries and applications
will use the RTE_THREAD_* API for managing threads.
If compiling on Windows and the “use_external_thread_lib” is *not* set,
the following files will be parsed:
* include/rte_thread.h
* windows/include/rte_thread_windows_types.h
* windows/rte_thread.c
In all other cases, the compilation/parsing includes the following files:
* include/rte_thread.h
* include/rte_thread_types.h
* common/rte_thread.c
**A schematic example of the design**
--------------------------------------------------
lib/librte_eal/include/rte_thread.h
int rte_thread_create();
lib/librte_eal/common/rte_thread.c
int rte_thread_create()
{
return pthread_create();
}
lib/librte_eal/windows/rte_thread.c
int rte_thread_create()
{
return CreateThread();
}
lib/librte_eal/windows/meson.build
if get_option('use_external_thread_lib')
sources += 'librte_eal/common/rte_thread.c'
else
sources += 'librte_eal/windows/rte_thread.c'
endif
-----------------------------------------------------
**Thread attributes**
When or after a thread is created, specific characteristics of the thread
can be adjusted. Given that the thread characteristics that are of interest
for DPDK applications are affinity and priority, the following structure
that represents thread attributes has been defined:
typedef struct
{
enum rte_thread_priority priority;
rte_cpuset_t cpuset;
} rte_thread_attr_t;
The *rte_thread_create()* function can optionally receive an rte_thread_attr_t
object that will cause the thread to be created with the affinity and priority
described by the attributes object. If no rte_thread_attr_t is passed
(parameter is NULL), the default affinity and priority are used.
An rte_thread_attr_t object can also be set to the default values
by calling *rte_thread_attr_init()*.
*Priority* is represented through an enum that currently advertises
two values for priority:
- RTE_THREAD_PRIORITY_NORMAL
- RTE_THREAD_PRIORITY_REALTIME_CRITICAL
The enum can be extended to allow for multiple priority levels.
rte_thread_set_priority - sets the priority of a thread
rte_thread_attr_set_priority - updates an rte_thread_attr_t object
with a new value for priority
The user can choose thread priority through an EAL parameter,
when starting an application. The two options above are available:
--thread-prio normal
--thread-prio realtime
Example:
./dpdk-l2fwd -l 0-3 -n 4 –thread-prio normal -- -q 8 -p ffff
*Affinity* is described by the already known “rte_cpuset_t” type.
rte_thread_attr_set/get_affinity - sets/gets the affinity field in a
rte_thread_attr_t object
rte_thread_set/get_affinity – sets/gets the affinity of a thread
**Errors**
A translation function that maps Windows error codes to errno-style
error codes is provided.
**Future work**
Note that this patchset was focused on introducing new API that will
remove the Windows pthread.h shim. In DPDK, there are still a few references
to pthread_* that were not implemented in the shim.
The long term plan is for EAL to provide full threading support:
* Adding support for conditional variables
* Additional functionality offered by pthread_* (such as pthread_setname_np, etc.)
* Static mutex initializers are not used on Windows. If we must continue
using them, they need to be platform dependent and an implementation will
need to be provided for Windows.
v4:
- fix function description
- rebase
v3:
- rebase
v2:
- revert changes that break ABI
- break up changes into smaller patches
- fix coding style issues
- fix issues with errors
- fix parameter type in examples/kni.c
Narcisa Vasile (10):
eal: add thread id and simple thread functions
eal: add thread attributes
windows/eal: translate Windows errors to errno-style errors
eal: implement functions for thread affinity management
eal: implement thread priority management functions
eal: add thread lifetime management
eal: implement functions for mutex management
eal: implement functions for thread barrier management
eal: add EAL argument for setting thread priority
Enable the new EAL thread API
app/test/process.h | 6 +-
app/test/test_lcores.c | 16 +-
app/test/test_link_bonding.c | 10 +-
app/test/test_lpm_perf.c | 12 +-
config/meson.build | 4 +
drivers/bus/dpaa/base/qbman/bman_driver.c | 6 +-
drivers/bus/dpaa/base/qbman/dpaa_sys.c | 14 +-
drivers/bus/dpaa/base/qbman/process.c | 6 +-
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 6 +-
drivers/compress/mlx5/mlx5_compress.c | 10 +-
drivers/event/dlb/pf/base/dlb_osdep.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/af_xdp/rte_eth_af_xdp.c | 18 +-
drivers/net/ark/ark_ethdev.c | 4 +-
drivers/net/atlantic/atl_ethdev.c | 4 +-
drivers/net/atlantic/atl_types.h | 5 +-
.../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 24 +-
drivers/net/axgbe/axgbe_dev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.h | 8 +-
drivers/net/axgbe/axgbe_i2c.c | 4 +-
drivers/net/axgbe/axgbe_mdio.c | 8 +-
drivers/net/axgbe/axgbe_phy_impl.c | 6 +-
drivers/net/bnxt/bnxt.h | 16 +-
drivers/net/bnxt/bnxt_cpr.c | 4 +-
drivers/net/bnxt/bnxt_ethdev.c | 52 +-
drivers/net/bnxt/bnxt_irq.c | 8 +-
drivers/net/bnxt/bnxt_reps.c | 10 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 34 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 4 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 24 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h | 2 +-
drivers/net/ena/base/ena_plat_dpdk.h | 8 +-
drivers/net/enic/enic.h | 2 +-
drivers/net/hns3/hns3_ethdev.h | 2 +-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_mbx.c | 2 +-
drivers/net/ice/ice_dcf_parent.c | 4 +-
drivers/net/ipn3ke/ipn3ke_representor.c | 6 +-
drivers/net/ixgbe/ixgbe_ethdev.c | 2 +-
drivers/net/ixgbe/ixgbe_ethdev.h | 2 +-
drivers/net/kni/rte_eth_kni.c | 6 +-
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.c | 20 +-
drivers/net/mlx5/mlx5.h | 2 +-
drivers/net/mlx5/mlx5_txpp.c | 8 +-
drivers/net/mlx5/windows/mlx5_flow_os.c | 10 +-
drivers/net/mlx5/windows/mlx5_os.c | 2 +-
drivers/net/qede/base/bcm_osal.h | 8 +-
drivers/net/vhost/rte_eth_vhost.c | 22 +-
.../net/virtio/virtio_user/virtio_user_dev.c | 30 +-
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 8 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 36 +-
drivers/vdpa/mlx5/mlx5_vdpa.c | 24 +-
drivers/vdpa/mlx5/mlx5_vdpa.h | 6 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 67 +--
examples/kni/main.c | 6 +-
examples/vhost/main.c | 2 +-
examples/vhost_blk/vhost_blk.c | 10 +-
lib/librte_eal/common/eal_common_options.c | 36 +-
lib/librte_eal/common/eal_common_proc.c | 48 +-
lib/librte_eal/common/eal_common_thread.c | 43 +-
lib/librte_eal/common/eal_common_trace.c | 2 +-
lib/librte_eal/common/eal_internal_cfg.h | 2 +
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_private.h | 2 +-
lib/librte_eal/common/malloc_mp.c | 32 +-
lib/librte_eal/common/meson.build | 1 +
lib/librte_eal/common/rte_thread.c | 342 ++++++++++++
lib/librte_eal/freebsd/eal.c | 37 +-
lib/librte_eal/freebsd/eal_alarm.c | 12 +-
lib/librte_eal/freebsd/eal_interrupts.c | 4 +-
lib/librte_eal/freebsd/eal_thread.c | 8 +-
lib/librte_eal/include/meson.build | 1 +
lib/librte_eal/include/rte_lcore.h | 8 +-
lib/librte_eal/include/rte_per_lcore.h | 2 -
lib/librte_eal/include/rte_thread.h | 337 ++++++++++-
lib/librte_eal/include/rte_thread_types.h | 20 +
lib/librte_eal/linux/eal.c | 42 +-
lib/librte_eal/linux/eal_alarm.c | 10 +-
lib/librte_eal/linux/eal_interrupts.c | 4 +-
lib/librte_eal/linux/eal_thread.c | 8 +-
lib/librte_eal/linux/eal_timer.c | 2 +-
lib/librte_eal/rte_eal_exports.def | 20 +
lib/librte_eal/unix/meson.build | 1 -
lib/librte_eal/unix/rte_thread.c | 92 ---
lib/librte_eal/version.map | 21 +
lib/librte_eal/windows/eal.c | 26 +-
lib/librte_eal/windows/eal_interrupts.c | 6 +-
lib/librte_eal/windows/eal_lcore.c | 170 ++++--
lib/librte_eal/windows/eal_thread.c | 24 +-
lib/librte_eal/windows/eal_windows.h | 20 +-
lib/librte_eal/windows/include/meson.build | 1 +
lib/librte_eal/windows/include/pthread.h | 186 -------
.../include/rte_windows_thread_types.h | 19 +
lib/librte_eal/windows/include/sched.h | 2 +-
lib/librte_eal/windows/meson.build | 7 +-
lib/librte_eal/windows/rte_thread.c | 522 +++++++++++++++++-
lib/librte_ethdev/rte_ethdev.c | 4 +-
lib/librte_ethdev/rte_ethdev_core.h | 3 +-
lib/librte_ethdev/rte_flow.c | 4 +-
.../rte_event_eth_rx_adapter.c | 6 +-
lib/librte_vhost/fd_man.c | 40 +-
lib/librte_vhost/fd_man.h | 6 +-
lib/librte_vhost/socket.c | 124 +++--
lib/librte_vhost/vhost.c | 10 +-
meson_options.txt | 2 +
108 files changed, 2038 insertions(+), 929 deletions(-)
create mode 100644 lib/librte_eal/common/rte_thread.c
create mode 100644 lib/librte_eal/include/rte_thread_types.h
delete mode 100644 lib/librte_eal/unix/rte_thread.c
delete mode 100644 lib/librte_eal/windows/include/pthread.h
create mode 100644 lib/librte_eal/windows/include/rte_windows_thread_types.h
--
2.30.0.vfs.0.2
^ permalink raw reply [relevance 2%]
* [dpdk-dev] [PATCH v8 0/8] Introduce event vectorization
2021-03-25 17:10 4% ` [dpdk-dev] [PATCH v7 " pbhagavatula
@ 2021-03-26 14:08 4% ` pbhagavatula
2021-03-30 8:22 4% ` [dpdk-dev] [PATCH v9 " pbhagavatula
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-26 14:08 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~742.3% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without this patchset applied:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.071 mpps
With the patchset applied and Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.123 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
42.715 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v8 Changes:
- Fix incorrect shift for vector timeout interval.(Jay)
- Code reallocation.(Jay)
v7 Changes:
- More doxygen fixes.(Jay)
- Reduce code duplication in 4/8.(Jay)
v6 Changes:
- Make rte_errno sign consistant.(Jay)
- Gramatical and doxygen fixes. (Jay)
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 318 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 114 ++++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1534 insertions(+), 91 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 13:02 3% ` Kinsella, Ray
@ 2021-03-26 10:50 0% ` Jerin Jacob
0 siblings, 0 replies; 200+ results
From: Jerin Jacob @ 2021-03-26 10:50 UTC (permalink / raw)
To: Kinsella, Ray, Richardson, Bruce, Neil Horman
Cc: Thomas Monjalon, Pavan Nikhilesh, Jerin Jacob, dpdk-dev,
Harman Kalra, Nithin Dabilpuram, David Marchand
On Thu, Mar 25, 2021 at 6:32 PM Kinsella, Ray <mdr@ashroe.eu> wrote:
>
>
>
> On 25/03/2021 12:58, Jerin Jacob wrote:
> > On Thu, Mar 25, 2021 at 6:17 PM Kinsella, Ray <mdr@ashroe.eu> wrote:
> >>
> >>
> >>
> >> On 25/03/2021 12:46, Jerin Jacob wrote:
> >>> On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> >>>>
> >>>> 25/03/2021 11:58, Kinsella, Ray:
> >>>>> On 25/03/2021 10:46, Thomas Monjalon wrote:
> >>>>>> 25/03/2021 11:42, Thomas Monjalon:
> >>>>>>> 24/03/2021 11:55, Jerin Jacob:
> >>>>>>>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
> >>>>>>>>>
> >>>>>>>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>>>>>>>
> >>>>>>>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
> >>>>>>>>>
> >>>>>>>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>>>>>>
> >>>>>>>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
> >>>>>>>
> >>>>>>> I've reorganized the commits per family of drivers,
> >>>>>>> so it makes more sense than grouping per driver class
> >>>>>>> with "common/octeontx" for title for all:
> >>>>>>>
> >>>>>>> net/thunderx: enable build only on 64-bit Linux
> >>>>>>> common/octeontx: enable build only on 64-bit Linux
> >>>>>>> common/octeontx2: enable build only on 64-bit Linux
> >>>>>>>
> >>>>>>> and applied.
> >>>>>>
> >>>>>> Actually not applied yet.
> >>>>>> I'm not sure what to do for the ABI check which is broken
> >>>>>> because some drivers are not compiled anymore in 32-bit build.
> >>>>>> I've workarounded locally by removing the dump files in the reference build.
> >>>>>> Should we add an exception in libabigail.abignore?
> >>>>>>
> >>>>> In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
> >>>>>
> >>>>> From the policy ...
> >>>>> "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
> >>>>
> >>>> So the patches should wait 21.11.
> >>>> Everybody agree?
> >>>
> >>> Looks good to me to postpone.
> >>>
> >>> @Ray Kinsella @Thomas Monjalon @McDaniel, Timothy @David Marchand @Neil Horman
> >>>
> >>> Currently, I merged DLB v1 driver removal patch to next-eventdev. Is
> >>> this ABI breakge[1]?
> >>>
> >>> http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
> >>>
> >>> [1]
> >>> From the policy ...
> >>> "Updates to the minimum hardware requirements, which drop support for
> >>> hardware which was previously supported, should be treated as an ABI
> >>> change."
> >>
> >> +1
> >
> > Is +1 for not to remove the dlb driver or remove it?
> >
>
> You'll note the original reply pointing at the ABI Policy was from myself.
> So I would be in favor of retention until 21.11.
>
> Thats said...
>
> We should think about making the rules less strict for 32bit in future, from 21.11 onwards perhaps.
> How many OS Vendors are shipping 32bit OSs these days for example?
Agree on 32bit.
The DLB driver removal patch from @McDaniel, Timothy
http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
is deleting the complete driver. So it does not look like it is
updating the minimum HW requirements
as mentioned in the policy.
So IMO, it is OK to accept his patch for 21.05(ie. remove the driver).
Let me know if there is any objection on this?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] Handling missing export functions in MSVC linkage
@ 2021-03-26 8:39 0% ` Thomas Monjalon
2021-03-26 14:14 0% ` [dpdk-dev] [EXTERNAL] " Tyler Retzlaff
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-26 8:39 UTC (permalink / raw)
To: Dmitry Kozlyuk, ranjit.menon, pallavi.kadam, Harini Ramakrishnan,
navasile, Dmitry Malloy (MESHCHANINOV)
Cc: dev, Tal Shnaiderman, bruce.richardson, David Marchand,
Tyler Retzlaff, Omar Cardona
08/06/2020 10:33, David Marchand:
> On Mon, Jun 8, 2020 at 2:09 AM Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> wrote:
> > On Sun, 7 Jun 2020 12:26:56 +0000
> > If you create a .def manually, it will override the generation from .map. Of
> > cause, this adds manual work and ideally all .def files should be generated.
>
> On this topic, I just noticed that a patch of mine, that removed
> rte_eal_get_configuration() from the stable ABI, missed the
> declaration in rte_eal_exports.def.
> Probably worth adding a check in devtools/, to avoid further misalignment.
The .def file keeps being out of sync.
We need a script to avoid forgetting the sync,
or/and we must generate this .def from the .map.
Ideally the full EAL API (except VFIO) should be implemented
for Windows.
This situation is waiting for a solution for too much time.
Windows maintainers, please solve it.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Tal Shnaiderman
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 2/2] eal: rename key opaque pointer and functions in TLS API Tal Shnaiderman
@ 2021-03-26 8:24 0% ` Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-26 8:24 UTC (permalink / raw)
To: Tal Shnaiderman
Cc: dev, pallavi.kadam, dmitry.kozliuk, navasile, dmitrym,
david.marchand, anatoly.burakov, vladimir.medvedkin, mb
16/03/2021 14:28, Tal Shnaiderman:
> ---
> v6: fix misalignment in comment fix from v5 and missing NL in RN [Thomas]
> v5: shorten docu comment on rte_errno and add ABI change info to release note [Thomas]
> v4: replace errno EOTHER with ENOEXEC as EOTHER is undefined in unix.
> v3: -Unify rte_errno values to a generic errno for OS compatibility [DmitryK]
> -Rename the TLS function to avoid redundancy[MortenB].
> v2: Rename key to avoid redundancy[MortenB].
> ---
>
> Tal Shnaiderman (2):
> eal: error number enhancement for thread TLS API
> eal: rename key opaque pointer and functions in TLS API
Applied, thanks
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ci: remove aarch64 from Travis jobs
2021-03-25 16:40 3% ` Aaron Conole
@ 2021-03-25 17:11 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-25 17:11 UTC (permalink / raw)
To: honnappa.nagarahalli, david.marchand, ruifeng.wang, Aaron Conole; +Cc: dev
25/03/2021 17:40, Aaron Conole:
> Thomas Monjalon <thomas@monjalon.net> writes:
> >> Travis is not reliable for native Arm and PPC:
> >> https://travis-ci.community/t/disk-quota-exceeded-on-arm64/7619/6
> >>
> >> In order to get reliable Travis reports,
> >> the use of Arm machines is removed until Travis fixes it.
> >>
> >> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> >
> > We managed without applying this patch.
> >
> > After one year passed, what is the situation today regarding Travis?
> > Can we rely on Travis service?
>
> So far, yes.
>
> > For which workload? Which architecture?
>
> I think for all of them. Looking at even the failures which pop up for
> the latest patches, they seem like real failures.
>
> ex:
> https://travis-ci.com/github/ovsrobot/dpdk/jobs/493722400
> https://travis-ci.com/github/ovsrobot/dpdk/jobs/493688879
> https://travis-ci.com/github/ovsrobot/dpdk/jobs/493624012
> https://travis-ci.com/github/ovsrobot/dpdk/jobs/493611597
>
> These are ABI, and doc failures - different arches, etc.
>
> Seems like it's quite usable.
>
> > Aaron, what do you recommend?
>
> I think we should drop this patch - Travis continues to be useful even
> for individual developers checking their own results. It seems the
> service works quite a bit better now for the project as well, thanks to
> Honnappa and other ARM folks for working with them.
Thanks all, patch classified as "Rejected".
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v7 0/8] Introduce event vectorization
2021-03-24 19:28 4% ` [dpdk-dev] [PATCH v6 " pbhagavatula
@ 2021-03-25 17:10 4% ` pbhagavatula
2021-03-26 14:08 4% ` [dpdk-dev] [PATCH v8 " pbhagavatula
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-25 17:10 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~742.3% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without this patchset applied:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.071 mpps
With the patchset applied and Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.123 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
42.715 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v7 Changes:
- More doxygen fixes.(Jay)
- Reduce code duplication in 4/8.(Jay)
v6 Changes:
- Make rte_errno sign consistant.(Jay)
- Gramatical and doxygen fixes. (Jay)
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 311 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 114 ++++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1531 insertions(+), 87 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH] ci: remove aarch64 from Travis jobs
@ 2021-03-25 16:40 3% ` Aaron Conole
2021-03-25 17:11 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Aaron Conole @ 2021-03-25 16:40 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: honnappa.nagarahalli, dev, david.marchand, ruifeng.wang
Thomas Monjalon <thomas@monjalon.net> writes:
> 16/04/2020 13:00, Thomas Monjalon:
>> Travis is not reliable for native Arm and PPC:
>> https://travis-ci.community/t/disk-quota-exceeded-on-arm64/7619/6
>>
>> In order to get reliable Travis reports,
>> the use of Arm machines is removed until Travis fixes it.
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>
> We managed without applying this patch.
>
> After one year passed, what is the situation today regarding Travis?
> Can we rely on Travis service?
So far, yes.
> For which workload? Which architecture?
I think for all of them. Looking at even the failures which pop up for
the latest patches, they seem like real failures.
ex:
https://travis-ci.com/github/ovsrobot/dpdk/jobs/493722400
https://travis-ci.com/github/ovsrobot/dpdk/jobs/493688879
https://travis-ci.com/github/ovsrobot/dpdk/jobs/493624012
https://travis-ci.com/github/ovsrobot/dpdk/jobs/493611597
These are ABI, and doc failures - different arches, etc.
Seems like it's quite usable.
> Aaron, what do you recommend?
I think we should drop this patch - Travis continues to be useful even
for individual developers checking their own results. It seems the
service works quite a bit better now for the project as well, thanks to
Honnappa and other ARM folks for working with them.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 14:57 0% ` Thomas Monjalon
@ 2021-03-25 15:01 0% ` David Marchand
0 siblings, 0 replies; 200+ results
From: David Marchand @ 2021-03-25 15:01 UTC (permalink / raw)
To: Thomas Monjalon, Pavan Nikhilesh
Cc: Jerin Jacob, Kinsella, Ray, dpdk-dev, Harman Kalra,
Nithin Dabilpuram, Jerin Jacob
On Thu, Mar 25, 2021 at 3:57 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> > > > In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
> > > >
> > > > From the policy ...
> > > > "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
> > >
> > > So the patches should wait 21.11.
> > > Everybody agree?
> >
> > Looks good to me to postpone.
>
> The v2 is waiting in patchwork with the status "Deferred":
> https://patches.dpdk.org/project/dpdk/list/?series=15885&state=*
We need a deprecation notice.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 12:46 4% ` Jerin Jacob
2021-03-25 12:47 0% ` Kinsella, Ray
@ 2021-03-25 14:57 0% ` Thomas Monjalon
2021-03-25 15:01 0% ` David Marchand
1 sibling, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-25 14:57 UTC (permalink / raw)
To: Pavan Nikhilesh
Cc: dev, Jerin Jacob, Kinsella, Ray, dpdk-dev, Harman Kalra,
Nithin Dabilpuram, David Marchand, Jerin Jacob
25/03/2021 13:46, Jerin Jacob:
> On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> > 25/03/2021 11:58, Kinsella, Ray:
> > > On 25/03/2021 10:46, Thomas Monjalon wrote:
> > > > 25/03/2021 11:42, Thomas Monjalon:
> > > >> I've reorganized the commits per family of drivers,
> > > >> so it makes more sense than grouping per driver class
> > > >> with "common/octeontx" for title for all:
> > > >>
> > > >> net/thunderx: enable build only on 64-bit Linux
> > > >> common/octeontx: enable build only on 64-bit Linux
> > > >> common/octeontx2: enable build only on 64-bit Linux
> > > >>
> > > >> and applied.
> > > >
> > > > Actually not applied yet.
> > > > I'm not sure what to do for the ABI check which is broken
> > > > because some drivers are not compiled anymore in 32-bit build.
> > > > I've workarounded locally by removing the dump files in the reference build.
> > > > Should we add an exception in libabigail.abignore?
> > > >
> > > In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
> > >
> > > From the policy ...
> > > "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
> >
> > So the patches should wait 21.11.
> > Everybody agree?
>
> Looks good to me to postpone.
The v2 is waiting in patchwork with the status "Deferred":
https://patches.dpdk.org/project/dpdk/list/?series=15885&state=*
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH 21.11 v2 0/3] octeontx build only on 64-bit Linux
@ 2021-03-25 14:52 3% ` Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-25 14:52 UTC (permalink / raw)
To: dev
This is a reorg of the patches from Pavan.
It has been discussed that it should wait for DPDK 21.11
for ABI compatibility reason.
Pavan Nikhilesh (3):
net/thunderx: enable build only on 64-bit Linux
common/octeontx: enable build only on 64-bit Linux
common/octeontx2: enable build only on 64-bit Linux
drivers/common/octeontx/meson.build | 6 ++++++
drivers/common/octeontx2/meson.build | 4 ++--
drivers/compress/octeontx/meson.build | 6 ++++++
drivers/crypto/octeontx/meson.build | 7 +++++--
drivers/event/octeontx/meson.build | 6 ++++++
drivers/event/octeontx2/meson.build | 4 ++--
drivers/mempool/octeontx/meson.build | 5 +++--
drivers/mempool/octeontx2/meson.build | 9 ++-------
drivers/net/octeontx/meson.build | 4 ++--
drivers/net/octeontx2/meson.build | 10 ++--------
drivers/net/thunderx/meson.build | 4 ++--
drivers/raw/octeontx2_dma/meson.build | 10 ++++++----
12 files changed, 44 insertions(+), 31 deletions(-)
--
2.30.1
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH v2 2/4] telemetry: make the legacy registration function internal
@ 2021-03-25 13:57 10% ` Bruce Richardson
0 siblings, 0 replies; 200+ results
From: Bruce Richardson @ 2021-03-25 13:57 UTC (permalink / raw)
To: dev; +Cc: Bruce Richardson, Ciara Power, Kevin Laatz, Ray Kinsella, Neil Horman
The function for registration of callbacks for legacy telemetry was
documented as internal-only in the API documents, but marked as
experimental in the version.map file. Since this is an internal-only
function, for consistency we update the version mapping to have it as
internal.
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Ciara Power <ciara.power@intel.com>
---
doc/guides/rel_notes/release_21_05.rst | 5 +++++
lib/librte_telemetry/rte_telemetry_legacy.h | 2 +-
lib/librte_telemetry/version.map | 2 +-
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 8e686cc62..fb965fec3 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -148,6 +148,11 @@ ABI Changes
* No ABI change that would break compatibility with 20.11.
+* The experimental function ``rte_telemetry_legacy_register`` has been
+ removed from the public API and is now an internal-only function. This
+ function was already marked as internal in the API documentation for it,
+ and was not for use by external applications.
+
Known Issues
------------
diff --git a/lib/librte_telemetry/rte_telemetry_legacy.h b/lib/librte_telemetry/rte_telemetry_legacy.h
index c83f9a8d9..fb4474018 100644
--- a/lib/librte_telemetry/rte_telemetry_legacy.h
+++ b/lib/librte_telemetry/rte_telemetry_legacy.h
@@ -78,7 +78,7 @@ legacy_client_handler(void *sock_id);
* @return
* -ENOENT if max callbacks limit has been reached.
*/
-__rte_experimental
+__rte_internal
int
rte_telemetry_legacy_register(const char *cmd,
enum rte_telemetry_legacy_data_req data_req,
diff --git a/lib/librte_telemetry/version.map b/lib/librte_telemetry/version.map
index ec0ebc1be..bde80ce29 100644
--- a/lib/librte_telemetry/version.map
+++ b/lib/librte_telemetry/version.map
@@ -14,12 +14,12 @@ EXPERIMENTAL {
rte_tel_data_start_array;
rte_tel_data_start_dict;
rte_tel_data_string;
- rte_telemetry_legacy_register;
rte_telemetry_register_cmd;
local: *;
};
INTERNAL {
+ rte_telemetry_legacy_register;
rte_telemetry_init;
};
--
2.27.0
^ permalink raw reply [relevance 10%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 12:58 0% ` Jerin Jacob
@ 2021-03-25 13:02 3% ` Kinsella, Ray
2021-03-26 10:50 0% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: Kinsella, Ray @ 2021-03-25 13:02 UTC (permalink / raw)
To: Jerin Jacob
Cc: Thomas Monjalon, Pavan Nikhilesh, Jerin Jacob, dpdk-dev,
Harman Kalra, Nithin Dabilpuram, David Marchand
On 25/03/2021 12:58, Jerin Jacob wrote:
> On Thu, Mar 25, 2021 at 6:17 PM Kinsella, Ray <mdr@ashroe.eu> wrote:
>>
>>
>>
>> On 25/03/2021 12:46, Jerin Jacob wrote:
>>> On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>>>>
>>>> 25/03/2021 11:58, Kinsella, Ray:
>>>>> On 25/03/2021 10:46, Thomas Monjalon wrote:
>>>>>> 25/03/2021 11:42, Thomas Monjalon:
>>>>>>> 24/03/2021 11:55, Jerin Jacob:
>>>>>>>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
>>>>>>>>>
>>>>>>>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>>>>>>>
>>>>>>>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>>>>>>
>>>>>>>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
>>>>>>>
>>>>>>> I've reorganized the commits per family of drivers,
>>>>>>> so it makes more sense than grouping per driver class
>>>>>>> with "common/octeontx" for title for all:
>>>>>>>
>>>>>>> net/thunderx: enable build only on 64-bit Linux
>>>>>>> common/octeontx: enable build only on 64-bit Linux
>>>>>>> common/octeontx2: enable build only on 64-bit Linux
>>>>>>>
>>>>>>> and applied.
>>>>>>
>>>>>> Actually not applied yet.
>>>>>> I'm not sure what to do for the ABI check which is broken
>>>>>> because some drivers are not compiled anymore in 32-bit build.
>>>>>> I've workarounded locally by removing the dump files in the reference build.
>>>>>> Should we add an exception in libabigail.abignore?
>>>>>>
>>>>> In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
>>>>>
>>>>> From the policy ...
>>>>> "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
>>>>
>>>> So the patches should wait 21.11.
>>>> Everybody agree?
>>>
>>> Looks good to me to postpone.
>>>
>>> @Ray Kinsella @Thomas Monjalon @McDaniel, Timothy @David Marchand @Neil Horman
>>>
>>> Currently, I merged DLB v1 driver removal patch to next-eventdev. Is
>>> this ABI breakge[1]?
>>>
>>> http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
>>>
>>> [1]
>>> From the policy ...
>>> "Updates to the minimum hardware requirements, which drop support for
>>> hardware which was previously supported, should be treated as an ABI
>>> change."
>>
>> +1
>
> Is +1 for not to remove the dlb driver or remove it?
>
You'll note the original reply pointing at the ABI Policy was from myself.
So I would be in favor of retention until 21.11.
Thats said...
We should think about making the rules less strict for 32bit in future, from 21.11 onwards perhaps.
How many OS Vendors are shipping 32bit OSs these days for example?
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 12:47 0% ` Kinsella, Ray
@ 2021-03-25 12:58 0% ` Jerin Jacob
2021-03-25 13:02 3% ` Kinsella, Ray
0 siblings, 1 reply; 200+ results
From: Jerin Jacob @ 2021-03-25 12:58 UTC (permalink / raw)
To: Kinsella, Ray
Cc: Thomas Monjalon, Pavan Nikhilesh, Jerin Jacob, dpdk-dev,
Harman Kalra, Nithin Dabilpuram, David Marchand
On Thu, Mar 25, 2021 at 6:17 PM Kinsella, Ray <mdr@ashroe.eu> wrote:
>
>
>
> On 25/03/2021 12:46, Jerin Jacob wrote:
> > On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> >>
> >> 25/03/2021 11:58, Kinsella, Ray:
> >>> On 25/03/2021 10:46, Thomas Monjalon wrote:
> >>>> 25/03/2021 11:42, Thomas Monjalon:
> >>>>> 24/03/2021 11:55, Jerin Jacob:
> >>>>>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
> >>>>>>>
> >>>>>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>>>>>
> >>>>>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
> >>>>>>>
> >>>>>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>>>>
> >>>>>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
> >>>>>
> >>>>> I've reorganized the commits per family of drivers,
> >>>>> so it makes more sense than grouping per driver class
> >>>>> with "common/octeontx" for title for all:
> >>>>>
> >>>>> net/thunderx: enable build only on 64-bit Linux
> >>>>> common/octeontx: enable build only on 64-bit Linux
> >>>>> common/octeontx2: enable build only on 64-bit Linux
> >>>>>
> >>>>> and applied.
> >>>>
> >>>> Actually not applied yet.
> >>>> I'm not sure what to do for the ABI check which is broken
> >>>> because some drivers are not compiled anymore in 32-bit build.
> >>>> I've workarounded locally by removing the dump files in the reference build.
> >>>> Should we add an exception in libabigail.abignore?
> >>>>
> >>> In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
> >>>
> >>> From the policy ...
> >>> "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
> >>
> >> So the patches should wait 21.11.
> >> Everybody agree?
> >
> > Looks good to me to postpone.
> >
> > @Ray Kinsella @Thomas Monjalon @McDaniel, Timothy @David Marchand @Neil Horman
> >
> > Currently, I merged DLB v1 driver removal patch to next-eventdev. Is
> > this ABI breakge[1]?
> >
> > http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
> >
> > [1]
> > From the policy ...
> > "Updates to the minimum hardware requirements, which drop support for
> > hardware which was previously supported, should be treated as an ABI
> > change."
>
> +1
Is +1 for not to remove the dlb driver or remove it?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 12:46 4% ` Jerin Jacob
@ 2021-03-25 12:47 0% ` Kinsella, Ray
2021-03-25 12:58 0% ` Jerin Jacob
2021-03-25 14:57 0% ` Thomas Monjalon
1 sibling, 1 reply; 200+ results
From: Kinsella, Ray @ 2021-03-25 12:47 UTC (permalink / raw)
To: Jerin Jacob, Thomas Monjalon
Cc: Pavan Nikhilesh, Jerin Jacob, dpdk-dev, Harman Kalra,
Nithin Dabilpuram, David Marchand
On 25/03/2021 12:46, Jerin Jacob wrote:
> On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>>
>> 25/03/2021 11:58, Kinsella, Ray:
>>> On 25/03/2021 10:46, Thomas Monjalon wrote:
>>>> 25/03/2021 11:42, Thomas Monjalon:
>>>>> 24/03/2021 11:55, Jerin Jacob:
>>>>>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
>>>>>>>
>>>>>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>>>>>
>>>>>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
>>>>>>>
>>>>>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>>>>
>>>>>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
>>>>>
>>>>> I've reorganized the commits per family of drivers,
>>>>> so it makes more sense than grouping per driver class
>>>>> with "common/octeontx" for title for all:
>>>>>
>>>>> net/thunderx: enable build only on 64-bit Linux
>>>>> common/octeontx: enable build only on 64-bit Linux
>>>>> common/octeontx2: enable build only on 64-bit Linux
>>>>>
>>>>> and applied.
>>>>
>>>> Actually not applied yet.
>>>> I'm not sure what to do for the ABI check which is broken
>>>> because some drivers are not compiled anymore in 32-bit build.
>>>> I've workarounded locally by removing the dump files in the reference build.
>>>> Should we add an exception in libabigail.abignore?
>>>>
>>> In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
>>>
>>> From the policy ...
>>> "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
>>
>> So the patches should wait 21.11.
>> Everybody agree?
>
> Looks good to me to postpone.
>
> @Ray Kinsella @Thomas Monjalon @McDaniel, Timothy @David Marchand @Neil Horman
>
> Currently, I merged DLB v1 driver removal patch to next-eventdev. Is
> this ABI breakge[1]?
>
> http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
>
> [1]
> From the policy ...
> "Updates to the minimum hardware requirements, which drop support for
> hardware which was previously supported, should be treated as an ABI
> change."
+1
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 11:03 0% ` Thomas Monjalon
@ 2021-03-25 12:46 4% ` Jerin Jacob
2021-03-25 12:47 0% ` Kinsella, Ray
2021-03-25 14:57 0% ` Thomas Monjalon
0 siblings, 2 replies; 200+ results
From: Jerin Jacob @ 2021-03-25 12:46 UTC (permalink / raw)
To: Thomas Monjalon
Cc: Pavan Nikhilesh, Jerin Jacob, Kinsella, Ray, dpdk-dev,
Harman Kalra, Nithin Dabilpuram, David Marchand
On Thu, Mar 25, 2021 at 4:33 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 25/03/2021 11:58, Kinsella, Ray:
> > On 25/03/2021 10:46, Thomas Monjalon wrote:
> > > 25/03/2021 11:42, Thomas Monjalon:
> > >> 24/03/2021 11:55, Jerin Jacob:
> > >>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
> > >>>>
> > >>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >>>>
> > >>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
> > >>>>
> > >>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >>>
> > >>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
> > >>
> > >> I've reorganized the commits per family of drivers,
> > >> so it makes more sense than grouping per driver class
> > >> with "common/octeontx" for title for all:
> > >>
> > >> net/thunderx: enable build only on 64-bit Linux
> > >> common/octeontx: enable build only on 64-bit Linux
> > >> common/octeontx2: enable build only on 64-bit Linux
> > >>
> > >> and applied.
> > >
> > > Actually not applied yet.
> > > I'm not sure what to do for the ABI check which is broken
> > > because some drivers are not compiled anymore in 32-bit build.
> > > I've workarounded locally by removing the dump files in the reference build.
> > > Should we add an exception in libabigail.abignore?
> > >
> > In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
> >
> > From the policy ...
> > "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
>
> So the patches should wait 21.11.
> Everybody agree?
Looks good to me to postpone.
@Ray Kinsella @Thomas Monjalon @McDaniel, Timothy @David Marchand @Neil Horman
Currently, I merged DLB v1 driver removal patch to next-eventdev. Is
this ABI breakge[1]?
http://patches.dpdk.org/project/dpdk/patch/20210316210812.15614-1-timothy.mcdaniel@intel.com/
[1]
From the policy ...
"Updates to the minimum hardware requirements, which drop support for
hardware which was previously supported, should be treated as an ABI
change."
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH V2] ethdev: add queue state when retrieve queue information
2021-03-18 12:25 13% [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information Lijun Ou
2021-03-22 9:22 3% ` Ferruh Yigit
@ 2021-03-25 11:09 13% ` Lijun Ou
2021-04-06 0:49 0% ` oulijun
` (2 more replies)
1 sibling, 3 replies; 200+ results
From: Lijun Ou @ 2021-03-25 11:09 UTC (permalink / raw)
To: thomas, ferruh.yigit; +Cc: dev, linuxarm
Currently, upper-layer application could get queue state only
through pointers such as dev->data->tx_queue_state[queue_id],
this is not the recommended way to access it. So this patch
add get queue state when call rte_eth_rx_queue_info_get and
rte_eth_tx_queue_info_get API.
Note: The hairpin queue is not supported with above
rte_eth_*x_queue_info_get, so the queue state could be
RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
it could be ABI compatible.
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Lijun Ou <oulijun@huawei.com>
---
V1->V2:
- move queue state defines to public file
---
doc/guides/rel_notes/release_21_05.rst | 6 ++++++
lib/librte_ethdev/ethdev_driver.h | 7 -------
lib/librte_ethdev/rte_ethdev.c | 3 +++
lib/librte_ethdev/rte_ethdev.h | 11 +++++++++++
4 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 22aa80a..503daf9 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -164,6 +164,12 @@ ABI Changes
* No ABI change that would break compatibility with 20.11.
+* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
+ to provide indicated rxq queue state.
+
+* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
+ to provide indicated txq queue state.
+
Known Issues
------------
diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
index cdd4b43..ec5a17d 100644
--- a/lib/librte_ethdev/ethdev_driver.h
+++ b/lib/librte_ethdev/ethdev_driver.h
@@ -970,13 +970,6 @@ struct eth_dev_ops {
};
/**
- * RX/TX queue states
- */
-#define RTE_ETH_QUEUE_STATE_STOPPED 0
-#define RTE_ETH_QUEUE_STATE_STARTED 1
-#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
-
-/**
* @internal
* Check if the selected Rx queue is hairpin queue.
*
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 3059aa5..fbd10b2 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->rx_queue_state[queue_id];
+
return 0;
}
@@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->tx_queue_state[queue_id];
return 0;
}
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index efda313..4f0b1b2 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1582,6 +1582,13 @@ struct rte_eth_dev_info {
};
/**
+ * RX/TX queue states
+ */
+#define RTE_ETH_QUEUE_STATE_STOPPED 0
+#define RTE_ETH_QUEUE_STATE_STARTED 1
+#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
+
+/**
* Ethernet device RX queue information structure.
* Used to retrieve information about configured queue.
*/
@@ -1591,6 +1598,8 @@ struct rte_eth_rxq_info {
uint8_t scattered_rx; /**< scattered packets RX supported. */
uint16_t nb_desc; /**< configured number of RXDs. */
uint16_t rx_buf_size; /**< hardware receive buffer size. */
+ /**< Queues state: STARTED(1) / STOPPED(0). */
+ uint8_t queue_state;
} __rte_cache_min_aligned;
/**
@@ -1600,6 +1609,8 @@ struct rte_eth_rxq_info {
struct rte_eth_txq_info {
struct rte_eth_txconf conf; /**< queue config parameters. */
uint16_t nb_desc; /**< configured number of TXDs. */
+ /**< Queues state: STARTED(1) / STOPPED(0). */
+ uint8_t queue_state;
} __rte_cache_min_aligned;
/* Generic Burst mode flag definition, values can be ORed. */
--
2.7.4
^ permalink raw reply [relevance 13%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 10:58 4% ` Kinsella, Ray
@ 2021-03-25 11:03 0% ` Thomas Monjalon
2021-03-25 12:46 4% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-25 11:03 UTC (permalink / raw)
To: Pavan Nikhilesh, Jerin Jacob, Kinsella, Ray
Cc: Jerin Jacob, dev, Harman Kalra, Nithin Dabilpuram, david.marchand
25/03/2021 11:58, Kinsella, Ray:
> On 25/03/2021 10:46, Thomas Monjalon wrote:
> > 25/03/2021 11:42, Thomas Monjalon:
> >> 24/03/2021 11:55, Jerin Jacob:
> >>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
> >>>>
> >>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>>
> >>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
> >>>>
> >>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>>
> >>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
> >>
> >> I've reorganized the commits per family of drivers,
> >> so it makes more sense than grouping per driver class
> >> with "common/octeontx" for title for all:
> >>
> >> net/thunderx: enable build only on 64-bit Linux
> >> common/octeontx: enable build only on 64-bit Linux
> >> common/octeontx2: enable build only on 64-bit Linux
> >>
> >> and applied.
> >
> > Actually not applied yet.
> > I'm not sure what to do for the ABI check which is broken
> > because some drivers are not compiled anymore in 32-bit build.
> > I've workarounded locally by removing the dump files in the reference build.
> > Should we add an exception in libabigail.abignore?
> >
> In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
>
> From the policy ...
> "Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
So the patches should wait 21.11.
Everybody agree?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
2021-03-25 10:46 3% ` Thomas Monjalon
@ 2021-03-25 10:58 4% ` Kinsella, Ray
2021-03-25 11:03 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Kinsella, Ray @ 2021-03-25 10:58 UTC (permalink / raw)
To: Thomas Monjalon, Pavan Nikhilesh, Jerin Jacob
Cc: Jerin Jacob, dev, Harman Kalra, Nithin Dabilpuram, david.marchand
On 25/03/2021 10:46, Thomas Monjalon wrote:
> 25/03/2021 11:42, Thomas Monjalon:
>> 24/03/2021 11:55, Jerin Jacob:
>>> On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
>>>>
>>>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>>
>>>> Due to Linux kernel dependency, only enable build for 64bit Linux.
>>>>
>>>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>>
>>> Series Acked-by: Jerin Jacob <jerinj@marvell.com>
>>
>> I've reorganized the commits per family of drivers,
>> so it makes more sense than grouping per driver class
>> with "common/octeontx" for title for all:
>>
>> net/thunderx: enable build only on 64-bit Linux
>> common/octeontx: enable build only on 64-bit Linux
>> common/octeontx2: enable build only on 64-bit Linux
>>
>> and applied.
>
> Actually not applied yet.
> I'm not sure what to do for the ABI check which is broken
> because some drivers are not compiled anymore in 32-bit build.
> I've workarounded locally by removing the dump files in the reference build.
> Should we add an exception in libabigail.abignore?
>
In the past we said that depreciating HW support would be considered to be same as an ABI Breakage.
From the policy ...
"Updates to the minimum hardware requirements, which drop support for hardware which was previously supported, should be treated as an ABI change."
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux
@ 2021-03-25 10:46 3% ` Thomas Monjalon
2021-03-25 10:58 4% ` Kinsella, Ray
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-25 10:46 UTC (permalink / raw)
To: Pavan Nikhilesh, Jerin Jacob, Ray Kinsella
Cc: Jerin Jacob, dev, Harman Kalra, Nithin Dabilpuram, david.marchand
25/03/2021 11:42, Thomas Monjalon:
> 24/03/2021 11:55, Jerin Jacob:
> > On Thu, Feb 25, 2021 at 10:33 PM <pbhagavatula@marvell.com> wrote:
> > >
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > Due to Linux kernel dependency, only enable build for 64bit Linux.
> > >
> > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > Series Acked-by: Jerin Jacob <jerinj@marvell.com>
>
> I've reorganized the commits per family of drivers,
> so it makes more sense than grouping per driver class
> with "common/octeontx" for title for all:
>
> net/thunderx: enable build only on 64-bit Linux
> common/octeontx: enable build only on 64-bit Linux
> common/octeontx2: enable build only on 64-bit Linux
>
> and applied.
Actually not applied yet.
I'm not sure what to do for the ABI check which is broken
because some drivers are not compiled anymore in 32-bit build.
I've workarounded locally by removing the dump files in the reference build.
Should we add an exception in libabigail.abignore?
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-25 10:01 0% ` oulijun
@ 2021-03-25 10:18 0% ` Ananyev, Konstantin
0 siblings, 0 replies; 200+ results
From: Ananyev, Konstantin @ 2021-03-25 10:18 UTC (permalink / raw)
To: oulijun, Andrew Rybchenko, Yigit, Ferruh, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
>
>
> 在 2021/3/22 23:45, Ananyev, Konstantin 写道:
> >
> >
> >> -----Original Message-----
> >> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
> >> Sent: Monday, March 22, 2021 2:49 PM
> >> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
> >> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> >> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> >> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
> >>
> >> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
> >>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
> >>>> Currently, upper-layer application could get queue state only
> >>>> through pointers such as dev->data->tx_queue_state[queue_id],
> >>>> this is not the recommended way to access it. So this patch
> >>>> add get queue state when call rte_eth_rx_queue_info_get and
> >>>> rte_eth_tx_queue_info_get API.
> >>>>
> >>>> Note: The hairpin queue is not supported with above
> >>>> rte_eth_*x_queue_info_get, so the queue state could be
> >>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >>>> it could be ABI compatible.
> >>>>
> >>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >>>
> >>> <...>
> >>>
> >>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
> >>>> b/lib/librte_ethdev/rte_ethdev.h
> >>>> index efda313..3b83c5a 100644
> >>>> --- a/lib/librte_ethdev/rte_ethdev.h
> >>>> +++ b/lib/librte_ethdev/rte_ethdev.h
> >>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> >>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >>>> uint16_t nb_desc; /**< configured number of RXDs. */
> >>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>> + uint8_t queue_state;
> >>>> } __rte_cache_min_aligned;
> >>>> /**
> >>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> >>>> struct rte_eth_txq_info {
> >>>> struct rte_eth_txconf conf; /**< queue config parameters. */
> >>>> uint16_t nb_desc; /**< configured number of TXDs. */
> >>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>> + uint8_t queue_state;
> >>>> } __rte_cache_min_aligned;
> >>>> /* Generic Burst mode flag definition, values can be ORed. */
> >>>>
> >>>
> >>> This is causing an ABI warning [1], but I guess it is safe since the
> >>> size of the struct is not changing (cache align). Adding a few more
> >>> people to comment.
> >>>
> >>>
> >>> [1]
> >>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
> >>
> >> Frankly speaking I dislike addition of queue_state as uint8_t.
> >> IMHO it should be either 'bool started' or enum to support more
> >> states in the future if we need.
> >
> > I think we already have set of defines for it:
> > lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> > lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> > lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> At the latest date, the rte_ethdev_driver.h file does not exist.
Yep, It was renamed to ethdev_driver.h.
But the defines are still there.
> >
> > If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
> >
> > About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> > but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> > So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> > Unless in future will want to change it in struct rte_eth_dev_data too
> > (or even hide it inside dev private queue data).
> >
> >
> >
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 15:45 0% ` Ananyev, Konstantin
2021-03-22 16:02 0% ` Andrew Rybchenko
@ 2021-03-25 10:01 0% ` oulijun
2021-03-25 10:18 0% ` Ananyev, Konstantin
1 sibling, 1 reply; 200+ results
From: oulijun @ 2021-03-25 10:01 UTC (permalink / raw)
To: Ananyev, Konstantin, Andrew Rybchenko, Yigit, Ferruh, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
在 2021/3/22 23:45, Ananyev, Konstantin 写道:
>
>
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
>> Sent: Monday, March 22, 2021 2:49 PM
>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>
>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>>>> Currently, upper-layer application could get queue state only
>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>> this is not the recommended way to access it. So this patch
>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>> rte_eth_tx_queue_info_get API.
>>>>
>>>> Note: The hairpin queue is not supported with above
>>>> rte_eth_*x_queue_info_get, so the queue state could be
>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>> it could be ABI compatible.
>>>>
>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>
>>> <...>
>>>
>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>>>> b/lib/librte_ethdev/rte_ethdev.h
>>>> index efda313..3b83c5a 100644
>>>> --- a/lib/librte_ethdev/rte_ethdev.h
>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>> + uint8_t queue_state;
>>>> } __rte_cache_min_aligned;
>>>> /**
>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>>>> struct rte_eth_txq_info {
>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
>>>> uint16_t nb_desc; /**< configured number of TXDs. */
>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>> + uint8_t queue_state;
>>>> } __rte_cache_min_aligned;
>>>> /* Generic Burst mode flag definition, values can be ORed. */
>>>>
>>>
>>> This is causing an ABI warning [1], but I guess it is safe since the
>>> size of the struct is not changing (cache align). Adding a few more
>>> people to comment.
>>>
>>>
>>> [1]
>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>>
>> Frankly speaking I dislike addition of queue_state as uint8_t.
>> IMHO it should be either 'bool started' or enum to support more
>> states in the future if we need.
>
> I think we already have set of defines for it:
> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
At the latest date, the rte_ethdev_driver.h file does not exist.
>
> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
>
> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> Unless in future will want to change it in struct rte_eth_dev_data too
> (or even hide it inside dev private queue data).
>
>
>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v3 00/10] eal: Add new API for threading
2021-03-23 0:20 2% ` [dpdk-dev] [PATCH v2 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
@ 2021-03-25 3:46 2% ` Narcisa Ana Maria Vasile
0 siblings, 0 replies; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-03-25 3:46 UTC (permalink / raw)
To: dev, thomas, dmitry.kozliuk, khot, navasile, dmitrym, roretzla,
talshn, ocardona
Cc: bruce.richardson, david.marchand, pallavi.kadam
From: Narcisa Vasile <navasile@microsoft.com>
EAL thread API
**Problem Statement**
DPDK currently uses the pthread interface to create and manage threads.
Windows does not support the POSIX thread programming model, so it currently
relies on a header file that hides the Windows calls under
pthread matched interfaces. Given that EAL should isolate the environment
specifics from the applications and libraries and mediate
all the communication with the operating systems, a new EAL interface
is needed for thread management.
**Goals**
* Introduce a generic EAL API for threading support that will remove
the current Windows pthread.h shim.
* Replace references to pthread_* across the DPDK codebase with the new
RTE_THREAD_* API.
* Allow users to choose between using the RTE_THREAD_* API or a
3rd party thread library through a configuration option.
**Design plan**
New API main files:
* rte_thread.h (librte_eal/include)
* rte_thread_types.h (librte_eal/include)
* rte_thread_windows_types.h (librte_eal/windows/include)
* rte_thread.c (librte_eal/windows)
* rte_thread.c (librte_eal/common)
For flexibility, the user is offered the option of either using the RTE_THREAD_* API or
a 3rd party thread library, through a meson flag “use_external_thread_lib”.
By default, this flag is set to FALSE, which means Windows libraries and applications
will use the RTE_THREAD_* API for managing threads.
If compiling on Windows and the “use_external_thread_lib” is *not* set,
the following files will be parsed:
* include/rte_thread.h
* windows/include/rte_thread_windows_types.h
* windows/rte_thread.c
In all other cases, the compilation/parsing includes the following files:
* include/rte_thread.h
* include/rte_thread_types.h
* common/rte_thread.c
**A schematic example of the design**
--------------------------------------------------
lib/librte_eal/include/rte_thread.h
int rte_thread_create();
lib/librte_eal/common/rte_thread.c
int rte_thread_create()
{
return pthread_create();
}
lib/librte_eal/windows/rte_thread.c
int rte_thread_create()
{
return CreateThread();
}
lib/librte_eal/windows/meson.build
if get_option('use_external_thread_lib')
sources += 'librte_eal/common/rte_thread.c'
else
sources += 'librte_eal/windows/rte_thread.c'
endif
-----------------------------------------------------
**Thread attributes**
When or after a thread is created, specific characteristics of the thread
can be adjusted. Given that the thread characteristics that are of interest
for DPDK applications are affinity and priority, the following structure
that represents thread attributes has been defined:
typedef struct
{
enum rte_thread_priority priority;
rte_cpuset_t cpuset;
} rte_thread_attr_t;
The *rte_thread_create()* function can optionally receive an rte_thread_attr_t
object that will cause the thread to be created with the affinity and priority
described by the attributes object. If no rte_thread_attr_t is passed
(parameter is NULL), the default affinity and priority are used.
An rte_thread_attr_t object can also be set to the default values
by calling *rte_thread_attr_init()*.
*Priority* is represented through an enum that currently advertises
two values for priority:
- RTE_THREAD_PRIORITY_NORMAL
- RTE_THREAD_PRIORITY_REALTIME_CRITICAL
The enum can be extended to allow for multiple priority levels.
rte_thread_set_priority - sets the priority of a thread
rte_thread_attr_set_priority - updates an rte_thread_attr_t object
with a new value for priority
The user can choose thread priority through an EAL parameter,
when starting an application. The two options above are available:
--thread-prio normal
--thread-prio realtime
Example:
./dpdk-l2fwd -l 0-3 -n 4 –thread-prio normal -- -q 8 -p ffff
*Affinity* is described by the already known “rte_cpuset_t” type.
rte_thread_attr_set/get_affinity - sets/gets the affinity field in a
rte_thread_attr_t object
rte_thread_set/get_affinity – sets/gets the affinity of a thread
**Errors**
A translation function that maps Windows error codes to errno-style
error codes is provided.
**Future work**
Note that this patchset was focused on introducing new API that will
remove the Windows pthread.h shim. In DPDK, there are still a few references
to pthread_* that were not implemented in the shim.
The long term plan is for EAL to provide full threading support:
* Adding support for conditional variables
* Additional functionality offered by pthread_* (such as pthread_setname_np, etc.)
* Static mutex initializers are not used on Windows. If we must continue
using them, they need to be platform dependent and an implementation will
need to be provided for Windows.
v3:
- rebase
v2:
- revert changes that break ABI
- break up changes into smaller patches
- fix coding style issues
- fix issues with errors
- fix parameter type in examples/kni.c
Narcisa Vasile (10):
eal: add thread id and simple thread functions
eal: add thread attributes
windows/eal: translate Windows errors to errno-style errors
eal: implement functions for thread affinity management
eal: implement thread priority management functions
eal: add thread lifetime management
eal: implement functions for mutex management
eal: implement functions for thread barrier management
eal: add EAL argument for setting thread priority
Enable the new EAL thread API
app/test/process.h | 6 +-
app/test/test_lcores.c | 16 +-
app/test/test_link_bonding.c | 10 +-
app/test/test_lpm_perf.c | 12 +-
config/meson.build | 4 +
drivers/bus/dpaa/base/qbman/bman_driver.c | 6 +-
drivers/bus/dpaa/base/qbman/dpaa_sys.c | 14 +-
drivers/bus/dpaa/base/qbman/process.c | 6 +-
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 6 +-
drivers/compress/mlx5/mlx5_compress.c | 10 +-
drivers/event/dlb/pf/base/dlb_osdep.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/af_xdp/rte_eth_af_xdp.c | 18 +-
drivers/net/ark/ark_ethdev.c | 4 +-
drivers/net/atlantic/atl_ethdev.c | 4 +-
drivers/net/atlantic/atl_types.h | 5 +-
.../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 24 +-
drivers/net/axgbe/axgbe_dev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.h | 8 +-
drivers/net/axgbe/axgbe_i2c.c | 4 +-
drivers/net/axgbe/axgbe_mdio.c | 8 +-
drivers/net/axgbe/axgbe_phy_impl.c | 6 +-
drivers/net/bnxt/bnxt.h | 16 +-
drivers/net/bnxt/bnxt_cpr.c | 4 +-
drivers/net/bnxt/bnxt_ethdev.c | 52 +-
drivers/net/bnxt/bnxt_irq.c | 8 +-
drivers/net/bnxt/bnxt_reps.c | 10 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 34 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 4 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 24 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h | 2 +-
drivers/net/ena/base/ena_plat_dpdk.h | 8 +-
drivers/net/enic/enic.h | 2 +-
drivers/net/hns3/hns3_ethdev.h | 2 +-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_mbx.c | 2 +-
drivers/net/ice/ice_dcf_parent.c | 4 +-
drivers/net/ipn3ke/ipn3ke_representor.c | 6 +-
drivers/net/ixgbe/ixgbe_ethdev.c | 2 +-
drivers/net/ixgbe/ixgbe_ethdev.h | 2 +-
drivers/net/kni/rte_eth_kni.c | 6 +-
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.c | 20 +-
drivers/net/mlx5/mlx5.h | 2 +-
drivers/net/mlx5/mlx5_txpp.c | 8 +-
drivers/net/mlx5/windows/mlx5_flow_os.c | 10 +-
drivers/net/mlx5/windows/mlx5_os.c | 2 +-
drivers/net/qede/base/bcm_osal.h | 8 +-
drivers/net/vhost/rte_eth_vhost.c | 22 +-
.../net/virtio/virtio_user/virtio_user_dev.c | 30 +-
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 8 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 36 +-
drivers/vdpa/mlx5/mlx5_vdpa.c | 24 +-
drivers/vdpa/mlx5/mlx5_vdpa.h | 6 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 67 +--
examples/kni/main.c | 6 +-
examples/vhost/main.c | 2 +-
examples/vhost_blk/vhost_blk.c | 10 +-
lib/librte_eal/common/eal_common_options.c | 36 +-
lib/librte_eal/common/eal_common_proc.c | 48 +-
lib/librte_eal/common/eal_common_thread.c | 43 +-
lib/librte_eal/common/eal_common_trace.c | 2 +-
lib/librte_eal/common/eal_internal_cfg.h | 2 +
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_private.h | 2 +-
lib/librte_eal/common/malloc_mp.c | 32 +-
lib/librte_eal/common/meson.build | 1 +
lib/librte_eal/common/rte_thread.c | 342 ++++++++++++
lib/librte_eal/freebsd/eal.c | 37 +-
lib/librte_eal/freebsd/eal_alarm.c | 12 +-
lib/librte_eal/freebsd/eal_interrupts.c | 4 +-
lib/librte_eal/freebsd/eal_thread.c | 8 +-
lib/librte_eal/include/meson.build | 1 +
lib/librte_eal/include/rte_lcore.h | 8 +-
lib/librte_eal/include/rte_per_lcore.h | 2 -
lib/librte_eal/include/rte_thread.h | 333 ++++++++++-
lib/librte_eal/include/rte_thread_types.h | 20 +
lib/librte_eal/linux/eal.c | 42 +-
lib/librte_eal/linux/eal_alarm.c | 10 +-
lib/librte_eal/linux/eal_interrupts.c | 4 +-
lib/librte_eal/linux/eal_thread.c | 8 +-
lib/librte_eal/linux/eal_timer.c | 2 +-
lib/librte_eal/rte_eal_exports.def | 19 +
lib/librte_eal/unix/meson.build | 1 -
lib/librte_eal/unix/rte_thread.c | 86 ---
lib/librte_eal/version.map | 21 +
lib/librte_eal/windows/eal.c | 26 +-
lib/librte_eal/windows/eal_interrupts.c | 6 +-
lib/librte_eal/windows/eal_lcore.c | 170 ++++--
lib/librte_eal/windows/eal_thread.c | 24 +-
lib/librte_eal/windows/eal_windows.h | 20 +-
lib/librte_eal/windows/include/meson.build | 1 +
lib/librte_eal/windows/include/pthread.h | 186 -------
.../include/rte_windows_thread_types.h | 19 +
lib/librte_eal/windows/include/sched.h | 2 +-
lib/librte_eal/windows/meson.build | 7 +-
lib/librte_eal/windows/rte_thread.c | 516 +++++++++++++++++-
lib/librte_ethdev/rte_ethdev.c | 4 +-
lib/librte_ethdev/rte_ethdev_core.h | 3 +-
lib/librte_ethdev/rte_flow.c | 4 +-
.../rte_event_eth_rx_adapter.c | 6 +-
lib/librte_vhost/fd_man.c | 40 +-
lib/librte_vhost/fd_man.h | 6 +-
lib/librte_vhost/socket.c | 124 ++---
lib/librte_vhost/vhost.c | 10 +-
meson_options.txt | 2 +
108 files changed, 2039 insertions(+), 911 deletions(-)
create mode 100644 lib/librte_eal/common/rte_thread.c
create mode 100644 lib/librte_eal/include/rte_thread_types.h
delete mode 100644 lib/librte_eal/unix/rte_thread.c
delete mode 100644 lib/librte_eal/windows/include/pthread.h
create mode 100644 lib/librte_eal/windows/include/rte_windows_thread_types.h
--
2.30.0.vfs.0.2
^ permalink raw reply [relevance 2%]
* Re: [dpdk-dev] [PATCH v3 0/8] eal: cleanup resources on shutdown
@ 2021-03-24 21:30 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-24 21:30 UTC (permalink / raw)
To: Stephen Hemminger
Cc: dev, David Marchand, ferruh.yigit, bruce.richardson, andrew.rybchenko
Ping
20/10/2020 00:24, Thomas Monjalon:
> That's a pity this patchset is not concluded.
> Please Stephen, could you respin with a fix?
>
>
> 03/05/2020 19:21, David Marchand:
> > On Wed, Apr 29, 2020 at 1:58 AM Stephen Hemminger
> > <stephen@networkplumber.org> wrote:
> > >
> > > Started using valgrind with DPDK, and there are lots of leftover
> > > memory and file descriptors. This makes it hard to find application
> > > leaks versus DPDK leaks.
> > >
> > > The DPDK has a function that applications can use to tell it
> > > to cleanup resources on shutdown (rte_eal_cleanup). But the
> > > current coverage of that API is spotty. Many internal parts of
> > > DPDK leave files and allocated memory behind.
> > >
> > > This patch set is a first step at getting the sub-parts of
> > > DPDK to cleanup after themselves. These are the easier ones,
> > > the harder and more critical ones are in the drivers
> > > and the memory subsystem.
> > >
> > > There are no new exposed API or ABI changes here.
> > >
> > > v3
> > > - fix a couple of minor checkpatch complaints
> > >
> > > v2
> > > - rebase after 20.05 file renames
> > > - incorporate review comment feedback
> > > - hold off some of the more involved patches for later
> >
> > Same segfault as v1.
> >
> > $ ./devtools/test-null.sh ./build/app/dpdk-testpmd 0x3 --plop
> > ./build/app/dpdk-testpmd: unrecognized option '--plop'
> > EAL: Detected 8 lcore(s)
> > EAL: Detected 1 NUMA nodes
> >
> > Usage: ./build/app/dpdk-testpmd [options]
> >
> > (snip)
> >
> > EAL: FATAL: Invalid 'command line' arguments.
> > EAL: Invalid 'command line' arguments.
> > EAL: Error - exiting with code: 1
> > Cause: Cannot init EAL: Invalid argument
> > ./devtools/test-null.sh: line 32: 23134 Broken pipe (
> > sleep 1 && echo stop )
> > 23135 Segmentation fault (core dumped) | $testpmd -c
> > $coremask --no-huge -m 20 $libs -w 0:0.0 --vdev net_null1 --vdev
> > net_null2 $eal_options -- --no-mlockall --total-num-mbufs=2048
> > $testpmd_options -ia
> >
> >
> >
>
>
>
>
>
>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v6 0/8] Introduce event vectorization
2021-03-24 5:05 4% ` [dpdk-dev] [PATCH v5 " pbhagavatula
2021-03-24 5:39 0% ` Jayatheerthan, Jay
@ 2021-03-24 19:28 4% ` pbhagavatula
2021-03-25 17:10 4% ` [dpdk-dev] [PATCH v7 " pbhagavatula
1 sibling, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-24 19:28 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~742.3% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without this patchset applied:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.071 mpps
With the patchset applied and Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
5.123 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
42.715 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v6 Changes:
- Make rte_errno sign consistant.(Jay)
- Gramatical and doxygen fixes. (Jay)
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 114 ++++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1525 insertions(+), 87 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH 1/2] eal: make max interrupt vector id configurable
2021-03-24 15:25 0% ` David Marchand
@ 2021-03-24 16:20 0% ` Jerin Jacob
0 siblings, 0 replies; 200+ results
From: Jerin Jacob @ 2021-03-24 16:20 UTC (permalink / raw)
To: David Marchand
Cc: Ray Kinsella, Pavan Nikhilesh, Harman Kalra, Thomas Monjalon,
Jerin Jacob, Bruce Richardson, dpdk-dev
On Wed, Mar 24, 2021 at 8:56 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Wed, Mar 24, 2021 at 1:55 PM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > > > IMO, We dont need to make it configurable and each platform sets its
> > > > value. That scheme won't work as generic distribution build will fail
> > > > to run.
> > > > Since PCIe specification defines this value and there is no
> > > > performance impact on increasing this,
> > > > IMO, We can change to 2048 as default.
> > >
> > > It probably breaks rte_intr_* ABI.
> >
> > Yes. Even though all APIs are used as a pointer (ie. "struct
> > rte_intr_handle *"), the definition
> > kept in the header file.
> >
> >
> > > struct rte_intr_handle {
> > > ...
> > > int efds[RTE_MAX_RXTX_INTR_VEC_ID]; /**< intr vectors/efds mapping */
> > > struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
> > > /**< intr vector epoll event */
> > > ...
> > >
> > >
> > > I see you need this for octeontx2, so wondering if you could handle
> > > this differently in octeontx2 drivers?
> >
> > This is an issue with any PCIe device that has more than 512 MSIX interrupts.
> >
> > The PCI spec the max is defined as 2K.
> >
> > CN10K drivers have 1K interrupt lines per PCIe device.
> >
> > I think, following are the options.
> > 1) To avoid ABI breakage in default configuration use the existing patch
> > 2) In 21.11 break ABI and Either change to
> > a) RTE_MAX_RXTX_INTR_VEC_ID as 1024
> > or
> > b) Make it full dynamic allocation based on PCI device MSIX size on probe time.
> > That brings some kind of dependency rte_intr with PCI device. Need to
> > understand,
> > How it can clearly be abstracted out and Is it worth trouble for the
> > amount of memory.
> > Looks like the cost of one entry is 40B. So additional 512 is 40B *
> > 512 = 21KB virtual memory.
>
> Since you mentioned performance is not impacted, I guess this is
> control path only.
Yes.
> And there is no need to expose this.
> So:
>
> c) Rework API so that we don't expose such details.
Yes. That's what I meant by option (b).("Make it fully dynamic
allocation based on PCI device MSIX size on probe time.")
>
>
> --
> David Marchand
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/2] eal: make max interrupt vector id configurable
2021-03-24 12:54 4% ` Jerin Jacob
@ 2021-03-24 15:25 0% ` David Marchand
2021-03-24 16:20 0% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-03-24 15:25 UTC (permalink / raw)
To: Jerin Jacob
Cc: Ray Kinsella, Pavan Nikhilesh, Harman Kalra, Thomas Monjalon,
Jerin Jacob, Bruce Richardson, dpdk-dev
On Wed, Mar 24, 2021 at 1:55 PM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > > IMO, We dont need to make it configurable and each platform sets its
> > > value. That scheme won't work as generic distribution build will fail
> > > to run.
> > > Since PCIe specification defines this value and there is no
> > > performance impact on increasing this,
> > > IMO, We can change to 2048 as default.
> >
> > It probably breaks rte_intr_* ABI.
>
> Yes. Even though all APIs are used as a pointer (ie. "struct
> rte_intr_handle *"), the definition
> kept in the header file.
>
>
> > struct rte_intr_handle {
> > ...
> > int efds[RTE_MAX_RXTX_INTR_VEC_ID]; /**< intr vectors/efds mapping */
> > struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
> > /**< intr vector epoll event */
> > ...
> >
> >
> > I see you need this for octeontx2, so wondering if you could handle
> > this differently in octeontx2 drivers?
>
> This is an issue with any PCIe device that has more than 512 MSIX interrupts.
>
> The PCI spec the max is defined as 2K.
>
> CN10K drivers have 1K interrupt lines per PCIe device.
>
> I think, following are the options.
> 1) To avoid ABI breakage in default configuration use the existing patch
> 2) In 21.11 break ABI and Either change to
> a) RTE_MAX_RXTX_INTR_VEC_ID as 1024
> or
> b) Make it full dynamic allocation based on PCI device MSIX size on probe time.
> That brings some kind of dependency rte_intr with PCI device. Need to
> understand,
> How it can clearly be abstracted out and Is it worth trouble for the
> amount of memory.
> Looks like the cost of one entry is 40B. So additional 512 is 40B *
> 512 = 21KB virtual memory.
Since you mentioned performance is not impacted, I guess this is
control path only.
And there is no need to expose this.
So:
c) Rework API so that we don't expose such details.
--
David Marchand
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/2] eal: make max interrupt vector id configurable
2021-03-24 11:14 3% ` David Marchand
@ 2021-03-24 12:54 4% ` Jerin Jacob
2021-03-24 15:25 0% ` David Marchand
0 siblings, 1 reply; 200+ results
From: Jerin Jacob @ 2021-03-24 12:54 UTC (permalink / raw)
To: David Marchand, Ray Kinsella
Cc: Pavan Nikhilesh, Harman Kalra, Thomas Monjalon, Jerin Jacob,
Bruce Richardson, dpdk-dev
On Wed, Mar 24, 2021 at 4:45 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Wed, Mar 24, 2021 at 12:01 PM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> >
> > On Fri, Feb 26, 2021 at 12:31 AM <pbhagavatula@marvell.com> wrote:
> > >
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > Make RTE_MAX_RXTX_INTR_VEC_ID configurable as MSI-X support a
> > > maximum of 2048 vectors.
> > > The default value is unchanged and set to 512.
> >
> >
> > IMO, We dont need to make it configurable and each platform sets its
> > value. That scheme won't work as generic distribution build will fail
> > to run.
> > Since PCIe specification defines this value and there is no
> > performance impact on increasing this,
> > IMO, We can change to 2048 as default.
>
> It probably breaks rte_intr_* ABI.
Yes. Even though all APIs are used as a pointer (ie. "struct
rte_intr_handle *"), the definition
kept in the header file.
> struct rte_intr_handle {
> ...
> int efds[RTE_MAX_RXTX_INTR_VEC_ID]; /**< intr vectors/efds mapping */
> struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
> /**< intr vector epoll event */
> ...
>
>
> I see you need this for octeontx2, so wondering if you could handle
> this differently in octeontx2 drivers?
This is an issue with any PCIe device that has more than 512 MSIX interrupts.
The PCI spec the max is defined as 2K.
CN10K drivers have 1K interrupt lines per PCIe device.
I think, following are the options.
1) To avoid ABI breakage in default configuration use the existing patch
2) In 21.11 break ABI and Either change to
a) RTE_MAX_RXTX_INTR_VEC_ID as 1024
or
b) Make it full dynamic allocation based on PCI device MSIX size on probe time.
That brings some kind of dependency rte_intr with PCI device. Need to
understand,
How it can clearly be abstracted out and Is it worth trouble for the
amount of memory.
Looks like the cost of one entry is 40B. So additional 512 is 40B *
512 = 21KB virtual memory.
Thoughts?
>
>
> --
> David Marchand
>
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH v2] ethdev: introduce enable_driver_sdk to install driver headers
2021-03-24 11:27 0% ` Ferruh Yigit
@ 2021-03-24 11:30 0% ` Thomas Monjalon
2021-03-30 12:50 0% ` Ferruh Yigit
1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-24 11:30 UTC (permalink / raw)
To: Ferruh Yigit
Cc: Tyler Retzlaff, dev, andrew.rybchenko, bruce.richardson,
Shepard Siegel, David Marchand
24/03/2021 12:27, Ferruh Yigit:
> On 3/24/2021 4:32 AM, Tyler Retzlaff wrote:
> > On Tue, Mar 23, 2021 at 05:04:08PM +0000, Ferruh Yigit wrote:
> >>> diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build
> >>> index c37b2e377..4353fa6b7 100644
> >>> --- a/lib/librte_ethdev/meson.build
> >>> +++ b/lib/librte_ethdev/meson.build
> >>> @@ -20,8 +20,14 @@ headers = files('rte_ethdev.h',
> >>> 'rte_mtr_driver.h',
> >>> 'rte_tm.h',
> >>> 'rte_tm_driver.h')
> >>> +
> >>> indirect_headers += files(
> >>> 'rte_ethdev_core.h',
> >>> 'rte_eth_ctrl.h')
> >>> +driver_sdk_headers += files(
> >>> + 'ethdev_driver.h',
> >>> + 'ethdev_pci.h',
> >>> + 'ethdev_vdev.h')
> >>> +
> >>> deps += ['net', 'kvargs', 'meter', 'telemetry']
> >>
> >
> > i feel like i missed a reply here. but just to clarify only ethdev will
> > be covered by this patch. inclusion of other driver headers was
> > discussed off list (sorry) and it emerged that it would result in
> > withdraw a number of driver api/abi that had not been marked as
> > __rte_internal.
> >
> > for driver api that were being exported as 'stable' a deprecation notice
> > will need to be issued in order to make them part of the
> > driver_sdk_headers. for that reason only ethdev is being made available
> > under this option for now.
> >
> > please ack/nack the patch as-is
> >
>
> I am OK the patch for the ethdev part, hence
> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
>
>
> But not sure how to manage the same problem for whole project, if install all
> headers in one patch, or add them gradually via separate patches by time ...
We did a cleanup in ethdev but not in other driver classes.
When the cleanup will be done gradually, the headers
must move in this new category driver_sdk_headers.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v2] ethdev: introduce enable_driver_sdk to install driver headers
2021-03-24 4:32 3% ` Tyler Retzlaff
@ 2021-03-24 11:27 0% ` Ferruh Yigit
2021-03-24 11:30 0% ` Thomas Monjalon
2021-03-30 12:50 0% ` Ferruh Yigit
0 siblings, 2 replies; 200+ results
From: Ferruh Yigit @ 2021-03-24 11:27 UTC (permalink / raw)
To: Tyler Retzlaff, thomas
Cc: dev, andrew.rybchenko, bruce.richardson, Shepard Siegel, David Marchand
On 3/24/2021 4:32 AM, Tyler Retzlaff wrote:
> On Tue, Mar 23, 2021 at 05:04:08PM +0000, Ferruh Yigit wrote:
>>> diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build
>>> index c37b2e377..4353fa6b7 100644
>>> --- a/lib/librte_ethdev/meson.build
>>> +++ b/lib/librte_ethdev/meson.build
>>> @@ -20,8 +20,14 @@ headers = files('rte_ethdev.h',
>>> 'rte_mtr_driver.h',
>>> 'rte_tm.h',
>>> 'rte_tm_driver.h')
>>> +
>>> indirect_headers += files(
>>> 'rte_ethdev_core.h',
>>> 'rte_eth_ctrl.h')
>>> +driver_sdk_headers += files(
>>> + 'ethdev_driver.h',
>>> + 'ethdev_pci.h',
>>> + 'ethdev_vdev.h')
>>> +
>>> deps += ['net', 'kvargs', 'meter', 'telemetry']
>>
>
> i feel like i missed a reply here. but just to clarify only ethdev will
> be covered by this patch. inclusion of other driver headers was
> discussed off list (sorry) and it emerged that it would result in
> withdraw a number of driver api/abi that had not been marked as
> __rte_internal.
>
> for driver api that were being exported as 'stable' a deprecation notice
> will need to be issued in order to make them part of the
> driver_sdk_headers. for that reason only ethdev is being made available
> under this option for now.
>
> please ack/nack the patch as-is
>
I am OK the patch for the ethdev part, hence
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
But not sure how to manage the same problem for whole project, if install all
headers in one patch, or add them gradually via separate patches by time ...
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/2] eal: make max interrupt vector id configurable
@ 2021-03-24 11:14 3% ` David Marchand
2021-03-24 12:54 4% ` Jerin Jacob
0 siblings, 1 reply; 200+ results
From: David Marchand @ 2021-03-24 11:14 UTC (permalink / raw)
To: Jerin Jacob, Pavan Nikhilesh, Harman Kalra
Cc: Thomas Monjalon, Jerin Jacob, Bruce Richardson, dpdk-dev, Ray Kinsella
On Wed, Mar 24, 2021 at 12:01 PM Jerin Jacob <jerinjacobk@gmail.com> wrote:
>
> On Fri, Feb 26, 2021 at 12:31 AM <pbhagavatula@marvell.com> wrote:
> >
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > Make RTE_MAX_RXTX_INTR_VEC_ID configurable as MSI-X support a
> > maximum of 2048 vectors.
> > The default value is unchanged and set to 512.
>
>
> IMO, We dont need to make it configurable and each platform sets its
> value. That scheme won't work as generic distribution build will fail
> to run.
> Since PCIe specification defines this value and there is no
> performance impact on increasing this,
> IMO, We can change to 2048 as default.
It probably breaks rte_intr_* ABI.
struct rte_intr_handle {
...
int efds[RTE_MAX_RXTX_INTR_VEC_ID]; /**< intr vectors/efds mapping */
struct rte_epoll_event elist[RTE_MAX_RXTX_INTR_VEC_ID];
/**< intr vector epoll event */
...
I see you need this for octeontx2, so wondering if you could handle
this differently in octeontx2 drivers?
--
David Marchand
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
2021-03-24 6:44 0% ` Pavan Nikhilesh Bhagavatula
@ 2021-03-24 8:10 0% ` Jayatheerthan, Jay
0 siblings, 0 replies; 200+ results
From: Jayatheerthan, Jay @ 2021-03-24 8:10 UTC (permalink / raw)
To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, Carrillo,
Erik G, Gujjar, Abhinandan S, McDaniel, Timothy, hemant.agrawal,
Van Haaren, Harry, mattias.ronnblom, Ma, Liang J
Cc: dev
> -----Original Message-----
> From: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> Sent: Wednesday, March 24, 2021 12:15 PM
> To: Jayatheerthan, Jay <jay.jayatheerthan@intel.com>; Jerin Jacob Kollanukkaran <jerinj@marvell.com>; Carrillo, Erik G
> <erik.g.carrillo@intel.com>; Gujjar, Abhinandan S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> <timothy.mcdaniel@intel.com>; hemant.agrawal@nxp.com; Van Haaren, Harry <harry.van.haaren@intel.com>; mattias.ronnblom
> <mattias.ronnblom@ericsson.com>; Ma, Liang J <liang.j.ma@intel.com>
> Cc: dev@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
>
> >> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> >> Sent: Wednesday, March 24, 2021 10:35 AM
> >> To: jerinj@marvell.com; Jayatheerthan, Jay
> ><jay.jayatheerthan@intel.com>; Carrillo, Erik G
> ><erik.g.carrillo@intel.com>; Gujjar, Abhinandan
> >> S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
> ><timothy.mcdaniel@intel.com>; hemant.agrawal@nxp.com; Van
> >Haaren, Harry
> >> <harry.van.haaren@intel.com>; mattias.ronnblom
> ><mattias.ronnblom@ericsson.com>; Ma, Liang J
> ><liang.j.ma@intel.com>
> >> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> Subject: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
> >>
> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>
> >> In traditional event programming model, events are identified by a
> >> flow-id and a uintptr_t. The flow-id uniquely identifies a given event
> >> and determines the order of scheduling based on schedule type, the
> >> uintptr_t holds a single object.
> >>
> >> Event devices also support burst mode with configurable dequeue
> >depth,
> >> i.e. each dequeue call would return multiple events and each event
> >> might be at a different stage of the pipeline.
> >> Having a burst of events belonging to different stages in a dequeue
> >> burst is not only difficult to vectorize but also increases the scheduler
> >> overhead and application overhead of pipelining events further.
> >> Using event vectors we see a performance gain of ~628% as shown in
> >[1].
> >This is very impressive performance boost. Thanks so much for putting
> >this patchset together! Just curious, was any performance
> >measurement done for existing applications (non-vector)?
> >>
> >> By introducing event vectorization, each event will be capable of
> >holding
> >> multiple uintptr_t of the same flow thereby allowing applications
> >> to vectorize their pipeline and reduce the complexity of pipelining
> >> events across multiple stages. This also reduces the complexity of
> >handling
> >> enqueue and dequeue on an event device.
> >>
> >> Since event devices are transparent to the events they are scheduling
> >> so the event producers such as eth_rx_adapter, crypto_adapter , etc..
> >> are responsible for vectorizing the buffers of the same flow into a
> >single
> >> event.
> >>
> >> The series also breaks ABI in the patch [8/8] which is targetted to the
> >> v21.11 release.
> >>
> >> The dpdk-test-eventdev application has been updated with options to
> >test
> >> multiple vector sizes and timeouts.
> >>
> >> [1]
> >> As for performance improvement, with a ARM Cortex-A72 equivalent
> >processer,
> >> software event device (--vdev=event_sw0), single worker core, single
> >stage
> >> and using one service core for Rx adapter, Tx adapter, Scheduling.
> >>
> >> Without event vectorization:
> >> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --
> >vdev="event_sw0" --
> >> --prod_type_ethdev --nb_pkts=0 --verbose 2 --
> >test=pipeline_queue
> >> --stlist=a --wlcores=20
> >> Port[0] using Rx adapter[0] configured
> >> Port[0] using Tx adapter[0] Configured
> >> 4.728 mpps avg 4.728 mpps
> >Is this number before the patchset? If so, it would help put similar
> >number with the patchset but not using vectorization feature.
>
> I don’t remember the exact clock frequency I was using when I ran
> the above test but with equal clocks:
> 1. Without the patchset applied
> 5.071 mpps
> 2. With patchset applied w/o enabling vector
> 5.123 mpps
> 3. With patchset applied with enabling vector
> vector_sz@256 42.715 mpps
> vector_sz@512 45.335 mpps
>
Thanks Pavan for the details. It may be useful to include this info in the patchset.
> >>
> >> With event vectorization:
> >> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --
> >vdev="event_sw0" --
> >> --prod_type_ethdev --nb_pkts=0 --verbose 2 --
> >test=pipeline_queue
> >> --stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
> >> --vector_size 256
> >> Port[0] using Rx adapter[0] configured
> >> Port[0] using Tx adapter[0] Configured
> >> 34.383 mpps avg 34.383 mpps
> >>
> >> Having dedicated service cores for each Rx queues and tweaking the
> >vector,
> >> dequeue burst size would further improve performance.
> >>
> >> API usage is shown below:
> >>
> >> Configuration:
> >>
> >> struct rte_event_eth_rx_adapter_event_vector_config
> >vec_conf;
> >>
> >> vector_pool = rte_event_vector_pool_create("vector_pool",
> >> nb_elem, 0, vector_size, socket_id);
> >>
> >> rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
> >> rte_event_eth_rx_adapter_queue_add(id, eth_id, -1,
> >&queue_conf);
> >> if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR)
> >{
> >> vec_conf.vector_sz = vector_size;
> >> vec_conf.vector_timeout_ns = vector_tmo_nsec;
> >> vec_conf.vector_mp = vector_pool;
> >>
> > rte_event_eth_rx_adapter_queue_event_vector_config(id,
> >> eth_id, -1, &vec_conf);
> >> }
> >>
> >> Fastpath:
> >>
> >> num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
> >> if (!num)
> >> continue;
> >>
> >> if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
> >> switch (ev.event_type) {
> >> case RTE_EVENT_TYPE_ETHDEV_VECTOR:
> >> case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
> >> struct rte_mbuf **mbufs;
> >>
> >> mbufs = ev.vector_ev->mbufs;
> >> for (i = 0; i < ev.vector_ev->nb_elem; i++)
> >> //Process mbufs.
> >> break;
> >> case ...
> >> }
> >> }
> >> ...
> >>
> >> v5 Changes:
> >> - Make `rte_event_vector_pool_create non-inline` to ease ABI
> >stability.(Ray)
> >> - Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
> >> `rte_event_eth_rx_adapter_vector_limits_get` implementation to
> >the patch
> >> where they are initially defined.(Ray)
> >> - Multiple gramatical and style fixes.(Jerin)
> >> - Add missing release notes.(Jerin)
> >>
> >> v4 Changes:
> >> - Fix missing event vector structure in event structure.(Jay)
> >>
> >> v3 Changes:
> >> - Fix unintended formatting changes.
> >>
> >> v2 Changes:
> >> - Multiple gramatical and style fixes.(Jerin)
> >> - Add parameter to define vector size in power of 2. (Jerin)
> >> - Redo patch series w/o breaking ABI till the last patch.(David)
> >> - Add deprication notice to announce ABI break in 21.11.(David)
> >> - Add vector limits validation to app/test-eventdev.
> >>
> >> Pavan Nikhilesh (8):
> >> eventdev: introduce event vector capability
> >> eventdev: introduce event vector Rx capability
> >> eventdev: introduce event vector Tx capability
> >> eventdev: add Rx adapter event vector support
> >> eventdev: add Tx adapter event vector support
> >> app/eventdev: add event vector mode in pipeline test
> >> doc: announce event Rx adapter config changes
> >> eventdev: simplify Rx adapter event vector config
> >>
> >> app/test-eventdev/evt_common.h | 4 +
> >> app/test-eventdev/evt_options.c | 52 +++
> >> app/test-eventdev/evt_options.h | 4 +
> >> app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
> >> app/test-eventdev/test_pipeline_common.c | 105 +++++-
> >> app/test-eventdev/test_pipeline_common.h | 18 +
> >> app/test-eventdev/test_pipeline_queue.c | 320
> >++++++++++++++++--
> >> .../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
> >> .../prog_guide/event_ethernet_tx_adapter.rst | 12 +
> >> doc/guides/prog_guide/eventdev.rst | 36 +-
> >> doc/guides/rel_notes/deprecation.rst | 9 +
> >> doc/guides/rel_notes/release_21_05.rst | 8 +
> >> doc/guides/tools/testeventdev.rst | 45 ++-
> >> lib/librte_eventdev/eventdev_pmd.h | 31 +-
> >> .../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
> >> .../rte_event_eth_rx_adapter.h | 78 +++++
> >> .../rte_event_eth_tx_adapter.c | 66 +++-
> >> lib/librte_eventdev/rte_eventdev.c | 53 ++-
> >> lib/librte_eventdev/rte_eventdev.h | 113 ++++++-
> >> lib/librte_eventdev/version.map | 4 +
> >> 20 files changed, 1524 insertions(+), 87 deletions(-)
> >>
> >> --
> >> 2.17.1
> >
> >Just a heads up. v5 patchset doesn't apply cleanly on HEAD
> >(5f0849c1155849dfdbf950c91c52cdf9cd301f59). Although, it applies
> >cleanly on app/eventdev: fix timeout accuracy
> >(c33d48387dc8ccf1b432820f6e0cd4992ab486df).
>
> This patchset is currently rebased on main branch, I will rebase it on
> dpdk-next-event in next version.
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
2021-03-24 5:39 0% ` Jayatheerthan, Jay
@ 2021-03-24 6:44 0% ` Pavan Nikhilesh Bhagavatula
2021-03-24 8:10 0% ` Jayatheerthan, Jay
0 siblings, 1 reply; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2021-03-24 6:44 UTC (permalink / raw)
To: Jayatheerthan, Jay, Jerin Jacob Kollanukkaran, Carrillo, Erik G,
Gujjar, Abhinandan S, McDaniel, Timothy, hemant.agrawal,
Van Haaren, Harry, mattias.ronnblom, Ma, Liang J
Cc: dev
>> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
>> Sent: Wednesday, March 24, 2021 10:35 AM
>> To: jerinj@marvell.com; Jayatheerthan, Jay
><jay.jayatheerthan@intel.com>; Carrillo, Erik G
><erik.g.carrillo@intel.com>; Gujjar, Abhinandan
>> S <abhinandan.gujjar@intel.com>; McDaniel, Timothy
><timothy.mcdaniel@intel.com>; hemant.agrawal@nxp.com; Van
>Haaren, Harry
>> <harry.van.haaren@intel.com>; mattias.ronnblom
><mattias.ronnblom@ericsson.com>; Ma, Liang J
><liang.j.ma@intel.com>
>> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
>> Subject: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
>>
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> In traditional event programming model, events are identified by a
>> flow-id and a uintptr_t. The flow-id uniquely identifies a given event
>> and determines the order of scheduling based on schedule type, the
>> uintptr_t holds a single object.
>>
>> Event devices also support burst mode with configurable dequeue
>depth,
>> i.e. each dequeue call would return multiple events and each event
>> might be at a different stage of the pipeline.
>> Having a burst of events belonging to different stages in a dequeue
>> burst is not only difficult to vectorize but also increases the scheduler
>> overhead and application overhead of pipelining events further.
>> Using event vectors we see a performance gain of ~628% as shown in
>[1].
>This is very impressive performance boost. Thanks so much for putting
>this patchset together! Just curious, was any performance
>measurement done for existing applications (non-vector)?
>>
>> By introducing event vectorization, each event will be capable of
>holding
>> multiple uintptr_t of the same flow thereby allowing applications
>> to vectorize their pipeline and reduce the complexity of pipelining
>> events across multiple stages. This also reduces the complexity of
>handling
>> enqueue and dequeue on an event device.
>>
>> Since event devices are transparent to the events they are scheduling
>> so the event producers such as eth_rx_adapter, crypto_adapter , etc..
>> are responsible for vectorizing the buffers of the same flow into a
>single
>> event.
>>
>> The series also breaks ABI in the patch [8/8] which is targetted to the
>> v21.11 release.
>>
>> The dpdk-test-eventdev application has been updated with options to
>test
>> multiple vector sizes and timeouts.
>>
>> [1]
>> As for performance improvement, with a ARM Cortex-A72 equivalent
>processer,
>> software event device (--vdev=event_sw0), single worker core, single
>stage
>> and using one service core for Rx adapter, Tx adapter, Scheduling.
>>
>> Without event vectorization:
>> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --
>vdev="event_sw0" --
>> --prod_type_ethdev --nb_pkts=0 --verbose 2 --
>test=pipeline_queue
>> --stlist=a --wlcores=20
>> Port[0] using Rx adapter[0] configured
>> Port[0] using Tx adapter[0] Configured
>> 4.728 mpps avg 4.728 mpps
>Is this number before the patchset? If so, it would help put similar
>number with the patchset but not using vectorization feature.
I don’t remember the exact clock frequency I was using when I ran
the above test but with equal clocks:
1. Without the patchset applied
5.071 mpps
2. With patchset applied w/o enabling vector
5.123 mpps
3. With patchset applied with enabling vector
vector_sz@256 42.715 mpps
vector_sz@512 45.335 mpps
>>
>> With event vectorization:
>> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --
>vdev="event_sw0" --
>> --prod_type_ethdev --nb_pkts=0 --verbose 2 --
>test=pipeline_queue
>> --stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
>> --vector_size 256
>> Port[0] using Rx adapter[0] configured
>> Port[0] using Tx adapter[0] Configured
>> 34.383 mpps avg 34.383 mpps
>>
>> Having dedicated service cores for each Rx queues and tweaking the
>vector,
>> dequeue burst size would further improve performance.
>>
>> API usage is shown below:
>>
>> Configuration:
>>
>> struct rte_event_eth_rx_adapter_event_vector_config
>vec_conf;
>>
>> vector_pool = rte_event_vector_pool_create("vector_pool",
>> nb_elem, 0, vector_size, socket_id);
>>
>> rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
>> rte_event_eth_rx_adapter_queue_add(id, eth_id, -1,
>&queue_conf);
>> if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR)
>{
>> vec_conf.vector_sz = vector_size;
>> vec_conf.vector_timeout_ns = vector_tmo_nsec;
>> vec_conf.vector_mp = vector_pool;
>>
> rte_event_eth_rx_adapter_queue_event_vector_config(id,
>> eth_id, -1, &vec_conf);
>> }
>>
>> Fastpath:
>>
>> num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
>> if (!num)
>> continue;
>>
>> if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
>> switch (ev.event_type) {
>> case RTE_EVENT_TYPE_ETHDEV_VECTOR:
>> case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
>> struct rte_mbuf **mbufs;
>>
>> mbufs = ev.vector_ev->mbufs;
>> for (i = 0; i < ev.vector_ev->nb_elem; i++)
>> //Process mbufs.
>> break;
>> case ...
>> }
>> }
>> ...
>>
>> v5 Changes:
>> - Make `rte_event_vector_pool_create non-inline` to ease ABI
>stability.(Ray)
>> - Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
>> `rte_event_eth_rx_adapter_vector_limits_get` implementation to
>the patch
>> where they are initially defined.(Ray)
>> - Multiple gramatical and style fixes.(Jerin)
>> - Add missing release notes.(Jerin)
>>
>> v4 Changes:
>> - Fix missing event vector structure in event structure.(Jay)
>>
>> v3 Changes:
>> - Fix unintended formatting changes.
>>
>> v2 Changes:
>> - Multiple gramatical and style fixes.(Jerin)
>> - Add parameter to define vector size in power of 2. (Jerin)
>> - Redo patch series w/o breaking ABI till the last patch.(David)
>> - Add deprication notice to announce ABI break in 21.11.(David)
>> - Add vector limits validation to app/test-eventdev.
>>
>> Pavan Nikhilesh (8):
>> eventdev: introduce event vector capability
>> eventdev: introduce event vector Rx capability
>> eventdev: introduce event vector Tx capability
>> eventdev: add Rx adapter event vector support
>> eventdev: add Tx adapter event vector support
>> app/eventdev: add event vector mode in pipeline test
>> doc: announce event Rx adapter config changes
>> eventdev: simplify Rx adapter event vector config
>>
>> app/test-eventdev/evt_common.h | 4 +
>> app/test-eventdev/evt_options.c | 52 +++
>> app/test-eventdev/evt_options.h | 4 +
>> app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
>> app/test-eventdev/test_pipeline_common.c | 105 +++++-
>> app/test-eventdev/test_pipeline_common.h | 18 +
>> app/test-eventdev/test_pipeline_queue.c | 320
>++++++++++++++++--
>> .../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
>> .../prog_guide/event_ethernet_tx_adapter.rst | 12 +
>> doc/guides/prog_guide/eventdev.rst | 36 +-
>> doc/guides/rel_notes/deprecation.rst | 9 +
>> doc/guides/rel_notes/release_21_05.rst | 8 +
>> doc/guides/tools/testeventdev.rst | 45 ++-
>> lib/librte_eventdev/eventdev_pmd.h | 31 +-
>> .../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
>> .../rte_event_eth_rx_adapter.h | 78 +++++
>> .../rte_event_eth_tx_adapter.c | 66 +++-
>> lib/librte_eventdev/rte_eventdev.c | 53 ++-
>> lib/librte_eventdev/rte_eventdev.h | 113 ++++++-
>> lib/librte_eventdev/version.map | 4 +
>> 20 files changed, 1524 insertions(+), 87 deletions(-)
>>
>> --
>> 2.17.1
>
>Just a heads up. v5 patchset doesn't apply cleanly on HEAD
>(5f0849c1155849dfdbf950c91c52cdf9cd301f59). Although, it applies
>cleanly on app/eventdev: fix timeout accuracy
>(c33d48387dc8ccf1b432820f6e0cd4992ab486df).
This patchset is currently rebased on main branch, I will rebase it on
dpdk-next-event in next version.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
2021-03-24 5:05 4% ` [dpdk-dev] [PATCH v5 " pbhagavatula
@ 2021-03-24 5:39 0% ` Jayatheerthan, Jay
2021-03-24 6:44 0% ` Pavan Nikhilesh Bhagavatula
2021-03-24 19:28 4% ` [dpdk-dev] [PATCH v6 " pbhagavatula
1 sibling, 1 reply; 200+ results
From: Jayatheerthan, Jay @ 2021-03-24 5:39 UTC (permalink / raw)
To: pbhagavatula, jerinj, Carrillo, Erik G, Gujjar, Abhinandan S,
McDaniel, Timothy, hemant.agrawal, Van Haaren, Harry,
mattias.ronnblom, Ma, Liang J
Cc: dev
> -----Original Message-----
> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Wednesday, March 24, 2021 10:35 AM
> To: jerinj@marvell.com; Jayatheerthan, Jay <jay.jayatheerthan@intel.com>; Carrillo, Erik G <erik.g.carrillo@intel.com>; Gujjar, Abhinandan
> S <abhinandan.gujjar@intel.com>; McDaniel, Timothy <timothy.mcdaniel@intel.com>; hemant.agrawal@nxp.com; Van Haaren, Harry
> <harry.van.haaren@intel.com>; mattias.ronnblom <mattias.ronnblom@ericsson.com>; Ma, Liang J <liang.j.ma@intel.com>
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> In traditional event programming model, events are identified by a
> flow-id and a uintptr_t. The flow-id uniquely identifies a given event
> and determines the order of scheduling based on schedule type, the
> uintptr_t holds a single object.
>
> Event devices also support burst mode with configurable dequeue depth,
> i.e. each dequeue call would return multiple events and each event
> might be at a different stage of the pipeline.
> Having a burst of events belonging to different stages in a dequeue
> burst is not only difficult to vectorize but also increases the scheduler
> overhead and application overhead of pipelining events further.
> Using event vectors we see a performance gain of ~628% as shown in [1].
This is very impressive performance boost. Thanks so much for putting this patchset together! Just curious, was any performance measurement done for existing applications (non-vector)?
>
> By introducing event vectorization, each event will be capable of holding
> multiple uintptr_t of the same flow thereby allowing applications
> to vectorize their pipeline and reduce the complexity of pipelining
> events across multiple stages. This also reduces the complexity of handling
> enqueue and dequeue on an event device.
>
> Since event devices are transparent to the events they are scheduling
> so the event producers such as eth_rx_adapter, crypto_adapter , etc..
> are responsible for vectorizing the buffers of the same flow into a single
> event.
>
> The series also breaks ABI in the patch [8/8] which is targetted to the
> v21.11 release.
>
> The dpdk-test-eventdev application has been updated with options to test
> multiple vector sizes and timeouts.
>
> [1]
> As for performance improvement, with a ARM Cortex-A72 equivalent processer,
> software event device (--vdev=event_sw0), single worker core, single stage
> and using one service core for Rx adapter, Tx adapter, Scheduling.
>
> Without event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 4.728 mpps avg 4.728 mpps
Is this number before the patchset? If so, it would help put similar number with the patchset but not using vectorization feature.
>
> With event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
> --vector_size 256
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 34.383 mpps avg 34.383 mpps
>
> Having dedicated service cores for each Rx queues and tweaking the vector,
> dequeue burst size would further improve performance.
>
> API usage is shown below:
>
> Configuration:
>
> struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
>
> vector_pool = rte_event_vector_pool_create("vector_pool",
> nb_elem, 0, vector_size, socket_id);
>
> rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
> rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
> if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
> vec_conf.vector_sz = vector_size;
> vec_conf.vector_timeout_ns = vector_tmo_nsec;
> vec_conf.vector_mp = vector_pool;
> rte_event_eth_rx_adapter_queue_event_vector_config(id,
> eth_id, -1, &vec_conf);
> }
>
> Fastpath:
>
> num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
> if (!num)
> continue;
>
> if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
> switch (ev.event_type) {
> case RTE_EVENT_TYPE_ETHDEV_VECTOR:
> case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
> struct rte_mbuf **mbufs;
>
> mbufs = ev.vector_ev->mbufs;
> for (i = 0; i < ev.vector_ev->nb_elem; i++)
> //Process mbufs.
> break;
> case ...
> }
> }
> ...
>
> v5 Changes:
> - Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
> - Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
> `rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
> where they are initially defined.(Ray)
> - Multiple gramatical and style fixes.(Jerin)
> - Add missing release notes.(Jerin)
>
> v4 Changes:
> - Fix missing event vector structure in event structure.(Jay)
>
> v3 Changes:
> - Fix unintended formatting changes.
>
> v2 Changes:
> - Multiple gramatical and style fixes.(Jerin)
> - Add parameter to define vector size in power of 2. (Jerin)
> - Redo patch series w/o breaking ABI till the last patch.(David)
> - Add deprication notice to announce ABI break in 21.11.(David)
> - Add vector limits validation to app/test-eventdev.
>
> Pavan Nikhilesh (8):
> eventdev: introduce event vector capability
> eventdev: introduce event vector Rx capability
> eventdev: introduce event vector Tx capability
> eventdev: add Rx adapter event vector support
> eventdev: add Tx adapter event vector support
> app/eventdev: add event vector mode in pipeline test
> doc: announce event Rx adapter config changes
> eventdev: simplify Rx adapter event vector config
>
> app/test-eventdev/evt_common.h | 4 +
> app/test-eventdev/evt_options.c | 52 +++
> app/test-eventdev/evt_options.h | 4 +
> app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
> app/test-eventdev/test_pipeline_common.c | 105 +++++-
> app/test-eventdev/test_pipeline_common.h | 18 +
> app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
> .../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
> .../prog_guide/event_ethernet_tx_adapter.rst | 12 +
> doc/guides/prog_guide/eventdev.rst | 36 +-
> doc/guides/rel_notes/deprecation.rst | 9 +
> doc/guides/rel_notes/release_21_05.rst | 8 +
> doc/guides/tools/testeventdev.rst | 45 ++-
> lib/librte_eventdev/eventdev_pmd.h | 31 +-
> .../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
> .../rte_event_eth_rx_adapter.h | 78 +++++
> .../rte_event_eth_tx_adapter.c | 66 +++-
> lib/librte_eventdev/rte_eventdev.c | 53 ++-
> lib/librte_eventdev/rte_eventdev.h | 113 ++++++-
> lib/librte_eventdev/version.map | 4 +
> 20 files changed, 1524 insertions(+), 87 deletions(-)
>
> --
> 2.17.1
Just a heads up. v5 patchset doesn't apply cleanly on HEAD (5f0849c1155849dfdbf950c91c52cdf9cd301f59). Although, it applies cleanly on app/eventdev: fix timeout accuracy (c33d48387dc8ccf1b432820f6e0cd4992ab486df).
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v5 0/8] Introduce event vectorization
2021-03-19 20:57 4% ` [dpdk-dev] [PATCH v4 " pbhagavatula
2021-03-23 18:44 0% ` [dpdk-dev] [PATCH v4 0/8] Introduce event vectorization Jerin Jacob
@ 2021-03-24 5:05 4% ` pbhagavatula
2021-03-24 5:39 0% ` Jayatheerthan, Jay
2021-03-24 19:28 4% ` [dpdk-dev] [PATCH v6 " pbhagavatula
2 siblings, 2 replies; 200+ results
From: pbhagavatula @ 2021-03-24 5:05 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~628% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
4.728 mpps avg 4.728 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
34.383 mpps avg 34.383 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v5 Changes:
- Make `rte_event_vector_pool_create non-inline` to ease ABI stability.(Ray)
- Move `rte_event_eth_rx_adapter_queue_event_vector_config` and
`rte_event_eth_rx_adapter_vector_limits_get` implementation to the patch
where they are initially defined.(Ray)
- Multiple gramatical and style fixes.(Jerin)
- Add missing release notes.(Jerin)
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/rel_notes/release_21_05.rst | 8 +
doc/guides/tools/testeventdev.rst | 45 ++-
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 78 +++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 53 ++-
lib/librte_eventdev/rte_eventdev.h | 113 ++++++-
lib/librte_eventdev/version.map | 4 +
20 files changed, 1524 insertions(+), 87 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH v2] ethdev: introduce enable_driver_sdk to install driver headers
2021-03-23 17:04 0% ` Ferruh Yigit
@ 2021-03-24 4:32 3% ` Tyler Retzlaff
2021-03-24 11:27 0% ` Ferruh Yigit
0 siblings, 1 reply; 200+ results
From: Tyler Retzlaff @ 2021-03-24 4:32 UTC (permalink / raw)
To: Ferruh Yigit
Cc: dev, thomas, andrew.rybchenko, bruce.richardson, Shepard Siegel
On Tue, Mar 23, 2021 at 05:04:08PM +0000, Ferruh Yigit wrote:
> >diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build
> >index c37b2e377..4353fa6b7 100644
> >--- a/lib/librte_ethdev/meson.build
> >+++ b/lib/librte_ethdev/meson.build
> >@@ -20,8 +20,14 @@ headers = files('rte_ethdev.h',
> > 'rte_mtr_driver.h',
> > 'rte_tm.h',
> > 'rte_tm_driver.h')
> >+
> > indirect_headers += files(
> > 'rte_ethdev_core.h',
> > 'rte_eth_ctrl.h')
> >+driver_sdk_headers += files(
> >+ 'ethdev_driver.h',
> >+ 'ethdev_pci.h',
> >+ 'ethdev_vdev.h')
> >+
> > deps += ['net', 'kvargs', 'meter', 'telemetry']
>
i feel like i missed a reply here. but just to clarify only ethdev will
be covered by this patch. inclusion of other driver headers was
discussed off list (sorry) and it emerged that it would result in
withdraw a number of driver api/abi that had not been marked as
__rte_internal.
for driver api that were being exported as 'stable' a deprecation notice
will need to be issued in order to make them part of the
driver_sdk_headers. for that reason only ethdev is being made available
under this option for now.
please ack/nack the patch as-is
thanks
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v4 0/8] Introduce event vectorization
2021-03-19 20:57 4% ` [dpdk-dev] [PATCH v4 " pbhagavatula
@ 2021-03-23 18:44 0% ` Jerin Jacob
2021-03-24 5:05 4% ` [dpdk-dev] [PATCH v5 " pbhagavatula
2 siblings, 0 replies; 200+ results
From: Jerin Jacob @ 2021-03-23 18:44 UTC (permalink / raw)
To: Pavan Nikhilesh
Cc: Jerin Jacob, Jayatheerthan, Jay, Erik Gabriel Carrillo, Gujjar,
Abhinandan S, McDaniel, Timothy, Hemant Agrawal, Van Haaren,
Harry, Mattias Rönnblom, Liang Ma, dpdk-dev
On Sat, Mar 20, 2021 at 2:27 AM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> In traditional event programming model, events are identified by a
> flow-id and a uintptr_t. The flow-id uniquely identifies a given event
> and determines the order of scheduling based on schedule type, the
> uintptr_t holds a single object.
>
> Event devices also support burst mode with configurable dequeue depth,
> i.e. each dequeue call would return multiple events and each event
> might be at a different stage of the pipeline.
> Having a burst of events belonging to different stages in a dequeue
> burst is not only difficult to vectorize but also increases the scheduler
> overhead and application overhead of pipelining events further.
> Using event vectors we see a performance gain of ~628% as shown in [1].
>
> By introducing event vectorization, each event will be capable of holding
> multiple uintptr_t of the same flow thereby allowing applications
> to vectorize their pipeline and reduce the complexity of pipelining
> events across multiple stages. This also reduces the complexity of handling
> enqueue and dequeue on an event device.
>
> Since event devices are transparent to the events they are scheduling
> so the event producers such as eth_rx_adapter, crypto_adapter , etc..
> are responsible for vectorizing the buffers of the same flow into a single
> event.
>
> The series also breaks ABI in the patch [8/8] which is targetted to the
> v21.11 release.
>
> The dpdk-test-eventdev application has been updated with options to test
> multiple vector sizes and timeouts.
>
> [1]
> As for performance improvement, with a ARM Cortex-A72 equivalent processer,
> software event device (--vdev=event_sw0), single worker core, single stage
> and using one service core for Rx adapter, Tx adapter, Scheduling.
>
> Without event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 4.728 mpps avg 4.728 mpps
>
> With event vectorization:
> ./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
> --prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
> --stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
> --vector_size 256
> Port[0] using Rx adapter[0] configured
> Port[0] using Tx adapter[0] Configured
> 34.383 mpps avg 34.383 mpps
>
> Having dedicated service cores for each Rx queues and tweaking the vector,
> dequeue burst size would further improve performance.
>
> API usage is shown below:
>
> Configuration:
>
> struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
>
> vector_pool = rte_event_vector_pool_create("vector_pool",
> nb_elem, 0, vector_size, socket_id);
>
> rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
> rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
> if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
> vec_conf.vector_sz = vector_size;
> vec_conf.vector_timeout_ns = vector_tmo_nsec;
> vec_conf.vector_mp = vector_pool;
> rte_event_eth_rx_adapter_queue_event_vector_config(id,
> eth_id, -1, &vec_conf);
> }
>
> Fastpath:
>
> num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
> if (!num)
> continue;
>
> if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
> switch (ev.event_type) {
> case RTE_EVENT_TYPE_ETHDEV_VECTOR:
> case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
> struct rte_mbuf **mbufs;
>
> mbufs = ev.vector_ev->mbufs;
> for (i = 0; i < ev.vector_ev->nb_elem; i++)
> //Process mbufs.
> break;
> case ...
> }
> }
> ...
>
> v4 Changes:
> - Fix missing event vector structure in event structure.(Jay)
>
> v3 Changes:
> - Fix unintended formatting changes.
>
> v2 Changes:
> - Multiple gramatical and style fixes.(Jerin)
> - Add parameter to define vector size in power of 2. (Jerin)
> - Redo patch series w/o breaking ABI till the last patch.(David)
> - Add deprication notice to announce ABI break in 21.11.(David)
> - Add vector limits validation to app/test-eventdev.
>
> Pavan Nikhilesh (8):
> eventdev: introduce event vector capability
> eventdev: introduce event vector Rx capability
> eventdev: introduce event vector Tx capability
> eventdev: add Rx adapter event vector support
> eventdev: add Tx adapter event vector support
> app/eventdev: add event vector mode in pipeline test
> doc: announce event Rx adapter config changes
> eventdev: simplify Rx adapter event vector config
>
> app/test-eventdev/evt_common.h | 4 +
> app/test-eventdev/evt_options.c | 52 +++
> app/test-eventdev/evt_options.h | 4 +
> app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
> app/test-eventdev/test_pipeline_common.c | 105 +++++-
> app/test-eventdev/test_pipeline_common.h | 18 +
> app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
> .../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
> .../prog_guide/event_ethernet_tx_adapter.rst | 12 +
> doc/guides/prog_guide/eventdev.rst | 36 +-
> doc/guides/rel_notes/deprecation.rst | 9 +
> doc/guides/tools/testeventdev.rst | 28 ++
> lib/librte_eventdev/eventdev_pmd.h | 31 +-
> .../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
> .../rte_event_eth_rx_adapter.h | 68 ++++
> .../rte_event_eth_tx_adapter.c | 66 +++-
> lib/librte_eventdev/rte_eventdev.c | 11 +-
> lib/librte_eventdev/rte_eventdev.h | 144 +++++++-
> lib/librte_eventdev/version.map | 4 +
> 19 files changed, 1479 insertions(+), 86 deletions(-)
Please update release notes(doc/guides/rel_notes/release_21_05.rst)
for this feature.
If there are no more comments on this series from others. IMO, Good to
merge the next series for RC1.
>
> --
> 2.17.1
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v2] ethdev: introduce enable_driver_sdk to install driver headers
@ 2021-03-23 17:04 0% ` Ferruh Yigit
2021-03-24 4:32 3% ` Tyler Retzlaff
0 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2021-03-23 17:04 UTC (permalink / raw)
To: Tyler Retzlaff, dev, Ed Czeck
Cc: thomas, andrew.rybchenko, bruce.richardson, Shepard Siegel
On 3/12/2021 10:20 PM, Tyler Retzlaff wrote:
> Introduce a meson option enable_driver_sdk when true installs internal
> driver headers for ethdev. this allows drivers that do not depend on
> stable api/abi to be built external to the dpdk source tree.
>
> Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
> ---
> lib/librte_ethdev/meson.build | 6 ++++++
> lib/meson.build | 4 ++++
> meson_options.txt | 2 ++
> 3 files changed, 12 insertions(+)
>
> diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build
> index c37b2e377..4353fa6b7 100644
> --- a/lib/librte_ethdev/meson.build
> +++ b/lib/librte_ethdev/meson.build
> @@ -20,8 +20,14 @@ headers = files('rte_ethdev.h',
> 'rte_mtr_driver.h',
> 'rte_tm.h',
> 'rte_tm_driver.h')
> +
> indirect_headers += files(
> 'rte_ethdev_core.h',
> 'rte_eth_ctrl.h')
>
> +driver_sdk_headers += files(
> + 'ethdev_driver.h',
> + 'ethdev_pci.h',
> + 'ethdev_vdev.h')
> +
> deps += ['net', 'kvargs', 'meter', 'telemetry']
> diff --git a/lib/meson.build b/lib/meson.build
> index 7712aa497..992ebdf63 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -67,6 +67,7 @@ foreach l:libraries
> sources = []
> headers = []
> indirect_headers = [] # public headers not directly included by apps
> + driver_sdk_headers = [] # public headers included by drivers
> includes = []
> cflags = default_cflags
> objs = [] # other object files to link against, used e.g. for
> @@ -105,6 +106,9 @@ foreach l:libraries
> dpdk_conf.set('RTE_LIB_' + name.to_upper(), 1)
> install_headers(headers)
> install_headers(indirect_headers)
> + if get_option('enable_driver_sdk')
> + install_headers(driver_sdk_headers)
> + endif
> dpdk_chkinc_headers += headers
>
> libname = 'rte_' + name
> diff --git a/meson_options.txt b/meson_options.txt
> index 6eff62e47..857874a19 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -8,6 +8,8 @@ option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>',
> description: 'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')
> option('enable_docs', type: 'boolean', value: false,
> description: 'build documentation')
> +option('enable_driver_sdk', type: 'boolean', value: false,
> + description: 'install internal driver plugin headers')
> option('enable_kmods', type: 'boolean', value: false,
> description: 'build kernel modules')
> option('examples', type: 'string', value: '',
>
+Ed, who was looking way to install 'ark_ext.h' for Ark PMD.
Ed,
Can you please review the patch from your perspective?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-23 10:13 0% ` Ferruh Yigit
2021-03-23 10:19 0% ` Ferruh Yigit
@ 2021-03-23 11:07 0% ` Ananyev, Konstantin
1 sibling, 0 replies; 200+ results
From: Ananyev, Konstantin @ 2021-03-23 11:07 UTC (permalink / raw)
To: Yigit, Ferruh, Andrew Rybchenko, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi, Ori Kam
> >>>>>>>>
> >>>>>>>> Note: The hairpin queue is not supported with above
> >>>>>>>> rte_eth_*x_queue_info_get, so the queue state could be
> >>>>>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >>>>>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >>>>>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >>>>>>>> it could be ABI compatible.
> >>>>>>>>
> >>>>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>>>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >>>>>>>
> >>>>>>> <...>
> >>>>>>>
> >>>>>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
> >>>>>>>> b/lib/librte_ethdev/rte_ethdev.h
> >>>>>>>> index efda313..3b83c5a 100644
> >>>>>>>> --- a/lib/librte_ethdev/rte_ethdev.h
> >>>>>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
> >>>>>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> >>>>>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >>>>>>>> uint16_t nb_desc; /**< configured number of RXDs. */
> >>>>>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>>>>>> + uint8_t queue_state;
> >>>>>>>> } __rte_cache_min_aligned;
> >>>>>>>> /**
> >>>>>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> >>>>>>>> struct rte_eth_txq_info {
> >>>>>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
> >>>>>>>> uint16_t nb_desc; /**< configured number of TXDs. */
> >>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>>>>>> + uint8_t queue_state;
> >>>>>>>> } __rte_cache_min_aligned;
> >>>>>>>> /* Generic Burst mode flag definition, values can be ORed. */
> >>>>>>>>
> >>>>>>>
> >>>>>>> This is causing an ABI warning [1], but I guess it is safe since the
> >>>>>>> size of the struct is not changing (cache align). Adding a few more
> >>>>>>> people to comment.
> >>>>>>>
> >>>>>>>
> >>>>>>> [1]
> >>>>>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
> >>>>>>
> >>>>>> Frankly speaking I dislike addition of queue_state as uint8_t.
> >>>>>> IMHO it should be either 'bool started' or enum to support more
> >>>>>> states in the future if we need.
> >>>>>
> >>>>> I think we already have set of defines for it:
> >>>>> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> >>>>> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> >>>>> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> >>>>>
> >>>>> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
> >>>>>
> >>>>> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> >>>>> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> >>>>> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> >>>>> Unless in future will want to change it in struct rte_eth_dev_data too
> >>>>> (or even hide it inside dev private queue data).
> >>>>
> >>>> I forgot about hairpin and bitmask... If so, I think it is
> >>>> sufficient to fix absolutely misleading comment, say
> >>>> that it is a bit mask and think about removal of
> >>>> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
> >>>> stopped+hairpin). May be consider to use uin16_t,
> >>>> since 8 bit is really small bitmask. It still fits in
> >>>> available hole.
> >>>
> >>> Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
> >>> and each of the states (stopped/started/hairpin) is mutually exclusive.
> >>> Is that not what was intended when hairpin queues were introduced?
> >>>
> >>
> >> Thanks, yes, you're right. My memory lies to me. If queue state
> >> is not a bit mask, it should be an enum from API point of view.
> >> Rx/Tx queue info structures are control path. I see no point to
> >> save bits here. Clear API is more important on control path.
> >> The only reason here to use uint8_t is to avoid ABI breakage.
> >> I can't judge if it is critical to wait or not.
> >
> > As alternate thought - introduce new API function,
> > something like:
> > int rte_eth_get_rxq_state(portid, queue_id);
> > Then rte_eth_dev_is_rx_hairpin_queue() probably can be deprecated
> > in favour of this new one.
> >
> >
>
> The 'rte_eth_dev_is_rx_hairpin_queue()' is internal function, and it is not
> visible to the application, it should be OK to keep it.
What I am saying - we well have get-state() - PMDs can use the new one
instead of rte_eth_dev_is_rx_hairpin_queue().
Or rte_eth_dev_is_rx_hairpin_queue() can be just a wrapper around get_rxq_state().
>
> But 'STATE_HAIRPIN' should be kept internal, or should be available to the
> application?
>
> The actual need is to know the start/stop state of the queue. That is for app to
> decide if 'rte_eth_tx_done_cleanup()' can be done or not an a queue:
> https://patches.dpdk.org/project/dpdk/patch/1614938252-62955-1-git-send-email-oulijun@huawei.com/
If we don't expose STATE_HAIRPIN what state we will report
for hairpin queue back to the user?
Either STARTED or STOPPED are both invalid and misleading.
I think we have to report all 3 supported states back to the user.
>
> And normally I also prefer APIs with simple & clear responsibility, but this one
> seems very related to the existing '_queue_info_get()' ones, so I am fine with
> both options.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-23 10:13 0% ` Ferruh Yigit
@ 2021-03-23 10:19 0% ` Ferruh Yigit
2021-03-23 11:07 0% ` Ananyev, Konstantin
1 sibling, 0 replies; 200+ results
From: Ferruh Yigit @ 2021-03-23 10:19 UTC (permalink / raw)
To: Ananyev, Konstantin, Andrew Rybchenko, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi, Ori Kam, jerinj, Bruce Richardson, Olivier Matz,
Anatoly Burakov
On 3/23/2021 10:13 AM, Ferruh Yigit wrote:
> On 3/22/2021 6:53 PM, Ananyev, Konstantin wrote:
>>
>>
>>> -----Original Message-----
>>> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>>> Sent: Monday, March 22, 2021 5:08 PM
>>> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh
>>> <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
>>> thomas@monjalon.net
>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko
>>> <arybchenko@solarflare.com>; David Marchand
>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi
>>> <bluca@debian.org>
>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue
>>> information
>>>
>>> On 3/22/21 7:53 PM, Ananyev, Konstantin wrote:
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>>>>> Sent: Monday, March 22, 2021 4:02 PM
>>>>> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh
>>>>> <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
>>>>> thomas@monjalon.net
>>>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko
>>>>> <arybchenko@solarflare.com>; David Marchand
>>>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi
>>>>> <bluca@debian.org>
>>>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue
>>>>> information
>>>>>
>>>>> On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
>>>>>>
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
>>>>>>> Sent: Monday, March 22, 2021 2:49 PM
>>>>>>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou
>>>>>>> <oulijun@huawei.com>; thomas@monjalon.net
>>>>>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko
>>>>>>> <arybchenko@solarflare.com>; David Marchand
>>>>>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi
>>>>>>> <bluca@debian.org>
>>>>>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve
>>>>>>> queue information
>>>>>>>
>>>>>>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
>>>>>>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>>>>>>>>> Currently, upper-layer application could get queue state only
>>>>>>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>>>>>>> this is not the recommended way to access it. So this patch
>>>>>>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>>>>>>> rte_eth_tx_queue_info_get API.
>>>>>>>>>
>>>>>>>>> Note: The hairpin queue is not supported with above
>>>>>>>>> rte_eth_*x_queue_info_get, so the queue state could be
>>>>>>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>>>>>>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>>>>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>>>>>>> it could be ABI compatible.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>>>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>>>>>>
>>>>>>>> <...>
>>>>>>>>
>>>>>>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>>>>>>>>> b/lib/librte_ethdev/rte_ethdev.h
>>>>>>>>> index efda313..3b83c5a 100644
>>>>>>>>> --- a/lib/librte_ethdev/rte_ethdev.h
>>>>>>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
>>>>>>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>>>>>>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>>>>>>>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>>>>>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>>>>> + uint8_t queue_state;
>>>>>>>>> } __rte_cache_min_aligned;
>>>>>>>>> /**
>>>>>>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>>>>>>>>> struct rte_eth_txq_info {
>>>>>>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
>>>>>>>>> uint16_t nb_desc; /**< configured number of TXDs. */
>>>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>>>>> + uint8_t queue_state;
>>>>>>>>> } __rte_cache_min_aligned;
>>>>>>>>> /* Generic Burst mode flag definition, values can be ORed. */
>>>>>>>>>
>>>>>>>>
>>>>>>>> This is causing an ABI warning [1], but I guess it is safe since the
>>>>>>>> size of the struct is not changing (cache align). Adding a few more
>>>>>>>> people to comment.
>>>>>>>>
>>>>>>>>
>>>>>>>> [1]
>>>>>>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>>>>>>>
>>>>>>> Frankly speaking I dislike addition of queue_state as uint8_t.
>>>>>>> IMHO it should be either 'bool started' or enum to support more
>>>>>>> states in the future if we need.
>>>>>>
>>>>>> I think we already have set of defines for it:
>>>>>> lib/librte_ethdev/rte_ethdev_driver.h:925:#define
>>>>>> RTE_ETH_QUEUE_STATE_STOPPED 0
>>>>>> lib/librte_ethdev/rte_ethdev_driver.h:926:#define
>>>>>> RTE_ETH_QUEUE_STATE_STARTED 1
>>>>>> lib/librte_ethdev/rte_ethdev_driver.h:927:#define
>>>>>> RTE_ETH_QUEUE_STATE_HAIRPIN 2
>>>>>>
>>>>>> If we want to publish it, then might be enough just move these macros to
>>>>>> rte_ethdev.h or so.
>>>>>>
>>>>>> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
>>>>>> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array
>>>>>> of uint8_t.
>>>>>> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
>>>>>> Unless in future will want to change it in struct rte_eth_dev_data too
>>>>>> (or even hide it inside dev private queue data).
>>>>>
>>>>> I forgot about hairpin and bitmask... If so, I think it is
>>>>> sufficient to fix absolutely misleading comment, say
>>>>> that it is a bit mask and think about removal of
>>>>> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
>>>>> stopped+hairpin). May be consider to use uin16_t,
>>>>> since 8 bit is really small bitmask. It still fits in
>>>>> available hole.
>>>>
>>>> Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
>>>> and each of the states (stopped/started/hairpin) is mutually exclusive.
>>>> Is that not what was intended when hairpin queues were introduced?
>>>>
>>>
>>> Thanks, yes, you're right. My memory lies to me. If queue state
>>> is not a bit mask, it should be an enum from API point of view.
>>> Rx/Tx queue info structures are control path. I see no point to
>>> save bits here. Clear API is more important on control path.
>>> The only reason here to use uint8_t is to avoid ABI breakage.
>>> I can't judge if it is critical to wait or not.
>>
>> As alternate thought - introduce new API function,
>> something like:
>> int rte_eth_get_rxq_state(portid, queue_id);
>> Then rte_eth_dev_is_rx_hairpin_queue() probably can be deprecated
>> in favour of this new one.
>>
>>
>
> The 'rte_eth_dev_is_rx_hairpin_queue()' is internal function, and it is not
> visible to the application, it should be OK to keep it.
>
> But 'STATE_HAIRPIN' should be kept internal, or should be available to the
> application?
>
> The actual need is to know the start/stop state of the queue. That is for app to
> decide if 'rte_eth_tx_done_cleanup()' can be done or not an a queue:
> https://patches.dpdk.org/project/dpdk/patch/1614938252-62955-1-git-send-email-oulijun@huawei.com/
>
>
> And normally I also prefer APIs with simple & clear responsibility, but this one
> seems very related to the existing '_queue_info_get()' ones, so I am fine with
> both options.
>
Another high-level discussion is, testpmd keeps lots of config/state itself, I
assume that is because it is not possible to get all DPDK config/state from DPDK
library, but not sure if this is a design decision.
Should we try to provide all config/state information via DPDK APIs, or should
we push this responsibility to the application level?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 18:53 0% ` Ananyev, Konstantin
@ 2021-03-23 10:13 0% ` Ferruh Yigit
2021-03-23 10:19 0% ` Ferruh Yigit
2021-03-23 11:07 0% ` Ananyev, Konstantin
0 siblings, 2 replies; 200+ results
From: Ferruh Yigit @ 2021-03-23 10:13 UTC (permalink / raw)
To: Ananyev, Konstantin, Andrew Rybchenko, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi, Ori Kam
On 3/22/2021 6:53 PM, Ananyev, Konstantin wrote:
>
>
>> -----Original Message-----
>> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>> Sent: Monday, March 22, 2021 5:08 PM
>> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
>> thomas@monjalon.net
>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>
>> On 3/22/21 7:53 PM, Ananyev, Konstantin wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>>>> Sent: Monday, March 22, 2021 4:02 PM
>>>> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
>>>> thomas@monjalon.net
>>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>>>
>>>> On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
>>>>>> Sent: Monday, March 22, 2021 2:49 PM
>>>>>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
>>>>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>>>>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>>>>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>>>>>
>>>>>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
>>>>>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>>>>>>>> Currently, upper-layer application could get queue state only
>>>>>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>>>>>> this is not the recommended way to access it. So this patch
>>>>>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>>>>>> rte_eth_tx_queue_info_get API.
>>>>>>>>
>>>>>>>> Note: The hairpin queue is not supported with above
>>>>>>>> rte_eth_*x_queue_info_get, so the queue state could be
>>>>>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>>>>>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>>>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>>>>>> it could be ABI compatible.
>>>>>>>>
>>>>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>>>>>
>>>>>>> <...>
>>>>>>>
>>>>>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>>>>>>>> b/lib/librte_ethdev/rte_ethdev.h
>>>>>>>> index efda313..3b83c5a 100644
>>>>>>>> --- a/lib/librte_ethdev/rte_ethdev.h
>>>>>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
>>>>>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>>>>>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>>>>>>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>>>>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>>>> + uint8_t queue_state;
>>>>>>>> } __rte_cache_min_aligned;
>>>>>>>> /**
>>>>>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>>>>>>>> struct rte_eth_txq_info {
>>>>>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
>>>>>>>> uint16_t nb_desc; /**< configured number of TXDs. */
>>>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>>>> + uint8_t queue_state;
>>>>>>>> } __rte_cache_min_aligned;
>>>>>>>> /* Generic Burst mode flag definition, values can be ORed. */
>>>>>>>>
>>>>>>>
>>>>>>> This is causing an ABI warning [1], but I guess it is safe since the
>>>>>>> size of the struct is not changing (cache align). Adding a few more
>>>>>>> people to comment.
>>>>>>>
>>>>>>>
>>>>>>> [1]
>>>>>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>>>>>>
>>>>>> Frankly speaking I dislike addition of queue_state as uint8_t.
>>>>>> IMHO it should be either 'bool started' or enum to support more
>>>>>> states in the future if we need.
>>>>>
>>>>> I think we already have set of defines for it:
>>>>> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
>>>>> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
>>>>> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>>>>>
>>>>> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
>>>>>
>>>>> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
>>>>> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
>>>>> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
>>>>> Unless in future will want to change it in struct rte_eth_dev_data too
>>>>> (or even hide it inside dev private queue data).
>>>>
>>>> I forgot about hairpin and bitmask... If so, I think it is
>>>> sufficient to fix absolutely misleading comment, say
>>>> that it is a bit mask and think about removal of
>>>> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
>>>> stopped+hairpin). May be consider to use uin16_t,
>>>> since 8 bit is really small bitmask. It still fits in
>>>> available hole.
>>>
>>> Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
>>> and each of the states (stopped/started/hairpin) is mutually exclusive.
>>> Is that not what was intended when hairpin queues were introduced?
>>>
>>
>> Thanks, yes, you're right. My memory lies to me. If queue state
>> is not a bit mask, it should be an enum from API point of view.
>> Rx/Tx queue info structures are control path. I see no point to
>> save bits here. Clear API is more important on control path.
>> The only reason here to use uint8_t is to avoid ABI breakage.
>> I can't judge if it is critical to wait or not.
>
> As alternate thought - introduce new API function,
> something like:
> int rte_eth_get_rxq_state(portid, queue_id);
> Then rte_eth_dev_is_rx_hairpin_queue() probably can be deprecated
> in favour of this new one.
>
>
The 'rte_eth_dev_is_rx_hairpin_queue()' is internal function, and it is not
visible to the application, it should be OK to keep it.
But 'STATE_HAIRPIN' should be kept internal, or should be available to the
application?
The actual need is to know the start/stop state of the queue. That is for app to
decide if 'rte_eth_tx_done_cleanup()' can be done or not an a queue:
https://patches.dpdk.org/project/dpdk/patch/1614938252-62955-1-git-send-email-oulijun@huawei.com/
And normally I also prefer APIs with simple & clear responsibility, but this one
seems very related to the existing '_queue_info_get()' ones, so I am fine with
both options.
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v2 00/10] eal: Add new API for threading
2021-03-18 15:48 5% ` David Marchand
@ 2021-03-23 0:20 2% ` Narcisa Ana Maria Vasile
2021-03-25 3:46 2% ` [dpdk-dev] [PATCH v3 " Narcisa Ana Maria Vasile
1 sibling, 1 reply; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-03-23 0:20 UTC (permalink / raw)
To: dev, thomas, dmitry.kozliuk, khot, navasile, dmitrym, roretzla,
talshn, ocardona
Cc: bruce.richardson, david.marchand, pallavi.kadam
From: Narcisa Vasile <navasile@microsoft.com>
EAL thread API
**Problem Statement**
DPDK currently uses the pthread interface to create and manage threads.
Windows does not support the POSIX thread programming model, so it currently
relies on a header file that hides the Windows calls under
pthread matched interfaces. Given that EAL should isolate the environment
specifics from the applications and libraries and mediate
all the communication with the operating systems, a new EAL interface
is needed for thread management.
**Goals**
* Introduce a generic EAL API for threading support that will remove
the current Windows pthread.h shim.
* Replace references to pthread_* across the DPDK codebase with the new
RTE_THREAD_* API.
* Allow users to choose between using the RTE_THREAD_* API or a
3rd party thread library through a configuration option.
**Design plan**
New API main files:
* rte_thread.h (librte_eal/include)
* rte_thread_types.h (librte_eal/include)
* rte_thread_windows_types.h (librte_eal/windows/include)
* rte_thread.c (librte_eal/windows)
* rte_thread.c (librte_eal/common)
For flexibility, the user is offered the option of either using the RTE_THREAD_* API or
a 3rd party thread library, through a meson flag “use_external_thread_lib”.
By default, this flag is set to FALSE, which means Windows libraries and applications
will use the RTE_THREAD_* API for managing threads.
If compiling on Windows and the “use_external_thread_lib” is *not* set,
the following files will be parsed:
* include/rte_thread.h
* windows/include/rte_thread_windows_types.h
* windows/rte_thread.c
In all other cases, the compilation/parsing includes the following files:
* include/rte_thread.h
* include/rte_thread_types.h
* common/rte_thread.c
**A schematic example of the design**
--------------------------------------------------
lib/librte_eal/include/rte_thread.h
int rte_thread_create();
lib/librte_eal/common/rte_thread.c
int rte_thread_create()
{
return pthread_create();
}
lib/librte_eal/windows/rte_thread.c
int rte_thread_create()
{
return CreateThread();
}
lib/librte_eal/windows/meson.build
if get_option('use_external_thread_lib')
sources += 'librte_eal/common/rte_thread.c'
else
sources += 'librte_eal/windows/rte_thread.c'
endif
-----------------------------------------------------
**Thread attributes**
When or after a thread is created, specific characteristics of the thread
can be adjusted. Given that the thread characteristics that are of interest
for DPDK applications are affinity and priority, the following structure
that represents thread attributes has been defined:
typedef struct
{
enum rte_thread_priority priority;
rte_cpuset_t cpuset;
} rte_thread_attr_t;
The *rte_thread_create()* function can optionally receive an rte_thread_attr_t
object that will cause the thread to be created with the affinity and priority
described by the attributes object. If no rte_thread_attr_t is passed
(parameter is NULL), the default affinity and priority are used.
An rte_thread_attr_t object can also be set to the default values
by calling *rte_thread_attr_init()*.
*Priority* is represented through an enum that currently advertises
two values for priority:
- RTE_THREAD_PRIORITY_NORMAL
- RTE_THREAD_PRIORITY_REALTIME_CRITICAL
The enum can be extended to allow for multiple priority levels.
rte_thread_set_priority - sets the priority of a thread
rte_thread_attr_set_priority - updates an rte_thread_attr_t object
with a new value for priority
The user can choose thread priority through an EAL parameter,
when starting an application. The two options above are available:
--thread-prio normal
--thread-prio realtime
Example:
./dpdk-l2fwd -l 0-3 -n 4 –thread-prio normal -- -q 8 -p ffff
*Affinity* is described by the already known “rte_cpuset_t” type.
rte_thread_attr_set/get_affinity - sets/gets the affinity field in a
rte_thread_attr_t object
rte_thread_set/get_affinity – sets/gets the affinity of a thread
**Errors**
A translation function that maps Windows error codes to errno-style
error codes is provided.
**Future work**
Note that this patchset was focused on introducing new API that will
remove the Windows pthread.h shim. In DPDK, there are still a few references
to pthread_* that were not implemented in the shim.
The long term plan is for EAL to provide full threading support:
* Adding support for conditional variables
* Additional functionality offered by pthread_* (such as pthread_setname_np, etc.)
* Static mutex initializers are not used on Windows. If we must continue
using them, they need to be platform dependent and an implementation will
need to be provided for Windows.
v2:
- revert changes that break ABI
- break up changes into smaller patches
- fix coding style issues
- fix issues with errors
- fix parameter type in examples/kni.c
Narcisa Vasile (10):
eal: add thread id and simple thread functions
eal: add thread attributes
windows/eal: translate Windows errors to errno-style errors
eal: implement functions for thread affinity management
eal: implement thread priority management functions
eal: add thread lifetime management
eal: implement functions for mutex management
eal: implement functions for thread barrier management
eal: add EAL argument for setting thread priority
Enable the new EAL thread API
app/test/process.h | 6 +-
app/test/test_lcores.c | 16 +-
app/test/test_link_bonding.c | 10 +-
app/test/test_lpm_perf.c | 12 +-
config/meson.build | 4 +
drivers/bus/dpaa/base/qbman/bman_driver.c | 6 +-
drivers/bus/dpaa/base/qbman/dpaa_sys.c | 14 +-
drivers/bus/dpaa/base/qbman/process.c | 6 +-
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 6 +-
drivers/compress/mlx5/mlx5_compress.c | 10 +-
drivers/event/dlb/pf/base/dlb_osdep.h | 2 +-
drivers/event/dlb2/pf/base/dlb2_osdep.h | 2 +-
drivers/net/af_xdp/rte_eth_af_xdp.c | 18 +-
drivers/net/ark/ark_ethdev.c | 4 +-
drivers/net/atlantic/atl_ethdev.c | 4 +-
drivers/net/atlantic/atl_types.h | 5 +-
.../net/atlantic/hw_atl/hw_atl_utils_fw2x.c | 24 +-
drivers/net/axgbe/axgbe_dev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.c | 8 +-
drivers/net/axgbe/axgbe_ethdev.h | 8 +-
drivers/net/axgbe/axgbe_i2c.c | 4 +-
drivers/net/axgbe/axgbe_mdio.c | 8 +-
drivers/net/axgbe/axgbe_phy_impl.c | 6 +-
drivers/net/bnxt/bnxt.h | 16 +-
drivers/net/bnxt/bnxt_cpr.c | 4 +-
drivers/net/bnxt/bnxt_ethdev.c | 54 +-
drivers/net/bnxt/bnxt_irq.c | 8 +-
drivers/net/bnxt/bnxt_reps.c | 10 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 34 +-
drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 4 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 24 +-
drivers/net/bnxt/tf_ulp/ulp_fc_mgr.h | 2 +-
drivers/net/ena/base/ena_plat_dpdk.h | 8 +-
drivers/net/enic/enic.h | 2 +-
drivers/net/hns3/hns3_ethdev.h | 2 +-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_mbx.c | 2 +-
drivers/net/ice/ice_dcf_parent.c | 4 +-
drivers/net/ipn3ke/ipn3ke_representor.c | 6 +-
drivers/net/ixgbe/ixgbe_ethdev.c | 2 +-
drivers/net/ixgbe/ixgbe_ethdev.h | 2 +-
drivers/net/kni/rte_eth_kni.c | 6 +-
drivers/net/mlx5/linux/mlx5_os.c | 2 +-
drivers/net/mlx5/mlx5.c | 20 +-
drivers/net/mlx5/mlx5.h | 2 +-
drivers/net/mlx5/mlx5_txpp.c | 8 +-
drivers/net/mlx5/windows/mlx5_flow_os.c | 10 +-
drivers/net/mlx5/windows/mlx5_os.c | 2 +-
drivers/net/qede/base/bcm_osal.h | 8 +-
drivers/net/vhost/rte_eth_vhost.c | 22 +-
.../net/virtio/virtio_user/virtio_user_dev.c | 30 +-
.../net/virtio/virtio_user/virtio_user_dev.h | 2 +-
drivers/raw/ifpga/ifpga_rawdev.c | 8 +-
drivers/vdpa/ifc/ifcvf_vdpa.c | 36 +-
drivers/vdpa/mlx5/mlx5_vdpa.c | 24 +-
drivers/vdpa/mlx5/mlx5_vdpa.h | 6 +-
drivers/vdpa/mlx5/mlx5_vdpa_event.c | 55 +-
examples/kni/main.c | 6 +-
examples/vhost/main.c | 2 +-
examples/vhost_blk/vhost_blk.c | 10 +-
lib/librte_eal/common/eal_common_options.c | 36 +-
lib/librte_eal/common/eal_common_proc.c | 48 +-
lib/librte_eal/common/eal_common_thread.c | 43 +-
lib/librte_eal/common/eal_common_trace.c | 2 +-
lib/librte_eal/common/eal_internal_cfg.h | 2 +
lib/librte_eal/common/eal_options.h | 2 +
lib/librte_eal/common/eal_private.h | 2 +-
lib/librte_eal/common/malloc_mp.c | 32 +-
lib/librte_eal/common/meson.build | 1 +
lib/librte_eal/common/rte_thread.c | 342 ++++++++++++
lib/librte_eal/freebsd/eal.c | 37 +-
lib/librte_eal/freebsd/eal_alarm.c | 12 +-
lib/librte_eal/freebsd/eal_interrupts.c | 4 +-
lib/librte_eal/freebsd/eal_thread.c | 8 +-
lib/librte_eal/include/meson.build | 1 +
lib/librte_eal/include/rte_lcore.h | 8 +-
lib/librte_eal/include/rte_per_lcore.h | 2 -
lib/librte_eal/include/rte_thread.h | 333 ++++++++++-
lib/librte_eal/include/rte_thread_types.h | 20 +
lib/librte_eal/linux/eal.c | 42 +-
lib/librte_eal/linux/eal_alarm.c | 10 +-
lib/librte_eal/linux/eal_interrupts.c | 4 +-
lib/librte_eal/linux/eal_thread.c | 8 +-
lib/librte_eal/linux/eal_timer.c | 2 +-
lib/librte_eal/rte_eal_exports.def | 19 +
lib/librte_eal/unix/meson.build | 1 -
lib/librte_eal/unix/rte_thread.c | 86 ---
lib/librte_eal/version.map | 21 +
lib/librte_eal/windows/eal.c | 26 +-
lib/librte_eal/windows/eal_interrupts.c | 6 +-
lib/librte_eal/windows/eal_lcore.c | 170 ++++--
lib/librte_eal/windows/eal_thread.c | 24 +-
lib/librte_eal/windows/eal_windows.h | 20 +-
lib/librte_eal/windows/include/meson.build | 1 +
lib/librte_eal/windows/include/pthread.h | 186 -------
.../include/rte_windows_thread_types.h | 19 +
lib/librte_eal/windows/include/sched.h | 2 +-
lib/librte_eal/windows/meson.build | 7 +-
lib/librte_eal/windows/rte_thread.c | 516 +++++++++++++++++-
lib/librte_ethdev/rte_ethdev.c | 4 +-
lib/librte_ethdev/rte_ethdev_core.h | 3 +-
lib/librte_ethdev/rte_flow.c | 4 +-
.../rte_event_eth_rx_adapter.c | 6 +-
lib/librte_vhost/fd_man.c | 40 +-
lib/librte_vhost/fd_man.h | 6 +-
lib/librte_vhost/socket.c | 124 ++---
lib/librte_vhost/vhost.c | 10 +-
meson_options.txt | 2 +
108 files changed, 2034 insertions(+), 906 deletions(-)
create mode 100644 lib/librte_eal/common/rte_thread.c
create mode 100644 lib/librte_eal/include/rte_thread_types.h
delete mode 100644 lib/librte_eal/unix/rte_thread.c
delete mode 100644 lib/librte_eal/windows/include/pthread.h
create mode 100644 lib/librte_eal/windows/include/rte_windows_thread_types.h
--
2.30.0.vfs.0.2
^ permalink raw reply [relevance 2%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 17:07 3% ` Andrew Rybchenko
@ 2021-03-22 18:53 0% ` Ananyev, Konstantin
2021-03-23 10:13 0% ` Ferruh Yigit
0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2021-03-22 18:53 UTC (permalink / raw)
To: Andrew Rybchenko, Yigit, Ferruh, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
> -----Original Message-----
> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Sent: Monday, March 22, 2021 5:08 PM
> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
> thomas@monjalon.net
> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>
> On 3/22/21 7:53 PM, Ananyev, Konstantin wrote:
> >
> >
> >> -----Original Message-----
> >> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> >> Sent: Monday, March 22, 2021 4:02 PM
> >> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
> >> thomas@monjalon.net
> >> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> >> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> >> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
> >>
> >> On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
> >>>> Sent: Monday, March 22, 2021 2:49 PM
> >>>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
> >>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> >>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> >>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
> >>>>
> >>>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
> >>>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
> >>>>>> Currently, upper-layer application could get queue state only
> >>>>>> through pointers such as dev->data->tx_queue_state[queue_id],
> >>>>>> this is not the recommended way to access it. So this patch
> >>>>>> add get queue state when call rte_eth_rx_queue_info_get and
> >>>>>> rte_eth_tx_queue_info_get API.
> >>>>>>
> >>>>>> Note: The hairpin queue is not supported with above
> >>>>>> rte_eth_*x_queue_info_get, so the queue state could be
> >>>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >>>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >>>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >>>>>> it could be ABI compatible.
> >>>>>>
> >>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >>>>>
> >>>>> <...>
> >>>>>
> >>>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
> >>>>>> b/lib/librte_ethdev/rte_ethdev.h
> >>>>>> index efda313..3b83c5a 100644
> >>>>>> --- a/lib/librte_ethdev/rte_ethdev.h
> >>>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
> >>>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> >>>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >>>>>> uint16_t nb_desc; /**< configured number of RXDs. */
> >>>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>>>> + uint8_t queue_state;
> >>>>>> } __rte_cache_min_aligned;
> >>>>>> /**
> >>>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> >>>>>> struct rte_eth_txq_info {
> >>>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
> >>>>>> uint16_t nb_desc; /**< configured number of TXDs. */
> >>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>>>> + uint8_t queue_state;
> >>>>>> } __rte_cache_min_aligned;
> >>>>>> /* Generic Burst mode flag definition, values can be ORed. */
> >>>>>>
> >>>>>
> >>>>> This is causing an ABI warning [1], but I guess it is safe since the
> >>>>> size of the struct is not changing (cache align). Adding a few more
> >>>>> people to comment.
> >>>>>
> >>>>>
> >>>>> [1]
> >>>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
> >>>>
> >>>> Frankly speaking I dislike addition of queue_state as uint8_t.
> >>>> IMHO it should be either 'bool started' or enum to support more
> >>>> states in the future if we need.
> >>>
> >>> I think we already have set of defines for it:
> >>> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> >>> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> >>> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> >>>
> >>> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
> >>>
> >>> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> >>> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> >>> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> >>> Unless in future will want to change it in struct rte_eth_dev_data too
> >>> (or even hide it inside dev private queue data).
> >>
> >> I forgot about hairpin and bitmask... If so, I think it is
> >> sufficient to fix absolutely misleading comment, say
> >> that it is a bit mask and think about removal of
> >> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
> >> stopped+hairpin). May be consider to use uin16_t,
> >> since 8 bit is really small bitmask. It still fits in
> >> available hole.
> >
> > Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
> > and each of the states (stopped/started/hairpin) is mutually exclusive.
> > Is that not what was intended when hairpin queues were introduced?
> >
>
> Thanks, yes, you're right. My memory lies to me. If queue state
> is not a bit mask, it should be an enum from API point of view.
> Rx/Tx queue info structures are control path. I see no point to
> save bits here. Clear API is more important on control path.
> The only reason here to use uint8_t is to avoid ABI breakage.
> I can't judge if it is critical to wait or not.
As alternate thought - introduce new API function,
something like:
int rte_eth_get_rxq_state(portid, queue_id);
Then rte_eth_dev_is_rx_hairpin_queue() probably can be deprecated
in favour of this new one.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 16:53 0% ` Ananyev, Konstantin
@ 2021-03-22 17:07 3% ` Andrew Rybchenko
2021-03-22 18:53 0% ` Ananyev, Konstantin
0 siblings, 1 reply; 200+ results
From: Andrew Rybchenko @ 2021-03-22 17:07 UTC (permalink / raw)
To: Ananyev, Konstantin, Yigit, Ferruh, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
On 3/22/21 7:53 PM, Ananyev, Konstantin wrote:
>
>
>> -----Original Message-----
>> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>> Sent: Monday, March 22, 2021 4:02 PM
>> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
>> thomas@monjalon.net
>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>
>> On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
>>>
>>>
>>>> -----Original Message-----
>>>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
>>>> Sent: Monday, March 22, 2021 2:49 PM
>>>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
>>>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>>>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>>>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>>>
>>>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
>>>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>>>>>> Currently, upper-layer application could get queue state only
>>>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>>>> this is not the recommended way to access it. So this patch
>>>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>>>> rte_eth_tx_queue_info_get API.
>>>>>>
>>>>>> Note: The hairpin queue is not supported with above
>>>>>> rte_eth_*x_queue_info_get, so the queue state could be
>>>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>>>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>>>> it could be ABI compatible.
>>>>>>
>>>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>>>
>>>>> <...>
>>>>>
>>>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>>>>>> b/lib/librte_ethdev/rte_ethdev.h
>>>>>> index efda313..3b83c5a 100644
>>>>>> --- a/lib/librte_ethdev/rte_ethdev.h
>>>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
>>>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>>>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>>>>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>> + uint8_t queue_state;
>>>>>> } __rte_cache_min_aligned;
>>>>>> /**
>>>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>>>>>> struct rte_eth_txq_info {
>>>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
>>>>>> uint16_t nb_desc; /**< configured number of TXDs. */
>>>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>>>> + uint8_t queue_state;
>>>>>> } __rte_cache_min_aligned;
>>>>>> /* Generic Burst mode flag definition, values can be ORed. */
>>>>>>
>>>>>
>>>>> This is causing an ABI warning [1], but I guess it is safe since the
>>>>> size of the struct is not changing (cache align). Adding a few more
>>>>> people to comment.
>>>>>
>>>>>
>>>>> [1]
>>>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>>>>
>>>> Frankly speaking I dislike addition of queue_state as uint8_t.
>>>> IMHO it should be either 'bool started' or enum to support more
>>>> states in the future if we need.
>>>
>>> I think we already have set of defines for it:
>>> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
>>> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
>>> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>>>
>>> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
>>>
>>> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
>>> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
>>> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
>>> Unless in future will want to change it in struct rte_eth_dev_data too
>>> (or even hide it inside dev private queue data).
>>
>> I forgot about hairpin and bitmask... If so, I think it is
>> sufficient to fix absolutely misleading comment, say
>> that it is a bit mask and think about removal of
>> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
>> stopped+hairpin). May be consider to use uin16_t,
>> since 8 bit is really small bitmask. It still fits in
>> available hole.
>
> Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
> and each of the states (stopped/started/hairpin) is mutually exclusive.
> Is that not what was intended when hairpin queues were introduced?
>
Thanks, yes, you're right. My memory lies to me. If queue state
is not a bit mask, it should be an enum from API point of view.
Rx/Tx queue info structures are control path. I see no point to
save bits here. Clear API is more important on control path.
The only reason here to use uint8_t is to avoid ABI breakage.
I can't judge if it is critical to wait or not.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 16:02 0% ` Andrew Rybchenko
@ 2021-03-22 16:53 0% ` Ananyev, Konstantin
2021-03-22 17:07 3% ` Andrew Rybchenko
0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2021-03-22 16:53 UTC (permalink / raw)
To: Andrew Rybchenko, Yigit, Ferruh, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
> -----Original Message-----
> From: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Sent: Monday, March 22, 2021 4:02 PM
> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>;
> thomas@monjalon.net
> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>
> On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
> >
> >
> >> -----Original Message-----
> >> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
> >> Sent: Monday, March 22, 2021 2:49 PM
> >> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
> >> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> >> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> >> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
> >>
> >> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
> >>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
> >>>> Currently, upper-layer application could get queue state only
> >>>> through pointers such as dev->data->tx_queue_state[queue_id],
> >>>> this is not the recommended way to access it. So this patch
> >>>> add get queue state when call rte_eth_rx_queue_info_get and
> >>>> rte_eth_tx_queue_info_get API.
> >>>>
> >>>> Note: The hairpin queue is not supported with above
> >>>> rte_eth_*x_queue_info_get, so the queue state could be
> >>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >>>> it could be ABI compatible.
> >>>>
> >>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >>>
> >>> <...>
> >>>
> >>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
> >>>> b/lib/librte_ethdev/rte_ethdev.h
> >>>> index efda313..3b83c5a 100644
> >>>> --- a/lib/librte_ethdev/rte_ethdev.h
> >>>> +++ b/lib/librte_ethdev/rte_ethdev.h
> >>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> >>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >>>> uint16_t nb_desc; /**< configured number of RXDs. */
> >>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>> + uint8_t queue_state;
> >>>> } __rte_cache_min_aligned;
> >>>> /**
> >>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> >>>> struct rte_eth_txq_info {
> >>>> struct rte_eth_txconf conf; /**< queue config parameters. */
> >>>> uint16_t nb_desc; /**< configured number of TXDs. */
> >>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >>>> + uint8_t queue_state;
> >>>> } __rte_cache_min_aligned;
> >>>> /* Generic Burst mode flag definition, values can be ORed. */
> >>>>
> >>>
> >>> This is causing an ABI warning [1], but I guess it is safe since the
> >>> size of the struct is not changing (cache align). Adding a few more
> >>> people to comment.
> >>>
> >>>
> >>> [1]
> >>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
> >>
> >> Frankly speaking I dislike addition of queue_state as uint8_t.
> >> IMHO it should be either 'bool started' or enum to support more
> >> states in the future if we need.
> >
> > I think we already have set of defines for it:
> > lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> > lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> > lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
> >
> > If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
> >
> > About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> > but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> > So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> > Unless in future will want to change it in struct rte_eth_dev_data too
> > (or even hide it inside dev private queue data).
>
> I forgot about hairpin and bitmask... If so, I think it is
> sufficient to fix absolutely misleading comment, say
> that it is a bit mask and think about removal of
> RTE_ETH_QUEUE_STATE_STOPPED (since it could be
> stopped+hairpin). May be consider to use uin16_t,
> since 8 bit is really small bitmask. It still fits in
> available hole.
Hmm, as I can read the code - hairpin queue can't be started/stopped by SW,
and each of the states (stopped/started/hairpin) is mutually exclusive.
Is that not what was intended when hairpin queues were introduced?
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 15:45 0% ` Ananyev, Konstantin
@ 2021-03-22 16:02 0% ` Andrew Rybchenko
2021-03-22 16:53 0% ` Ananyev, Konstantin
2021-03-25 10:01 0% ` oulijun
1 sibling, 1 reply; 200+ results
From: Andrew Rybchenko @ 2021-03-22 16:02 UTC (permalink / raw)
To: Ananyev, Konstantin, Yigit, Ferruh, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
On 3/22/21 6:45 PM, Ananyev, Konstantin wrote:
>
>
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
>> Sent: Monday, March 22, 2021 2:49 PM
>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
>> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
>> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
>> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>>
>> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
>>> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>>>> Currently, upper-layer application could get queue state only
>>>> through pointers such as dev->data->tx_queue_state[queue_id],
>>>> this is not the recommended way to access it. So this patch
>>>> add get queue state when call rte_eth_rx_queue_info_get and
>>>> rte_eth_tx_queue_info_get API.
>>>>
>>>> Note: The hairpin queue is not supported with above
>>>> rte_eth_*x_queue_info_get, so the queue state could be
>>>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>>>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>>>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>>>> it could be ABI compatible.
>>>>
>>>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>>>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>>>
>>> <...>
>>>
>>>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>>>> b/lib/librte_ethdev/rte_ethdev.h
>>>> index efda313..3b83c5a 100644
>>>> --- a/lib/librte_ethdev/rte_ethdev.h
>>>> +++ b/lib/librte_ethdev/rte_ethdev.h
>>>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>>>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>>>> uint16_t nb_desc; /**< configured number of RXDs. */
>>>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>> + uint8_t queue_state;
>>>> } __rte_cache_min_aligned;
>>>> /**
>>>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>>>> struct rte_eth_txq_info {
>>>> struct rte_eth_txconf conf; /**< queue config parameters. */
>>>> uint16_t nb_desc; /**< configured number of TXDs. */
>>>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>>>> + uint8_t queue_state;
>>>> } __rte_cache_min_aligned;
>>>> /* Generic Burst mode flag definition, values can be ORed. */
>>>>
>>>
>>> This is causing an ABI warning [1], but I guess it is safe since the
>>> size of the struct is not changing (cache align). Adding a few more
>>> people to comment.
>>>
>>>
>>> [1]
>>> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>>
>> Frankly speaking I dislike addition of queue_state as uint8_t.
>> IMHO it should be either 'bool started' or enum to support more
>> states in the future if we need.
>
> I think we already have set of defines for it:
> lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
> lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
> lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
>
> If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
>
> About uint8_t vs enum - yes, in principle enum would be a bit nicer,
> but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
> So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
> Unless in future will want to change it in struct rte_eth_dev_data too
> (or even hide it inside dev private queue data).
I forgot about hairpin and bitmask... If so, I think it is
sufficient to fix absolutely misleading comment, say
that it is a bit mask and think about removal of
RTE_ETH_QUEUE_STATE_STOPPED (since it could be
stopped+hairpin). May be consider to use uin16_t,
since 8 bit is really small bitmask. It still fits in
available hole.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 14:49 0% ` Andrew Rybchenko
@ 2021-03-22 15:45 0% ` Ananyev, Konstantin
2021-03-22 16:02 0% ` Andrew Rybchenko
2021-03-25 10:01 0% ` oulijun
0 siblings, 2 replies; 200+ results
From: Ananyev, Konstantin @ 2021-03-22 15:45 UTC (permalink / raw)
To: Andrew Rybchenko, Yigit, Ferruh, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Andrew Rybchenko
> Sent: Monday, March 22, 2021 2:49 PM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Lijun Ou <oulijun@huawei.com>; thomas@monjalon.net
> Cc: dev@dpdk.org; linuxarm@openeuler.org; Andrew Rybchenko <arybchenko@solarflare.com>; David Marchand
> <david.marchand@redhat.com>; Ray Kinsella <mdr@ashroe.eu>; Luca Boccassi <bluca@debian.org>
> Subject: Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
>
> On 3/22/21 12:22 PM, Ferruh Yigit wrote:
> > On 3/18/2021 12:25 PM, Lijun Ou wrote:
> >> Currently, upper-layer application could get queue state only
> >> through pointers such as dev->data->tx_queue_state[queue_id],
> >> this is not the recommended way to access it. So this patch
> >> add get queue state when call rte_eth_rx_queue_info_get and
> >> rte_eth_tx_queue_info_get API.
> >>
> >> Note: The hairpin queue is not supported with above
> >> rte_eth_*x_queue_info_get, so the queue state could be
> >> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> >> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> >> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> >> it could be ABI compatible.
> >>
> >> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> >> Signed-off-by: Lijun Ou <oulijun@huawei.com>
> >
> > <...>
> >
> >> diff --git a/lib/librte_ethdev/rte_ethdev.h
> >> b/lib/librte_ethdev/rte_ethdev.h
> >> index efda313..3b83c5a 100644
> >> --- a/lib/librte_ethdev/rte_ethdev.h
> >> +++ b/lib/librte_ethdev/rte_ethdev.h
> >> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> >> uint8_t scattered_rx; /**< scattered packets RX supported. */
> >> uint16_t nb_desc; /**< configured number of RXDs. */
> >> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> >> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >> + uint8_t queue_state;
> >> } __rte_cache_min_aligned;
> >> /**
> >> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> >> struct rte_eth_txq_info {
> >> struct rte_eth_txconf conf; /**< queue config parameters. */
> >> uint16_t nb_desc; /**< configured number of TXDs. */
> >> + /**< Queues state: STARTED(1) / STOPPED(0). */
> >> + uint8_t queue_state;
> >> } __rte_cache_min_aligned;
> >> /* Generic Burst mode flag definition, values can be ORed. */
> >>
> >
> > This is causing an ABI warning [1], but I guess it is safe since the
> > size of the struct is not changing (cache align). Adding a few more
> > people to comment.
> >
> >
> > [1]
> > https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
>
> Frankly speaking I dislike addition of queue_state as uint8_t.
> IMHO it should be either 'bool started' or enum to support more
> states in the future if we need.
I think we already have set of defines for it:
lib/librte_ethdev/rte_ethdev_driver.h:925:#define RTE_ETH_QUEUE_STATE_STOPPED 0
lib/librte_ethdev/rte_ethdev_driver.h:926:#define RTE_ETH_QUEUE_STATE_STARTED 1
lib/librte_ethdev/rte_ethdev_driver.h:927:#define RTE_ETH_QUEUE_STATE_HAIRPIN 2
If we want to publish it, then might be enough just move these macros to rte_ethdev.h or so.
About uint8_t vs enum - yes, in principle enum would be a bit nicer,
but right now rte_eth_dev_data.(rx|tx)_queue_state[] itself is an array of uint8_t.
So probably not much point to waste extra 3B in rte_eth_(rxq|txq)_info.
Unless in future will want to change it in struct rte_eth_dev_data too
(or even hide it inside dev private queue data).
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 9:22 3% ` Ferruh Yigit
2021-03-22 9:38 0% ` Kinsella, Ray
2021-03-22 9:39 0% ` oulijun
@ 2021-03-22 14:49 0% ` Andrew Rybchenko
2021-03-22 15:45 0% ` Ananyev, Konstantin
2 siblings, 1 reply; 200+ results
From: Andrew Rybchenko @ 2021-03-22 14:49 UTC (permalink / raw)
To: Ferruh Yigit, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
On 3/22/21 12:22 PM, Ferruh Yigit wrote:
> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>> Currently, upper-layer application could get queue state only
>> through pointers such as dev->data->tx_queue_state[queue_id],
>> this is not the recommended way to access it. So this patch
>> add get queue state when call rte_eth_rx_queue_info_get and
>> rte_eth_tx_queue_info_get API.
>>
>> Note: The hairpin queue is not supported with above
>> rte_eth_*x_queue_info_get, so the queue state could be
>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>> it could be ABI compatible.
>>
>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>
> <...>
>
>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>> b/lib/librte_ethdev/rte_ethdev.h
>> index efda313..3b83c5a 100644
>> --- a/lib/librte_ethdev/rte_ethdev.h
>> +++ b/lib/librte_ethdev/rte_ethdev.h
>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>> uint16_t nb_desc; /**< configured number of RXDs. */
>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /**
>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>> struct rte_eth_txq_info {
>> struct rte_eth_txconf conf; /**< queue config parameters. */
>> uint16_t nb_desc; /**< configured number of TXDs. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /* Generic Burst mode flag definition, values can be ORed. */
>>
>
> This is causing an ABI warning [1], but I guess it is safe since the
> size of the struct is not changing (cache align). Adding a few more
> people to comment.
>
>
> [1]
> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
Frankly speaking I dislike addition of queue_state as uint8_t.
IMHO it should be either 'bool started' or enum to support more
states in the future if we need.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 9:22 3% ` Ferruh Yigit
2021-03-22 9:38 0% ` Kinsella, Ray
@ 2021-03-22 9:39 0% ` oulijun
2021-03-22 14:49 0% ` Andrew Rybchenko
2 siblings, 0 replies; 200+ results
From: oulijun @ 2021-03-22 9:39 UTC (permalink / raw)
To: Ferruh Yigit, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
在 2021/3/22 17:22, Ferruh Yigit 写道:
> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>> Currently, upper-layer application could get queue state only
>> through pointers such as dev->data->tx_queue_state[queue_id],
>> this is not the recommended way to access it. So this patch
>> add get queue state when call rte_eth_rx_queue_info_get and
>> rte_eth_tx_queue_info_get API.
>>
>> Note: The hairpin queue is not supported with above
>> rte_eth_*x_queue_info_get, so the queue state could be
>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>> it could be ABI compatible.
>>
>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>
> <...>
>
>> diff --git a/lib/librte_ethdev/rte_ethdev.h
>> b/lib/librte_ethdev/rte_ethdev.h
>> index efda313..3b83c5a 100644
>> --- a/lib/librte_ethdev/rte_ethdev.h
>> +++ b/lib/librte_ethdev/rte_ethdev.h
>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>> uint16_t nb_desc; /**< configured number of RXDs. */
>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /**
>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>> struct rte_eth_txq_info {
>> struct rte_eth_txconf conf; /**< queue config parameters. */
>> uint16_t nb_desc; /**< configured number of TXDs. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /* Generic Burst mode flag definition, values can be ORed. */
>>
>
> This is causing an ABI warning [1], but I guess it is safe since the
> size of the struct is not changing (cache align). Adding a few more
> people to comment.
>
Yes, thanks.Because we've analyzed it internally.What about other
people's opinions?
>
> [1]
> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
> .
>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-22 9:22 3% ` Ferruh Yigit
@ 2021-03-22 9:38 0% ` Kinsella, Ray
2021-03-22 9:39 0% ` oulijun
2021-03-22 14:49 0% ` Andrew Rybchenko
2 siblings, 0 replies; 200+ results
From: Kinsella, Ray @ 2021-03-22 9:38 UTC (permalink / raw)
To: Ferruh Yigit, Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Luca Boccassi
On 22/03/2021 09:22, Ferruh Yigit wrote:
> On 3/18/2021 12:25 PM, Lijun Ou wrote:
>> Currently, upper-layer application could get queue state only
>> through pointers such as dev->data->tx_queue_state[queue_id],
>> this is not the recommended way to access it. So this patch
>> add get queue state when call rte_eth_rx_queue_info_get and
>> rte_eth_tx_queue_info_get API.
>>
>> Note: The hairpin queue is not supported with above
>> rte_eth_*x_queue_info_get, so the queue state could be
>> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
>> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
>> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
>> it could be ABI compatible.
>>
>> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
>> Signed-off-by: Lijun Ou <oulijun@huawei.com>
>
> <...>
>
>> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
>> index efda313..3b83c5a 100644
>> --- a/lib/librte_ethdev/rte_ethdev.h
>> +++ b/lib/librte_ethdev/rte_ethdev.h
>> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
>> uint8_t scattered_rx; /**< scattered packets RX supported. */
>> uint16_t nb_desc; /**< configured number of RXDs. */
>> uint16_t rx_buf_size; /**< hardware receive buffer size. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /**
>> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
>> struct rte_eth_txq_info {
>> struct rte_eth_txconf conf; /**< queue config parameters. */
>> uint16_t nb_desc; /**< configured number of TXDs. */
>> + /**< Queues state: STARTED(1) / STOPPED(0). */
>> + uint8_t queue_state;
>> } __rte_cache_min_aligned;
>> /* Generic Burst mode flag definition, values can be ORed. */
>>
>
> This is causing an ABI warning [1], but I guess it is safe since the size of the struct is not changing (cache align). Adding a few more people to comment.
Agreed, needs an amendment to libabigail.ignore to condone.
>
> [1]
> https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
2021-03-18 12:25 13% [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information Lijun Ou
@ 2021-03-22 9:22 3% ` Ferruh Yigit
2021-03-22 9:38 0% ` Kinsella, Ray
` (2 more replies)
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
1 sibling, 3 replies; 200+ results
From: Ferruh Yigit @ 2021-03-22 9:22 UTC (permalink / raw)
To: Lijun Ou, thomas
Cc: dev, linuxarm, Andrew Rybchenko, David Marchand, Ray Kinsella,
Luca Boccassi
On 3/18/2021 12:25 PM, Lijun Ou wrote:
> Currently, upper-layer application could get queue state only
> through pointers such as dev->data->tx_queue_state[queue_id],
> this is not the recommended way to access it. So this patch
> add get queue state when call rte_eth_rx_queue_info_get and
> rte_eth_tx_queue_info_get API.
>
> Note: The hairpin queue is not supported with above
> rte_eth_*x_queue_info_get, so the queue state could be
> RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
> Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
> remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
> it could be ABI compatible.
>
> Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
> Signed-off-by: Lijun Ou <oulijun@huawei.com>
<...>
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index efda313..3b83c5a 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
> uint8_t scattered_rx; /**< scattered packets RX supported. */
> uint16_t nb_desc; /**< configured number of RXDs. */
> uint16_t rx_buf_size; /**< hardware receive buffer size. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
> + uint8_t queue_state;
> } __rte_cache_min_aligned;
>
> /**
> @@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
> struct rte_eth_txq_info {
> struct rte_eth_txconf conf; /**< queue config parameters. */
> uint16_t nb_desc; /**< configured number of TXDs. */
> + /**< Queues state: STARTED(1) / STOPPED(0). */
> + uint8_t queue_state;
> } __rte_cache_min_aligned;
>
> /* Generic Burst mode flag definition, values can be ORed. */
>
This is causing an ABI warning [1], but I guess it is safe since the size of the
struct is not changing (cache align). Adding a few more people to comment.
[1]
https://travis-ci.com/github/ovsrobot/dpdk/builds/220497651
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [EXT] Re: [PATCH v4 1/8] eventdev: introduce event vector capability
2021-03-22 9:06 3% ` Kinsella, Ray
@ 2021-03-22 9:10 0% ` Pavan Nikhilesh Bhagavatula
0 siblings, 0 replies; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2021-03-22 9:10 UTC (permalink / raw)
To: Kinsella, Ray, Jerin Jacob Kollanukkaran, jay.jayatheerthan,
erik.g.carrillo, abhinandan.gujjar, timothy.mcdaniel,
hemant.agrawal, harry.van.haaren, mattias.ronnblom, liang.j.ma,
Neil Horman
Cc: dev
>On 19/03/2021 20:57, pbhagavatula@marvell.com wrote:
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Introduce rte_event_vector datastructure which is capable of holding
>> multiple uintptr_t of the same flow thereby allowing applications
>> to vectorize their pipeline and reducing the complexity of pipelining
>> the events across multiple stages.
>> This approach also reduces the scheduling overhead on a event
>device.
>>
>> Add a event vector mempool create handler to create mempools
>based on
>> the best mempool ops available on a given platform.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>> doc/guides/prog_guide/eventdev.rst | 36 +++++++++-
>> lib/librte_eventdev/rte_eventdev.h | 112
>++++++++++++++++++++++++++++-
>> lib/librte_eventdev/version.map | 3 +
>> 3 files changed, 148 insertions(+), 3 deletions(-)
>>
>
>[SNIP]
>
>>
>> diff --git a/lib/librte_eventdev/rte_eventdev.h
>b/lib/librte_eventdev/rte_eventdev.h
>> index ce1fc2ce0..5586a3f15 100644
>> --- a/lib/librte_eventdev/rte_eventdev.h
>> +++ b/lib/librte_eventdev/rte_eventdev.h
>> @@ -212,8 +212,10 @@ extern "C" {
>>
>> #include <rte_common.h>
>> #include <rte_config.h>
>> -#include <rte_memory.h>
>> #include <rte_errno.h>
>> +#include <rte_mbuf_pool_ops.h>
>> +#include <rte_memory.h>
>> +#include <rte_mempool.h>
>>
>> #include "rte_eventdev_trace_fp.h"
>>
>> @@ -913,6 +915,25 @@
>rte_event_dev_stop_flush_callback_register(uint8_t dev_id,
>> int
>> rte_event_dev_close(uint8_t dev_id);
>>
>> +/**
>> + * Event vector structure.
>> + */
>> +struct rte_event_vector {
>> + uint64_t nb_elem : 16;
>> + /**< Number of elements in this event vector. */
>> + uint64_t rsvd : 48;
>> + uint64_t impl_opaque;
>> + union {
>> + struct rte_mbuf *mbufs[0];
>> + void *ptrs[0];
>> + uint64_t *u64s[0];
>> + } __rte_aligned(16);
>> + /**< Start of the vector array union. Depending upon the event
>type the
>> + * vector array can be an array of mbufs or pointers or opaque
>u64
>> + * values.
>> + */
>> +};
>> +
>> /* Scheduler type definitions */
>> #define RTE_SCHED_TYPE_ORDERED 0
>> /**< Ordered scheduling
>> @@ -986,6 +1007,21 @@ rte_event_dev_close(uint8_t dev_id);
>> */
>> #define RTE_EVENT_TYPE_ETH_RX_ADAPTER 0x4
>> /**< The event generated from event eth Rx adapter */
>> +#define RTE_EVENT_TYPE_VECTOR 0x8
>> +/**< Indicates that event is a vector.
>> + * All vector event types should be an logical OR of
>EVENT_TYPE_VECTOR.
>> + * This simplifies the pipeline design as we can split processing the
>events
>> + * between vector events and normal event across event types.
>> + * Example:
>> + * if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
>> + * // Classify and handle vector event.
>> + * } else {
>> + * // Classify and handle event.
>> + * }
>> + */
>> +#define RTE_EVENT_TYPE_CPU_VECTOR
>(RTE_EVENT_TYPE_VECTOR | RTE_EVENT_TYPE_CPU)
>> +/**< The event vector generated from cpu for pipelining. */
>> +
>> #define RTE_EVENT_TYPE_MAX 0x10
>> /**< Maximum number of event types */
>>
>> @@ -1108,6 +1144,8 @@ struct rte_event {
>> /**< Opaque event pointer */
>> struct rte_mbuf *mbuf;
>> /**< mbuf pointer if dequeued event is associated with
>mbuf */
>> + struct rte_event_vector *vec;
>> + /**< Event vector pointer. */
>> };
>> };
>>
>> @@ -2023,6 +2061,78 @@ rte_event_dev_xstats_reset(uint8_t
>dev_id,
>> */
>> int rte_event_dev_selftest(uint8_t dev_id);
>>
>> +/**
>> + * Get the memory required per event vector based on the number of
>elements per
>> + * vector.
>> + * This should be used to create the mempool that holds the event
>vectors.
>> + *
>> + * @param name
>> + * The name of the vector pool.
>> + * @param n
>> + * The number of elements in the mbuf pool.
>> + * @param cache_size
>> + * Size of the per-core object cache. See rte_mempool_create() for
>> + * details.
>> + * @param nb_elem
>> + * The number of elements then a single event vector should be
>able to hold.
>> + * @param socket_id
>> + * The socket identifier where the memory should be allocated. The
>> + * value can be *SOCKET_ID_ANY* if there is no NUMA constraint
>for the
>> + * reserved zone
>> + *
>> + * @return
>> + * The pointer to the newly allocated mempool, on success. NULL
>on error
>> + * with rte_errno set appropriately. Possible rte_errno values
>include:
>> + * - E_RTE_NO_CONFIG - function could not get pointer to
>rte_config structure
>> + * - E_RTE_SECONDARY - function was called from a secondary
>process instance
>> + * - EINVAL - cache size provided is too large, or priv_size is not
>aligned.
>> + * - ENOSPC - the maximum number of memzones has already been
>allocated
>> + * - EEXIST - a memzone with the same name already exists
>> + * - ENOMEM - no appropriate memory area found in which to
>create memzone
>> + */
>> +__rte_experimental
>> +static inline struct rte_mempool *
>> +rte_event_vector_pool_create(const char *name, unsigned int n,
>> + unsigned int cache_size, uint16_t nb_elem,
>> + int socket_id)
>
>Handling in-lined function is tricky at best from an ABI stability PoV.
>
>Since this function is used at initialization time and I would suggest since
>performance is not issue here.
>There is no need for this function to be an inline.
Makes sense, I will move it to .c in the next version.
Thanks,
Pavan.
>
>> +{
>> + const char *mp_ops_name;
>> + struct rte_mempool *mp;
>> + unsigned int elt_sz;
>> + int ret;
>> +
>> + if (!nb_elem) {
>> + RTE_LOG(ERR, EVENTDEV,
>> + "Invalid number of elements=%d requested\n",
>nb_elem);
>> + rte_errno = -EINVAL;
>> + return NULL;
>> + }
>> +
>> + elt_sz =
>> + sizeof(struct rte_event_vector) + (nb_elem *
>sizeof(uintptr_t));
>> + mp = rte_mempool_create_empty(name, n, elt_sz, cache_size,
>0, socket_id,
>> + 0);
>> + if (mp == NULL)
>> + return NULL;
>> +
>> + mp_ops_name = rte_mbuf_best_mempool_ops();
>> + ret = rte_mempool_set_ops_byname(mp, mp_ops_name,
>NULL);
>> + if (ret != 0) {
>> + RTE_LOG(ERR, EVENTDEV, "error setting mempool
>handler\n");
>> + goto err;
>> + }
>> +
>> + ret = rte_mempool_populate_default(mp);
>> + if (ret < 0)
>> + goto err;
>> +
>> + return mp;
>> +err:
>> + rte_mempool_free(mp);
>> + rte_errno = -ret;
>> + return NULL;
>> +}
>> +
>> #ifdef __cplusplus
>> }
>> #endif
>> diff --git a/lib/librte_eventdev/version.map
>b/lib/librte_eventdev/version.map
>> index 3e5c09cfd..a070ef56e 100644
>> --- a/lib/librte_eventdev/version.map
>> +++ b/lib/librte_eventdev/version.map
>> @@ -138,6 +138,9 @@ EXPERIMENTAL {
>> __rte_eventdev_trace_port_setup;
>> # added in 20.11
>> rte_event_pmd_pci_probe_named;
>> +
>> + #added in 21.05
>> + rte_event_vector_pool_create;
>> };
>>
>> INTERNAL {
>>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH v4 1/8] eventdev: introduce event vector capability
@ 2021-03-22 9:06 3% ` Kinsella, Ray
2021-03-22 9:10 0% ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
0 siblings, 1 reply; 200+ results
From: Kinsella, Ray @ 2021-03-22 9:06 UTC (permalink / raw)
To: pbhagavatula, jerinj, jay.jayatheerthan, erik.g.carrillo,
abhinandan.gujjar, timothy.mcdaniel, hemant.agrawal,
harry.van.haaren, mattias.ronnblom, liang.j.ma, Neil Horman
Cc: dev
On 19/03/2021 20:57, pbhagavatula@marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Introduce rte_event_vector datastructure which is capable of holding
> multiple uintptr_t of the same flow thereby allowing applications
> to vectorize their pipeline and reducing the complexity of pipelining
> the events across multiple stages.
> This approach also reduces the scheduling overhead on a event device.
>
> Add a event vector mempool create handler to create mempools based on
> the best mempool ops available on a given platform.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
> doc/guides/prog_guide/eventdev.rst | 36 +++++++++-
> lib/librte_eventdev/rte_eventdev.h | 112 ++++++++++++++++++++++++++++-
> lib/librte_eventdev/version.map | 3 +
> 3 files changed, 148 insertions(+), 3 deletions(-)
>
[SNIP]
>
> diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h
> index ce1fc2ce0..5586a3f15 100644
> --- a/lib/librte_eventdev/rte_eventdev.h
> +++ b/lib/librte_eventdev/rte_eventdev.h
> @@ -212,8 +212,10 @@ extern "C" {
>
> #include <rte_common.h>
> #include <rte_config.h>
> -#include <rte_memory.h>
> #include <rte_errno.h>
> +#include <rte_mbuf_pool_ops.h>
> +#include <rte_memory.h>
> +#include <rte_mempool.h>
>
> #include "rte_eventdev_trace_fp.h"
>
> @@ -913,6 +915,25 @@ rte_event_dev_stop_flush_callback_register(uint8_t dev_id,
> int
> rte_event_dev_close(uint8_t dev_id);
>
> +/**
> + * Event vector structure.
> + */
> +struct rte_event_vector {
> + uint64_t nb_elem : 16;
> + /**< Number of elements in this event vector. */
> + uint64_t rsvd : 48;
> + uint64_t impl_opaque;
> + union {
> + struct rte_mbuf *mbufs[0];
> + void *ptrs[0];
> + uint64_t *u64s[0];
> + } __rte_aligned(16);
> + /**< Start of the vector array union. Depending upon the event type the
> + * vector array can be an array of mbufs or pointers or opaque u64
> + * values.
> + */
> +};
> +
> /* Scheduler type definitions */
> #define RTE_SCHED_TYPE_ORDERED 0
> /**< Ordered scheduling
> @@ -986,6 +1007,21 @@ rte_event_dev_close(uint8_t dev_id);
> */
> #define RTE_EVENT_TYPE_ETH_RX_ADAPTER 0x4
> /**< The event generated from event eth Rx adapter */
> +#define RTE_EVENT_TYPE_VECTOR 0x8
> +/**< Indicates that event is a vector.
> + * All vector event types should be an logical OR of EVENT_TYPE_VECTOR.
> + * This simplifies the pipeline design as we can split processing the events
> + * between vector events and normal event across event types.
> + * Example:
> + * if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
> + * // Classify and handle vector event.
> + * } else {
> + * // Classify and handle event.
> + * }
> + */
> +#define RTE_EVENT_TYPE_CPU_VECTOR (RTE_EVENT_TYPE_VECTOR | RTE_EVENT_TYPE_CPU)
> +/**< The event vector generated from cpu for pipelining. */
> +
> #define RTE_EVENT_TYPE_MAX 0x10
> /**< Maximum number of event types */
>
> @@ -1108,6 +1144,8 @@ struct rte_event {
> /**< Opaque event pointer */
> struct rte_mbuf *mbuf;
> /**< mbuf pointer if dequeued event is associated with mbuf */
> + struct rte_event_vector *vec;
> + /**< Event vector pointer. */
> };
> };
>
> @@ -2023,6 +2061,78 @@ rte_event_dev_xstats_reset(uint8_t dev_id,
> */
> int rte_event_dev_selftest(uint8_t dev_id);
>
> +/**
> + * Get the memory required per event vector based on the number of elements per
> + * vector.
> + * This should be used to create the mempool that holds the event vectors.
> + *
> + * @param name
> + * The name of the vector pool.
> + * @param n
> + * The number of elements in the mbuf pool.
> + * @param cache_size
> + * Size of the per-core object cache. See rte_mempool_create() for
> + * details.
> + * @param nb_elem
> + * The number of elements then a single event vector should be able to hold.
> + * @param socket_id
> + * The socket identifier where the memory should be allocated. The
> + * value can be *SOCKET_ID_ANY* if there is no NUMA constraint for the
> + * reserved zone
> + *
> + * @return
> + * The pointer to the newly allocated mempool, on success. NULL on error
> + * with rte_errno set appropriately. Possible rte_errno values include:
> + * - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
> + * - E_RTE_SECONDARY - function was called from a secondary process instance
> + * - EINVAL - cache size provided is too large, or priv_size is not aligned.
> + * - ENOSPC - the maximum number of memzones has already been allocated
> + * - EEXIST - a memzone with the same name already exists
> + * - ENOMEM - no appropriate memory area found in which to create memzone
> + */
> +__rte_experimental
> +static inline struct rte_mempool *
> +rte_event_vector_pool_create(const char *name, unsigned int n,
> + unsigned int cache_size, uint16_t nb_elem,
> + int socket_id)
Handling in-lined function is tricky at best from an ABI stability PoV.
Since this function is used at initialization time and I would suggest since performance is not issue here.
There is no need for this function to be an inline.
> +{
> + const char *mp_ops_name;
> + struct rte_mempool *mp;
> + unsigned int elt_sz;
> + int ret;
> +
> + if (!nb_elem) {
> + RTE_LOG(ERR, EVENTDEV,
> + "Invalid number of elements=%d requested\n", nb_elem);
> + rte_errno = -EINVAL;
> + return NULL;
> + }
> +
> + elt_sz =
> + sizeof(struct rte_event_vector) + (nb_elem * sizeof(uintptr_t));
> + mp = rte_mempool_create_empty(name, n, elt_sz, cache_size, 0, socket_id,
> + 0);
> + if (mp == NULL)
> + return NULL;
> +
> + mp_ops_name = rte_mbuf_best_mempool_ops();
> + ret = rte_mempool_set_ops_byname(mp, mp_ops_name, NULL);
> + if (ret != 0) {
> + RTE_LOG(ERR, EVENTDEV, "error setting mempool handler\n");
> + goto err;
> + }
> +
> + ret = rte_mempool_populate_default(mp);
> + if (ret < 0)
> + goto err;
> +
> + return mp;
> +err:
> + rte_mempool_free(mp);
> + rte_errno = -ret;
> + return NULL;
> +}
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/lib/librte_eventdev/version.map b/lib/librte_eventdev/version.map
> index 3e5c09cfd..a070ef56e 100644
> --- a/lib/librte_eventdev/version.map
> +++ b/lib/librte_eventdev/version.map
> @@ -138,6 +138,9 @@ EXPERIMENTAL {
> __rte_eventdev_trace_port_setup;
> # added in 20.11
> rte_event_pmd_pci_probe_named;
> +
> + #added in 21.05
> + rte_event_vector_pool_create;
> };
>
> INTERNAL {
>
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH v3 1/2] ethdev: replace callback getting filter operations
@ 2021-03-21 9:00 1% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-21 9:00 UTC (permalink / raw)
To: dev
Cc: Ajit Khaparde, Haiyue Wang, Rosen Xu, Hemant Agrawal, Ori Kam,
Somnath Kotur, Chas Williams, Min Hu (Connor),
Rahul Lakkireddy, Sachin Saxena, Jeff Guo, John Daley,
Hyong Youb Kim, Gaetan Rivet, Ziyang Xuan, Xiaoyun Wang,
Guoyang Zhou, Yisen Zhuang, Lijun Ou, Beilei Xing, Jingjing Wu,
Qiming Yang, Qi Zhang, Matan Azrad, Shahaf Shuler,
Viacheslav Ovsiienko, Liron Himi, Jerin Jacob, Nithin Dabilpuram,
Kiran Kumar K, Rasesh Mody, Shahed Shaikh, Andrew Rybchenko,
Jasvinder Singh, Cristian Dumitrescu, Keith Wiles, Jiawen Wu,
Jian Wang, Ferruh Yigit
Since rte_flow is the only API for filtering operations,
the legacy driver interface filter_ctrl was too much complicated
for the simple task of getting the struct rte_flow_ops.
The filter type RTE_ETH_FILTER_GENERIC and
the filter operarion RTE_ETH_FILTER_GET are removed.
The new driver callback flow_ops_get replaces filter_ctrl.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Acked-by: Haiyue Wang <haiyue.wang@intel.com>
Acked-by: Rosen Xu <rosen.xu@intel.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
doc/guides/nics/features.rst | 4 +--
doc/guides/prog_guide/rte_flow.rst | 14 +-------
drivers/net/bnxt/bnxt.h | 6 ++--
drivers/net/bnxt/bnxt_ethdev.c | 40 +++++++--------------
drivers/net/bnxt/bnxt_reps.c | 2 +-
drivers/net/bonding/rte_eth_bond_pmd.c | 13 +++----
drivers/net/cxgbe/cxgbe_ethdev.c | 2 +-
drivers/net/cxgbe/cxgbe_flow.c | 22 +++---------
drivers/net/cxgbe/cxgbe_flow.h | 7 ++--
drivers/net/dpaa2/dpaa2_ethdev.c | 44 +++--------------------
drivers/net/dpaa2/dpaa2_flow.c | 29 +++++----------
drivers/net/e1000/igb_ethdev.c | 31 ++++------------
drivers/net/enic/enic_ethdev.c | 30 +++++-----------
drivers/net/enic/enic_vf_representor.c | 33 ++++++-----------
drivers/net/failsafe/failsafe_ops.c | 16 +++------
drivers/net/hinic/hinic_pmd_ethdev.c | 36 ++++---------------
drivers/net/hns3/hns3_ethdev.c | 2 +-
drivers/net/hns3/hns3_ethdev.h | 5 ++-
drivers/net/hns3/hns3_ethdev_vf.c | 2 +-
drivers/net/hns3/hns3_flow.c | 30 ++++------------
drivers/net/i40e/i40e_ethdev.c | 32 ++++-------------
drivers/net/iavf/iavf_ethdev.c | 32 ++++-------------
drivers/net/ice/ice_dcf_ethdev.c | 27 +++-----------
drivers/net/ice/ice_ethdev.c | 32 ++++-------------
drivers/net/igc/igc_ethdev.c | 2 +-
drivers/net/igc/igc_filter.c | 23 +++---------
drivers/net/igc/igc_filter.h | 5 ++-
drivers/net/ipn3ke/ipn3ke_representor.c | 28 ++++-----------
drivers/net/ixgbe/ixgbe_ethdev.c | 32 ++++-------------
drivers/net/mlx4/mlx4.c | 2 +-
drivers/net/mlx4/mlx4_flow.c | 32 ++++-------------
drivers/net/mlx4/mlx4_flow.h | 5 +--
drivers/net/mlx5/mlx5.c | 4 +--
drivers/net/mlx5/mlx5.h | 5 +--
drivers/net/mlx5/mlx5_flow.c | 32 ++++-------------
drivers/net/mvpp2/mrvl_ethdev.c | 26 ++++----------
drivers/net/octeontx2/otx2_ethdev.c | 2 +-
drivers/net/octeontx2/otx2_ethdev.h | 5 ++-
drivers/net/octeontx2/otx2_ethdev_ops.c | 21 +++--------
drivers/net/qede/qede_ethdev.c | 2 +-
drivers/net/qede/qede_ethdev.h | 7 ++--
drivers/net/qede/qede_filter.c | 27 ++++----------
drivers/net/sfc/sfc_ethdev.c | 31 +++-------------
drivers/net/softnic/rte_eth_softnic.c | 17 +++------
drivers/net/tap/rte_eth_tap.c | 2 +-
drivers/net/tap/tap_flow.c | 27 ++++----------
drivers/net/tap/tap_flow.h | 6 ++--
drivers/net/txgbe/txgbe_ethdev.c | 26 +++-----------
lib/librte_ethdev/ethdev_driver.h | 48 +++++++++++--------------
lib/librte_ethdev/rte_eth_ctrl.h | 2 +-
lib/librte_ethdev/rte_flow.c | 23 ++++++------
lib/librte_ethdev/rte_flow_driver.h | 25 -------------
52 files changed, 238 insertions(+), 720 deletions(-)
diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index dbca9a85b9..f6d30d0af3 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -402,9 +402,9 @@ Supports configuring link flow control.
Flow API
--------
-Supports the DPDK Flow API for generic filtering.
+Supports flow API family.
-* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
+* **[implements] eth_dev_ops**: ``flow_ops_get``.
* **[implements] rte_flow_ops**: ``All``.
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 62a57919eb..aec2ba1ec0 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -22,11 +22,6 @@ defined in ``rte_flow.h``.
queues, to virtual/physical device functions or ports, performing tunnel
offloads, adding marks and so on.
-It is slightly higher-level than the legacy filtering framework which it
-encompasses and supersedes (including all functions and filter types) in
-order to expose a single interface with an unambiguous behavior that is
-common to all poll-mode drivers (PMDs).
-
Flow rule
---------
@@ -3104,7 +3099,6 @@ port and may return errors such as ``ENOTSUP`` ("not supported"):
- Configuring MAC addresses.
- Configuring multicast addresses.
- Configuring VLAN filters.
-- Configuring Rx filters through the legacy API (e.g. FDIR).
- Configuring global RSS settings.
.. code-block:: c
@@ -3331,13 +3325,7 @@ The PMD interface is defined in ``rte_flow_driver.h``. It is not subject to
API/ABI versioning constraints as it is not exposed to applications and may
evolve independently.
-It is currently implemented on top of the legacy filtering framework through
-filter type *RTE_ETH_FILTER_GENERIC* that accepts the single operation
-*RTE_ETH_FILTER_GET* to return PMD-specific *rte_flow* callbacks wrapped
-inside ``struct rte_flow_ops``.
-
-This overhead is temporarily necessary in order to keep compatibility with
-the legacy filtering framework, which should eventually disappear.
+The PMD interface is based on callbacks pointed by the ``struct rte_flow_ops``.
- PMD callbacks implement exactly the interface described in `Rules
management`_, except for the port ID argument which has already been
diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index b4370e5acd..a6c02d88aa 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -981,9 +981,7 @@ void bnxt_flow_cnt_alarm_cb(void *arg);
int bnxt_flow_stats_req(struct bnxt *bp);
int bnxt_flow_stats_cnt(struct bnxt *bp);
uint32_t bnxt_get_speed_capabilities(struct bnxt *bp);
+int bnxt_flow_ops_get_op(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
-int
-bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg);
#endif
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 9824cdb6d8..87d298804f 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -3086,9 +3086,8 @@ bnxt_tx_descriptor_status_op(void *tx_queue, uint16_t offset)
}
int
-bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg)
+bnxt_flow_ops_get_op(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
struct bnxt *bp = dev->data->dev_private;
int ret = 0;
@@ -3101,10 +3100,8 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
bp = vfr->parent_dev->data->dev_private;
/* parent is deleted while children are still valid */
if (!bp) {
- PMD_DRV_LOG(DEBUG, "BNXT Port:%d VFR Error %d:%d\n",
- dev->data->port_id,
- filter_type,
- filter_op);
+ PMD_DRV_LOG(DEBUG, "BNXT Port:%d VFR Error\n",
+ dev->data->port_id);
return -EIO;
}
}
@@ -3113,27 +3110,16 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,
if (ret)
return ret;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
+ /* PMD supports thread-safe flow operations. rte_flow API
+ * functions can avoid mutex for multi-thread safety.
+ */
+ dev->data->dev_flags |= RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE;
- /* PMD supports thread-safe flow operations. rte_flow API
- * functions can avoid mutex for multi-thread safety.
- */
- dev->data->dev_flags |= RTE_ETH_DEV_FLOW_OPS_THREAD_SAFE;
+ if (BNXT_TRUFLOW_EN(bp))
+ *ops = &bnxt_ulp_rte_flow_ops;
+ else
+ *ops = &bnxt_flow_ops;
- if (BNXT_TRUFLOW_EN(bp))
- *(const void **)arg = &bnxt_ulp_rte_flow_ops;
- else
- *(const void **)arg = &bnxt_flow_ops;
- break;
- default:
- PMD_DRV_LOG(ERR,
- "Filter type (%d) not supported", filter_type);
- ret = -EINVAL;
- break;
- }
return ret;
}
@@ -3644,7 +3630,7 @@ static const struct eth_dev_ops bnxt_dev_ops = {
.rx_queue_stop = bnxt_rx_queue_stop,
.tx_queue_start = bnxt_tx_queue_start,
.tx_queue_stop = bnxt_tx_queue_stop,
- .filter_ctrl = bnxt_filter_ctrl_op,
+ .flow_ops_get = bnxt_flow_ops_get_op,
.dev_supported_ptypes_get = bnxt_dev_supported_ptypes_get_op,
.get_eeprom_length = bnxt_get_eeprom_length_op,
.get_eeprom = bnxt_get_eeprom_op,
diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
index d94874578e..b224a7d2c2 100644
--- a/drivers/net/bnxt/bnxt_reps.c
+++ b/drivers/net/bnxt/bnxt_reps.c
@@ -29,7 +29,7 @@ static const struct eth_dev_ops bnxt_rep_dev_ops = {
.dev_stop = bnxt_rep_dev_stop_op,
.stats_get = bnxt_rep_stats_get_op,
.stats_reset = bnxt_rep_stats_reset_op,
- .filter_ctrl = bnxt_filter_ctrl_op
+ .flow_ops_get = bnxt_flow_ops_get_op
};
uint16_t
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 5241c60089..24e3cf3c2e 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -3108,14 +3108,11 @@ bond_ethdev_mac_address_set(struct rte_eth_dev *dev,
}
static int
-bond_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
- enum rte_filter_type type, enum rte_filter_op op, void *arg)
+bond_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- if (type == RTE_ETH_FILTER_GENERIC && op == RTE_ETH_FILTER_GET) {
- *(const void **)arg = &bond_flow_ops;
- return 0;
- }
- return -ENOTSUP;
+ *ops = &bond_flow_ops;
+ return 0;
}
static int
@@ -3207,7 +3204,7 @@ const struct eth_dev_ops default_dev_ops = {
.mac_addr_set = bond_ethdev_mac_address_set,
.mac_addr_add = bond_ethdev_mac_addr_add,
.mac_addr_remove = bond_ethdev_mac_addr_remove,
- .filter_ctrl = bond_filter_ctrl
+ .flow_ops_get = bond_flow_ops_get
};
static int
diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c
index bfa57c979d..e8a2de3ef3 100644
--- a/drivers/net/cxgbe/cxgbe_ethdev.c
+++ b/drivers/net/cxgbe/cxgbe_ethdev.c
@@ -1335,7 +1335,7 @@ static const struct eth_dev_ops cxgbe_eth_dev_ops = {
.rx_queue_start = cxgbe_dev_rx_queue_start,
.rx_queue_stop = cxgbe_dev_rx_queue_stop,
.rx_queue_release = cxgbe_dev_rx_queue_release,
- .filter_ctrl = cxgbe_dev_filter_ctrl,
+ .flow_ops_get = cxgbe_dev_flow_ops_get,
.stats_get = cxgbe_dev_stats_get,
.stats_reset = cxgbe_dev_stats_reset,
.flow_ctrl_get = cxgbe_flow_ctrl_get,
diff --git a/drivers/net/cxgbe/cxgbe_flow.c b/drivers/net/cxgbe/cxgbe_flow.c
index 520a5a5c9a..edcbba9d7c 100644
--- a/drivers/net/cxgbe/cxgbe_flow.c
+++ b/drivers/net/cxgbe/cxgbe_flow.c
@@ -1448,23 +1448,9 @@ static const struct rte_flow_ops cxgbe_flow_ops = {
};
int
-cxgbe_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+cxgbe_dev_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
- RTE_SET_USED(dev);
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &cxgbe_flow_ops;
- break;
- default:
- ret = -ENOTSUP;
- break;
- }
- return ret;
+ *ops = &cxgbe_flow_ops;
+ return 0;
}
diff --git a/drivers/net/cxgbe/cxgbe_flow.h b/drivers/net/cxgbe/cxgbe_flow.h
index ec8e47aebe..9cf29550a9 100644
--- a/drivers/net/cxgbe/cxgbe_flow.h
+++ b/drivers/net/cxgbe/cxgbe_flow.h
@@ -35,10 +35,7 @@ struct rte_flow {
struct rte_eth_dev *dev;
};
-int
-cxgbe_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+int cxgbe_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
#endif /* _CXGBE_FLOW_H_ */
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 0e7ebf4dc0..9011dcfc12 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -99,10 +99,6 @@ static const struct rte_dpaa2_xstats_name_off dpaa2_xstats_strings[] = {
{"cgr_reject_bytes", 4, 1},
};
-static const enum rte_filter_op dpaa2_supported_filter_ops[] = {
- RTE_ETH_FILTER_GET
-};
-
static struct rte_dpaa2_driver rte_dpaa2_pmd;
static int dpaa2_dev_link_update(struct rte_eth_dev *dev,
int wait_to_complete);
@@ -2322,45 +2318,15 @@ int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
return ret;
}
-static inline int
-dpaa2_dev_verify_filter_ops(enum rte_filter_op filter_op)
-{
- unsigned int i;
-
- for (i = 0; i < RTE_DIM(dpaa2_supported_filter_ops); i++) {
- if (dpaa2_supported_filter_ops[i] == filter_op)
- return 0;
- }
- return -ENOTSUP;
-}
-
static int
-dpaa2_dev_flow_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+dpaa2_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
if (!dev)
return -ENODEV;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (dpaa2_dev_verify_filter_ops(filter_op) < 0) {
- ret = -ENOTSUP;
- break;
- }
- *(const void **)arg = &dpaa2_flow_ops;
- dpaa2_filter_type |= filter_type;
- break;
- default:
- RTE_LOG(ERR, PMD, "Filter type (%d) not supported",
- filter_type);
- ret = -ENOTSUP;
- break;
- }
- return ret;
+ *ops = &dpaa2_flow_ops;
+ return 0;
}
static void
@@ -2453,7 +2419,7 @@ static struct eth_dev_ops dpaa2_ethdev_ops = {
.mac_addr_set = dpaa2_dev_set_mac_addr,
.rss_hash_update = dpaa2_dev_rss_hash_update,
.rss_hash_conf_get = dpaa2_dev_rss_hash_conf_get,
- .filter_ctrl = dpaa2_dev_flow_ctrl,
+ .flow_ops_get = dpaa2_dev_flow_ops_get,
.rxq_info_get = dpaa2_rxq_info_get,
.txq_info_get = dpaa2_txq_info_get,
.tm_ops_get = dpaa2_tm_ops_get,
diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c
index 29f1f2e654..bfe17c350a 100644
--- a/drivers/net/dpaa2/dpaa2_flow.c
+++ b/drivers/net/dpaa2/dpaa2_flow.c
@@ -89,8 +89,6 @@ enum rte_flow_action_type dpaa2_supported_action_type[] = {
/* Max of enum rte_flow_item_type + 1, for both IPv4 and IPv6*/
#define DPAA2_FLOW_ITEM_TYPE_GENERIC_IP (RTE_FLOW_ITEM_TYPE_META + 1)
-enum rte_filter_type dpaa2_filter_type = RTE_ETH_FILTER_NONE;
-
#ifndef __cplusplus
static const struct rte_flow_item_eth dpaa2_flow_item_eth_mask = {
.dst.addr_bytes = "\xff\xff\xff\xff\xff\xff",
@@ -3969,24 +3967,15 @@ struct rte_flow *dpaa2_flow_create(struct rte_eth_dev *dev,
flow->ipaddr_rule.fs_ipdst_offset =
IP_ADDRESS_OFFSET_INVALID;
- switch (dpaa2_filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- ret = dpaa2_generic_flow_set(flow, dev, attr, pattern,
- actions, error);
- if (ret < 0) {
- if (error->type > RTE_FLOW_ERROR_TYPE_ACTION)
- rte_flow_error_set(error, EPERM,
- RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
- attr, "unknown");
- DPAA2_PMD_ERR(
- "Failure to create flow, return code (%d)", ret);
- goto creation_error;
- }
- break;
- default:
- DPAA2_PMD_ERR("Filter type (%d) not supported",
- dpaa2_filter_type);
- break;
+ ret = dpaa2_generic_flow_set(flow, dev, attr, pattern,
+ actions, error);
+ if (ret < 0) {
+ if (error->type > RTE_FLOW_ERROR_TYPE_ACTION)
+ rte_flow_error_set(error, EPERM,
+ RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ attr, "unknown");
+ DPAA2_PMD_ERR("Failure to create flow, return code (%d)", ret);
+ goto creation_error;
}
return flow;
diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 1716d6b904..17ee6e91a0 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -194,10 +194,8 @@ static int igb_add_5tuple_filter_82576(struct rte_eth_dev *dev,
struct rte_eth_ntuple_filter *ntuple_filter);
static int igb_remove_5tuple_filter_82576(struct rte_eth_dev *dev,
struct rte_eth_ntuple_filter *ntuple_filter);
-static int eth_igb_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+static int eth_igb_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
static int eth_igb_get_reg_length(struct rte_eth_dev *dev);
static int eth_igb_get_regs(struct rte_eth_dev *dev,
struct rte_dev_reg_info *regs);
@@ -374,7 +372,7 @@ static const struct eth_dev_ops eth_igb_ops = {
.reta_query = eth_igb_rss_reta_query,
.rss_hash_update = eth_igb_rss_hash_update,
.rss_hash_conf_get = eth_igb_rss_hash_conf_get,
- .filter_ctrl = eth_igb_filter_ctrl,
+ .flow_ops_get = eth_igb_flow_ops_get,
.set_mc_addr_list = eth_igb_set_mc_addr_list,
.rxq_info_get = igb_rxq_info_get,
.txq_info_get = igb_txq_info_get,
@@ -4583,26 +4581,11 @@ igb_add_del_ethertype_filter(struct rte_eth_dev *dev,
}
static int
-eth_igb_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+eth_igb_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &igb_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- break;
- }
-
- return ret;
+ *ops = &igb_flow_ops;
+ return 0;
}
static int
diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
index b3f441c8f7..38da5e8ce4 100644
--- a/drivers/net/enic/enic_ethdev.c
+++ b/drivers/net/enic/enic_ethdev.c
@@ -74,13 +74,10 @@ static const struct vic_speed_capa {
RTE_LOG_REGISTER(enic_pmd_logtype, pmd.net.enic, INFO);
static int
-enicpmd_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+enicpmd_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
struct enic *enic = pmd_priv(dev);
- int ret = 0;
ENICPMD_FUNC_TRACE();
@@ -90,23 +87,12 @@ enicpmd_dev_filter_ctrl(struct rte_eth_dev *dev,
*/
if (enic->geneve_opt_enabled)
return -ENOTSUP;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- if (enic->flow_filter_mode == FILTER_FLOWMAN)
- *(const void **)arg = &enic_fm_flow_ops;
- else
- *(const void **)arg = &enic_flow_ops;
- break;
- default:
- dev_warning(enic, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
- return ret;
+ if (enic->flow_filter_mode == FILTER_FLOWMAN)
+ *ops = &enic_fm_flow_ops;
+ else
+ *ops = &enic_flow_ops;
+ return 0;
}
static void enicpmd_dev_tx_queue_release(void *txq)
@@ -1121,7 +1107,7 @@ static const struct eth_dev_ops enicpmd_eth_dev_ops = {
.mac_addr_remove = enicpmd_remove_mac_addr,
.mac_addr_set = enicpmd_set_mac_addr,
.set_mc_addr_list = enicpmd_set_mc_addr_list,
- .filter_ctrl = enicpmd_dev_filter_ctrl,
+ .flow_ops_get = enicpmd_dev_flow_ops_get,
.reta_query = enicpmd_dev_rss_reta_query,
.reta_update = enicpmd_dev_rss_reta_update,
.rss_hash_conf_get = enicpmd_dev_rss_hash_conf_get,
diff --git a/drivers/net/enic/enic_vf_representor.c b/drivers/net/enic/enic_vf_representor.c
index f7b79c1c4e..79dd6e5640 100644
--- a/drivers/net/enic/enic_vf_representor.c
+++ b/drivers/net/enic/enic_vf_representor.c
@@ -377,34 +377,21 @@ static const struct rte_flow_ops enic_vf_flow_ops = {
};
static int
-enic_vf_filter_ctrl(struct rte_eth_dev *eth_dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+enic_vf_flow_ops_get(struct rte_eth_dev *eth_dev,
+ const struct rte_flow_ops **ops)
{
struct enic_vf_representor *vf;
- int ret = 0;
ENICPMD_FUNC_TRACE();
vf = eth_dev->data->dev_private;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- if (vf->enic.flow_filter_mode == FILTER_FLOWMAN) {
- *(const void **)arg = &enic_vf_flow_ops;
- } else {
- ENICPMD_LOG(WARNING, "VF representors require flowman support for rte_flow API");
- ret = -EINVAL;
- }
- break;
- default:
- ENICPMD_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
+ if (vf->enic.flow_filter_mode != FILTER_FLOWMAN) {
+ ENICPMD_LOG(WARNING,
+ "VF representors require flowman support for rte_flow API");
+ return -EINVAL;
}
- return ret;
+
+ *ops = &enic_vf_flow_ops;
+ return 0;
}
static int enic_vf_link_update(struct rte_eth_dev *eth_dev,
@@ -566,7 +553,7 @@ static const struct eth_dev_ops enic_vf_representor_dev_ops = {
.dev_start = enic_vf_dev_start,
.dev_stop = enic_vf_dev_stop,
.dev_close = enic_vf_dev_close,
- .filter_ctrl = enic_vf_filter_ctrl,
+ .flow_ops_get = enic_vf_flow_ops_get,
.link_update = enic_vf_link_update,
.promiscuous_enable = enic_vf_promiscuous_enable,
.promiscuous_disable = enic_vf_promiscuous_disable,
diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c
index 1343777d61..5ff33e03e0 100644
--- a/drivers/net/failsafe/failsafe_ops.c
+++ b/drivers/net/failsafe/failsafe_ops.c
@@ -1514,17 +1514,11 @@ fs_rss_hash_update(struct rte_eth_dev *dev,
}
static int
-fs_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
- enum rte_filter_type type,
- enum rte_filter_op op,
- void *arg)
+fs_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- if (type == RTE_ETH_FILTER_GENERIC &&
- op == RTE_ETH_FILTER_GET) {
- *(const void **)arg = &fs_flow_ops;
- return 0;
- }
- return -ENOTSUP;
+ *ops = &fs_flow_ops;
+ return 0;
}
const struct eth_dev_ops failsafe_ops = {
@@ -1565,5 +1559,5 @@ const struct eth_dev_ops failsafe_ops = {
.mac_addr_set = fs_mac_addr_set,
.set_mc_addr_list = fs_set_mc_addr_list,
.rss_hash_update = fs_rss_hash_update,
- .filter_ctrl = fs_filter_ctrl,
+ .flow_ops_get = fs_flow_ops_get,
};
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index 1d6b710c9f..2352dd1615 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -2504,42 +2504,20 @@ static int hinic_set_mc_addr_list(struct rte_eth_dev *dev,
}
/**
- * DPDK callback to manage filter control operations
+ * DPDK callback to get flow operations
*
* @param dev
* Pointer to Ethernet device structure.
- * @param filter_type
- * Filter type, which just supports generic type.
- * @param filter_op
- * Filter operation to perform.
- * @param arg
+ * @param ops
* Pointer to operation-specific structure.
*
* @return
* 0 on success, negative error value otherwise.
*/
-static int hinic_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+static int hinic_dev_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
- int func_id = hinic_global_func_id(nic_dev->hwdev);
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &hinic_flow_ops;
- break;
- default:
- PMD_DRV_LOG(INFO, "Filter type (%d) not supported",
- filter_type);
- return -EINVAL;
- }
-
- PMD_DRV_LOG(INFO, "Set filter_ctrl succeed, func_id: 0x%x, filter_type: 0x%x,"
- "filter_op: 0x%x.", func_id, filter_type, filter_op);
+ *ops = &hinic_flow_ops;
return 0;
}
@@ -3047,7 +3025,7 @@ static const struct eth_dev_ops hinic_pmd_ops = {
.mac_addr_remove = hinic_mac_addr_remove,
.mac_addr_add = hinic_mac_addr_add,
.set_mc_addr_list = hinic_set_mc_addr_list,
- .filter_ctrl = hinic_dev_filter_ctrl,
+ .flow_ops_get = hinic_dev_flow_ops_get,
};
static const struct eth_dev_ops hinic_pmd_vf_ops = {
@@ -3082,7 +3060,7 @@ static const struct eth_dev_ops hinic_pmd_vf_ops = {
.mac_addr_remove = hinic_mac_addr_remove,
.mac_addr_add = hinic_mac_addr_add,
.set_mc_addr_list = hinic_set_mc_addr_list,
- .filter_ctrl = hinic_dev_filter_ctrl,
+ .flow_ops_get = hinic_dev_flow_ops_get,
};
static int hinic_func_init(struct rte_eth_dev *eth_dev)
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 9cbcc13de8..f6d47369b2 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -6550,7 +6550,7 @@ static const struct eth_dev_ops hns3_eth_dev_ops = {
.rss_hash_conf_get = hns3_dev_rss_hash_conf_get,
.reta_update = hns3_dev_rss_reta_update,
.reta_query = hns3_dev_rss_reta_query,
- .filter_ctrl = hns3_dev_filter_ctrl,
+ .flow_ops_get = hns3_dev_flow_ops_get,
.vlan_filter_set = hns3_vlan_filter_set,
.vlan_tpid_set = hns3_vlan_tpid_set,
.vlan_offload_set = hns3_vlan_offload_set,
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 932600d05b..d180dc1e7f 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -963,9 +963,8 @@ hns3_test_and_clear_bit(unsigned int nr, volatile uint64_t *addr)
}
int hns3_buffer_alloc(struct hns3_hw *hw);
-int hns3_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg);
+int hns3_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
bool hns3_is_reset_pending(struct hns3_adapter *hns);
bool hns3vf_is_reset_pending(struct hns3_adapter *hns);
void hns3_update_link_status_and_event(struct hns3_hw *hw);
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index fd20c522dc..a35e1d9aad 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -2769,7 +2769,7 @@ static const struct eth_dev_ops hns3vf_eth_dev_ops = {
.rss_hash_conf_get = hns3_dev_rss_hash_conf_get,
.reta_update = hns3_dev_rss_reta_update,
.reta_query = hns3_dev_rss_reta_query,
- .filter_ctrl = hns3_dev_filter_ctrl,
+ .flow_ops_get = hns3_dev_flow_ops_get,
.vlan_filter_set = hns3vf_vlan_filter_set,
.vlan_offload_set = hns3vf_vlan_offload_set,
.get_reg = hns3_get_regs,
diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c
index a016857aa5..0c4e91109c 100644
--- a/drivers/net/hns3/hns3_flow.c
+++ b/drivers/net/hns3/hns3_flow.c
@@ -2001,34 +2001,16 @@ static const struct rte_flow_ops hns3_flow_ops = {
.isolate = NULL,
};
-/*
- * The entry of flow API.
- * @param dev
- * Pointer to Ethernet device.
- * @return
- * 0 on success, a negative errno value otherwise is set.
- */
int
-hns3_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg)
+hns3_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
struct hns3_hw *hw;
- int ret = 0;
hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- if (hw->adapter_state >= HNS3_NIC_CLOSED)
- return -ENODEV;
- *(const void **)arg = &hns3_flow_ops;
- break;
- default:
- hns3_err(hw, "Filter type (%d) not supported", filter_type);
- ret = -EOPNOTSUPP;
- break;
- }
+ if (hw->adapter_state >= HNS3_NIC_CLOSED)
+ return -ENODEV;
- return ret;
+ *ops = &hns3_flow_ops;
+ return 0;
}
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index d7cd049891..e8634755f2 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -319,10 +319,8 @@ static int i40e_dev_udp_tunnel_port_add(struct rte_eth_dev *dev,
static int i40e_dev_udp_tunnel_port_del(struct rte_eth_dev *dev,
struct rte_eth_udp_tunnel *udp_tunnel);
static void i40e_filter_input_set_init(struct i40e_pf *pf);
-static int i40e_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+static int i40e_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
static int i40e_dev_get_dcb_info(struct rte_eth_dev *dev,
struct rte_eth_dcb_info *dcb_info);
static int i40e_dev_sync_phy_type(struct i40e_hw *hw);
@@ -484,7 +482,7 @@ static const struct eth_dev_ops i40e_eth_dev_ops = {
.rss_hash_conf_get = i40e_dev_rss_hash_conf_get,
.udp_tunnel_port_add = i40e_dev_udp_tunnel_port_add,
.udp_tunnel_port_del = i40e_dev_udp_tunnel_port_del,
- .filter_ctrl = i40e_dev_filter_ctrl,
+ .flow_ops_get = i40e_dev_flow_ops_get,
.rxq_info_get = i40e_rxq_info_get,
.txq_info_get = i40e_txq_info_get,
.rx_burst_mode_get = i40e_rx_burst_mode_get,
@@ -9785,30 +9783,14 @@ i40e_ethertype_filter_set(struct i40e_pf *pf,
}
static int
-i40e_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+i40e_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
if (dev == NULL)
return -EINVAL;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &i40e_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &i40e_flow_ops;
+ return 0;
}
/*
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 4d37722022..e3933cde26 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -117,10 +117,8 @@ static int iavf_dev_rx_queue_intr_enable(struct rte_eth_dev *dev,
uint16_t queue_id);
static int iavf_dev_rx_queue_intr_disable(struct rte_eth_dev *dev,
uint16_t queue_id);
-static int iavf_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+static int iavf_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
static int iavf_set_mc_addr_list(struct rte_eth_dev *dev,
struct rte_ether_addr *mc_addrs,
uint32_t mc_addrs_num);
@@ -195,7 +193,7 @@ static const struct eth_dev_ops iavf_eth_dev_ops = {
.mtu_set = iavf_dev_mtu_set,
.rx_queue_intr_enable = iavf_dev_rx_queue_intr_enable,
.rx_queue_intr_disable = iavf_dev_rx_queue_intr_disable,
- .filter_ctrl = iavf_dev_filter_ctrl,
+ .flow_ops_get = iavf_dev_flow_ops_get,
.tx_done_cleanup = iavf_dev_tx_done_cleanup,
};
@@ -2070,30 +2068,14 @@ iavf_dev_interrupt_handler(void *param)
}
static int
-iavf_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+iavf_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
if (!dev)
return -EINVAL;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &iavf_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &iavf_flow_ops;
+ return 0;
}
static void
diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c
index e0772295e9..86600959f8 100644
--- a/drivers/net/ice/ice_dcf_ethdev.c
+++ b/drivers/net/ice/ice_dcf_ethdev.c
@@ -743,31 +743,14 @@ ice_dcf_dev_allmulticast_disable(__rte_unused struct rte_eth_dev *dev)
}
static int
-ice_dcf_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+ice_dcf_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
if (!dev)
return -EINVAL;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &ice_flow_ops;
- break;
-
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &ice_flow_ops;
+ return 0;
}
#define ICE_DCF_32_BIT_WIDTH (CHAR_BIT * 4)
@@ -984,7 +967,7 @@ static const struct eth_dev_ops ice_dcf_eth_dev_ops = {
.promiscuous_disable = ice_dcf_dev_promiscuous_disable,
.allmulticast_enable = ice_dcf_dev_allmulticast_enable,
.allmulticast_disable = ice_dcf_dev_allmulticast_disable,
- .filter_ctrl = ice_dcf_dev_filter_ctrl,
+ .flow_ops_get = ice_dcf_dev_flow_ops_get,
.udp_tunnel_port_add = ice_dcf_dev_udp_tunnel_port_add,
.udp_tunnel_port_del = ice_dcf_dev_udp_tunnel_port_del,
};
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 8999d441ac..3d1c32247a 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -129,10 +129,8 @@ static int ice_xstats_get(struct rte_eth_dev *dev,
static int ice_xstats_get_names(struct rte_eth_dev *dev,
struct rte_eth_xstat_name *xstats_names,
unsigned int limit);
-static int ice_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+static int ice_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
static int ice_dev_udp_tunnel_port_add(struct rte_eth_dev *dev,
struct rte_eth_udp_tunnel *udp_tunnel);
static int ice_dev_udp_tunnel_port_del(struct rte_eth_dev *dev,
@@ -215,7 +213,7 @@ static const struct eth_dev_ops ice_eth_dev_ops = {
.xstats_get = ice_xstats_get,
.xstats_get_names = ice_xstats_get_names,
.xstats_reset = ice_stats_reset,
- .filter_ctrl = ice_dev_filter_ctrl,
+ .flow_ops_get = ice_dev_flow_ops_get,
.udp_tunnel_port_add = ice_dev_udp_tunnel_port_add,
.udp_tunnel_port_del = ice_dev_udp_tunnel_port_del,
.tx_done_cleanup = ice_tx_done_cleanup,
@@ -5255,30 +5253,14 @@ static int ice_xstats_get_names(__rte_unused struct rte_eth_dev *dev,
}
static int
-ice_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+ice_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
if (!dev)
return -EINVAL;
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &ice_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &ice_flow_ops;
+ return 0;
}
/* Add UDP tunneling port */
diff --git a/drivers/net/igc/igc_ethdev.c b/drivers/net/igc/igc_ethdev.c
index 0ea6e2a045..56d1024af6 100644
--- a/drivers/net/igc/igc_ethdev.c
+++ b/drivers/net/igc/igc_ethdev.c
@@ -297,7 +297,7 @@ static const struct eth_dev_ops eth_igc_ops = {
.vlan_offload_set = eth_igc_vlan_offload_set,
.vlan_tpid_set = eth_igc_vlan_tpid_set,
.vlan_strip_queue_set = eth_igc_vlan_strip_queue_set,
- .filter_ctrl = eth_igc_filter_ctrl,
+ .flow_ops_get = eth_igc_flow_ops_get,
};
/*
diff --git a/drivers/net/igc/igc_filter.c b/drivers/net/igc/igc_filter.c
index 836621d4c1..51fcabfb59 100644
--- a/drivers/net/igc/igc_filter.c
+++ b/drivers/net/igc/igc_filter.c
@@ -369,24 +369,9 @@ igc_clear_all_filter(struct rte_eth_dev *dev)
}
int
-eth_igc_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg)
+eth_igc_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
- RTE_SET_USED(dev);
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &igc_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- }
-
- return ret;
+ *ops = &igc_flow_ops;
+ return 0;
}
diff --git a/drivers/net/igc/igc_filter.h b/drivers/net/igc/igc_filter.h
index df8516bc40..781d270def 100644
--- a/drivers/net/igc/igc_filter.h
+++ b/drivers/net/igc/igc_filter.h
@@ -29,9 +29,8 @@ int igc_set_syn_filter(struct rte_eth_dev *dev,
const struct igc_syn_filter *filter);
void igc_clear_syn_filter(struct rte_eth_dev *dev);
void igc_clear_all_filter(struct rte_eth_dev *dev);
-int
-eth_igc_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg);
+int eth_igc_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
#ifdef __cplusplus
}
diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c
index 856d21ef9b..589d9fa587 100644
--- a/drivers/net/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/ipn3ke/ipn3ke_representor.c
@@ -2821,11 +2821,9 @@ ipn3ke_rpst_mtu_set(struct rte_eth_dev *ethdev, uint16_t mtu)
}
static int
-ipn3ke_afu_filter_ctrl(struct rte_eth_dev *ethdev,
- enum rte_filter_type filter_type, enum rte_filter_op filter_op,
- void *arg)
+ipn3ke_afu_flow_ops_get(struct rte_eth_dev *ethdev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
struct ipn3ke_hw *hw;
struct ipn3ke_rpst *rpst;
@@ -2836,27 +2834,13 @@ ipn3ke_afu_filter_ctrl(struct rte_eth_dev *ethdev,
rpst = IPN3KE_DEV_PRIVATE_TO_RPST(ethdev);
if (hw->acc_flow)
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &ipn3ke_flow_ops;
- break;
- default:
- IPN3KE_AFU_PMD_WARN("Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
+ *ops = &ipn3ke_flow_ops;
else if (rpst->i40e_pf_eth)
- (*rpst->i40e_pf_eth->dev_ops->filter_ctrl)(ethdev,
- filter_type,
- filter_op,
- arg);
+ (*rpst->i40e_pf_eth->dev_ops->flow_ops_get)(ethdev, ops);
else
return -EINVAL;
- return ret;
+ return 0;
}
static const struct eth_dev_ops ipn3ke_rpst_dev_ops = {
@@ -2874,7 +2858,7 @@ static const struct eth_dev_ops ipn3ke_rpst_dev_ops = {
.stats_reset = ipn3ke_rpst_stats_reset,
.xstats_reset = ipn3ke_rpst_stats_reset,
- .filter_ctrl = ipn3ke_afu_filter_ctrl,
+ .flow_ops_get = ipn3ke_afu_flow_ops_get,
.rx_queue_start = ipn3ke_rpst_rx_queue_start,
.rx_queue_stop = ipn3ke_rpst_rx_queue_stop,
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 761a0f26bb..d5581a243a 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -304,10 +304,8 @@ static int ixgbe_add_5tuple_filter(struct rte_eth_dev *dev,
struct ixgbe_5tuple_filter *filter);
static void ixgbe_remove_5tuple_filter(struct rte_eth_dev *dev,
struct ixgbe_5tuple_filter *filter);
-static int ixgbe_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+static int ixgbe_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
static int ixgbevf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu);
static int ixgbe_dev_set_mc_addr_list(struct rte_eth_dev *dev,
@@ -538,7 +536,7 @@ static const struct eth_dev_ops ixgbe_eth_dev_ops = {
.reta_query = ixgbe_dev_rss_reta_query,
.rss_hash_update = ixgbe_dev_rss_hash_update,
.rss_hash_conf_get = ixgbe_dev_rss_hash_conf_get,
- .filter_ctrl = ixgbe_dev_filter_ctrl,
+ .flow_ops_get = ixgbe_dev_flow_ops_get,
.set_mc_addr_list = ixgbe_dev_set_mc_addr_list,
.rxq_info_get = ixgbe_rxq_info_get,
.txq_info_get = ixgbe_txq_info_get,
@@ -6798,27 +6796,11 @@ ixgbe_add_del_ethertype_filter(struct rte_eth_dev *dev,
}
static int
-ixgbe_dev_filter_ctrl(__rte_unused struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+ixgbe_dev_flow_ops_get(__rte_unused struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &ixgbe_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &ixgbe_flow_ops;
+ return 0;
}
static u8 *
diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 041c1934f5..d048d21033 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -437,7 +437,7 @@ static const struct eth_dev_ops mlx4_dev_ops = {
.flow_ctrl_get = mlx4_flow_ctrl_get,
.flow_ctrl_set = mlx4_flow_ctrl_set,
.mtu_set = mlx4_mtu_set,
- .filter_ctrl = mlx4_filter_ctrl,
+ .flow_ops_get = mlx4_flow_ops_get,
.rx_queue_intr_enable = mlx4_rx_intr_enable,
.rx_queue_intr_disable = mlx4_rx_intr_disable,
.is_removed = mlx4_is_removed,
diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
index b8ecfa829b..43a65abcc0 100644
--- a/drivers/net/mlx4/mlx4_flow.c
+++ b/drivers/net/mlx4/mlx4_flow.c
@@ -1590,37 +1590,19 @@ static const struct rte_flow_ops mlx4_flow_ops = {
};
/**
- * Manage filter operations.
+ * Get rte_flow callbacks.
*
* @param dev
* Pointer to Ethernet device structure.
- * @param filter_type
- * Filter type.
- * @param filter_op
- * Operation to perform.
- * @param arg
+ * @param ops
* Pointer to operation-specific structure.
*
- * @return
- * 0 on success, negative errno value otherwise and rte_errno is set.
+ * @return 0
*/
int
-mlx4_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+mlx4_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- break;
- *(const void **)arg = &mlx4_flow_ops;
- return 0;
- default:
- ERROR("%p: filter type (%d) not supported",
- (void *)dev, filter_type);
- break;
- }
- rte_errno = ENOTSUP;
- return -rte_errno;
+ *ops = &mlx4_flow_ops;
+ return 0;
}
diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h
index e4366f28bb..5e82df6bd6 100644
--- a/drivers/net/mlx4/mlx4_flow.h
+++ b/drivers/net/mlx4/mlx4_flow.h
@@ -51,9 +51,6 @@ uint64_t mlx4_conv_rss_types(struct mlx4_priv *priv, uint64_t types,
int verbs_to_dpdk);
int mlx4_flow_sync(struct mlx4_priv *priv, struct rte_flow_error *error);
void mlx4_flow_clean(struct mlx4_priv *priv);
-int mlx4_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+int mlx4_flow_ops_get(struct rte_eth_dev *dev, const struct rte_flow_ops **ops);
#endif /* RTE_PMD_MLX4_FLOW_H_ */
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index abd7ff70df..d9372f0a00 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1477,7 +1477,7 @@ const struct eth_dev_ops mlx5_dev_ops = {
.reta_query = mlx5_dev_rss_reta_query,
.rss_hash_update = mlx5_rss_hash_update,
.rss_hash_conf_get = mlx5_rss_hash_conf_get,
- .filter_ctrl = mlx5_dev_filter_ctrl,
+ .flow_ops_get = mlx5_flow_ops_get,
.rxq_info_get = mlx5_rxq_info_get,
.txq_info_get = mlx5_txq_info_get,
.rx_burst_mode_get = mlx5_rx_burst_mode_get,
@@ -1562,7 +1562,7 @@ const struct eth_dev_ops mlx5_dev_ops_isolate = {
.mtu_set = mlx5_dev_set_mtu,
.vlan_strip_queue_set = mlx5_vlan_strip_queue_set,
.vlan_offload_set = mlx5_vlan_offload_set,
- .filter_ctrl = mlx5_dev_filter_ctrl,
+ .flow_ops_get = mlx5_flow_ops_get,
.rxq_info_get = mlx5_rxq_info_get,
.txq_info_get = mlx5_txq_info_get,
.rx_burst_mode_get = mlx5_rx_burst_mode_get,
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index a281fd20ea..24aff0beab 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -1192,10 +1192,7 @@ int mlx5_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
struct rte_flow_error *error);
int mlx5_flow_isolate(struct rte_eth_dev *dev, int enable,
struct rte_flow_error *error);
-int mlx5_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+int mlx5_flow_ops_get(struct rte_eth_dev *dev, const struct rte_flow_ops **ops);
int mlx5_flow_start_default(struct rte_eth_dev *dev);
void mlx5_flow_stop_default(struct rte_eth_dev *dev);
int mlx5_flow_verify(struct rte_eth_dev *dev);
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index ab5be3dacc..ca09d1ede9 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -6492,40 +6492,20 @@ mlx5_flow_query(struct rte_eth_dev *dev,
}
/**
- * Manage filter operations.
+ * Get rte_flow callbacks.
*
* @param dev
* Pointer to Ethernet device structure.
- * @param filter_type
- * Filter type.
- * @param filter_op
- * Operation to perform.
- * @param arg
+ * @param ops
* Pointer to operation-specific structure.
*
- * @return
- * 0 on success, a negative errno value otherwise and rte_errno is set.
+ * @return 0
*/
int
-mlx5_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+mlx5_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET) {
- rte_errno = EINVAL;
- return -rte_errno;
- }
- *(const void **)arg = &mlx5_flow_ops;
- return 0;
- default:
- DRV_LOG(ERR, "port %u filter type (%d) not supported",
- dev->data->port_id, filter_type);
- rte_errno = ENOTSUP;
- return -rte_errno;
- }
+ *ops = &mlx5_flow_ops;
return 0;
}
diff --git a/drivers/net/mvpp2/mrvl_ethdev.c b/drivers/net/mvpp2/mrvl_ethdev.c
index e119952340..1d41788974 100644
--- a/drivers/net/mvpp2/mrvl_ethdev.c
+++ b/drivers/net/mvpp2/mrvl_ethdev.c
@@ -2340,32 +2340,18 @@ mrvl_rss_hash_conf_get(struct rte_eth_dev *dev,
*
* @param dev
* Pointer to the device structure.
- * @param filer_type
- * Flow filter type.
- * @param filter_op
- * Flow filter operation.
- * @param arg
+ * @param ops
* Pointer to pass the flow ops.
*
* @return
* 0 on success, negative error value otherwise.
*/
static int
-mrvl_eth_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg)
+mrvl_eth_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &mrvl_flow_ops;
- return 0;
- default:
- MRVL_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- return -EINVAL;
- }
+ *ops = &mrvl_flow_ops;
+ return 0;
}
/**
@@ -2443,7 +2429,7 @@ static const struct eth_dev_ops mrvl_ops = {
.flow_ctrl_set = mrvl_flow_ctrl_set,
.rss_hash_update = mrvl_rss_hash_update,
.rss_hash_conf_get = mrvl_rss_hash_conf_get,
- .filter_ctrl = mrvl_eth_filter_ctrl,
+ .flow_ops_get = mrvl_eth_flow_ops_get,
.mtr_ops_get = mrvl_mtr_ops_get,
.tm_ops_get = mrvl_tm_ops_get,
};
diff --git a/drivers/net/octeontx2/otx2_ethdev.c b/drivers/net/octeontx2/otx2_ethdev.c
index e9fbbca4da..bacf180a6d 100644
--- a/drivers/net/octeontx2/otx2_ethdev.c
+++ b/drivers/net/octeontx2/otx2_ethdev.c
@@ -2322,7 +2322,7 @@ static const struct eth_dev_ops otx2_eth_dev_ops = {
.tx_done_cleanup = otx2_nix_tx_done_cleanup,
.set_queue_rate_limit = otx2_nix_tm_set_queue_rate_limit,
.pool_ops_supported = otx2_nix_pool_ops_supported,
- .filter_ctrl = otx2_nix_dev_filter_ctrl,
+ .flow_ops_get = otx2_nix_dev_flow_ops_get,
.get_module_info = otx2_nix_get_module_info,
.get_module_eeprom = otx2_nix_get_module_eeprom,
.fw_version_get = otx2_nix_fw_version_get,
diff --git a/drivers/net/octeontx2/otx2_ethdev.h b/drivers/net/octeontx2/otx2_ethdev.h
index 99f0469d89..7391f09b8a 100644
--- a/drivers/net/octeontx2/otx2_ethdev.h
+++ b/drivers/net/octeontx2/otx2_ethdev.h
@@ -396,9 +396,8 @@ otx2_eth_pmd_priv(struct rte_eth_dev *eth_dev)
/* Ops */
int otx2_nix_info_get(struct rte_eth_dev *eth_dev,
struct rte_eth_dev_info *dev_info);
-int otx2_nix_dev_filter_ctrl(struct rte_eth_dev *eth_dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg);
+int otx2_nix_dev_flow_ops_get(struct rte_eth_dev *eth_dev,
+ const struct rte_flow_ops **ops);
int otx2_nix_fw_version_get(struct rte_eth_dev *eth_dev, char *fw_version,
size_t fw_size);
int otx2_nix_get_module_info(struct rte_eth_dev *eth_dev,
diff --git a/drivers/net/octeontx2/otx2_ethdev_ops.c b/drivers/net/octeontx2/otx2_ethdev_ops.c
index 963cc285ed..9e3f80937d 100644
--- a/drivers/net/octeontx2/otx2_ethdev_ops.c
+++ b/drivers/net/octeontx2/otx2_ethdev_ops.c
@@ -471,24 +471,11 @@ otx2_nix_pool_ops_supported(struct rte_eth_dev *eth_dev, const char *pool)
}
int
-otx2_nix_dev_filter_ctrl(struct rte_eth_dev *eth_dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op, void *arg)
+otx2_nix_dev_flow_ops_get(struct rte_eth_dev *eth_dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- RTE_SET_USED(eth_dev);
-
- if (filter_type != RTE_ETH_FILTER_GENERIC) {
- otx2_err("Unsupported filter type %d", filter_type);
- return -ENOTSUP;
- }
-
- if (filter_op == RTE_ETH_FILTER_GET) {
- *(const void **)arg = &otx2_flow_ops;
- return 0;
- }
-
- otx2_err("Invalid filter_op %d", filter_op);
- return -EINVAL;
+ *ops = &otx2_flow_ops;
+ return 0;
}
static struct cgx_fw_data *
diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index ab5f5b1065..ff4b9255c4 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -2434,7 +2434,7 @@ static const struct eth_dev_ops qede_eth_dev_ops = {
.reta_update = qede_rss_reta_update,
.reta_query = qede_rss_reta_query,
.mtu_set = qede_set_mtu,
- .filter_ctrl = qede_dev_filter_ctrl,
+ .flow_ops_get = qede_dev_flow_ops_get,
.udp_tunnel_port_add = qede_udp_dst_port_add,
.udp_tunnel_port_del = qede_udp_dst_port_del,
.fw_version_get = qede_fw_version_get,
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index da4b87f5e2..a38b701183 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -285,11 +285,8 @@ int qede_dev_set_link_state(struct rte_eth_dev *eth_dev, bool link_up);
int qede_link_update(struct rte_eth_dev *eth_dev,
__rte_unused int wait_to_complete);
-int qede_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type type,
- enum rte_filter_op op, void *arg);
-
-int qede_ntuple_filter_conf(struct rte_eth_dev *eth_dev,
- enum rte_filter_op filter_op, void *arg);
+int qede_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
int qede_check_fdir_support(struct rte_eth_dev *eth_dev);
diff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c
index df5c07dfe5..c756594bfc 100644
--- a/drivers/net/qede/qede_filter.c
+++ b/drivers/net/qede/qede_filter.c
@@ -1050,31 +1050,18 @@ const struct rte_flow_ops qede_flow_ops = {
.flush = qede_flow_flush,
};
-int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+int
+qede_dev_flow_ops_get(struct rte_eth_dev *eth_dev,
+ const struct rte_flow_ops **ops)
{
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (ECORE_IS_CMT(edev)) {
- DP_ERR(edev, "flowdir is not supported in 100G mode\n");
- return -ENOTSUP;
- }
-
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
-
- *(const void **)arg = &qede_flow_ops;
- return 0;
- default:
- DP_ERR(edev, "Unsupported filter type %d\n",
- filter_type);
- return -EINVAL;
+ if (ECORE_IS_CMT(edev)) {
+ DP_ERR(edev, "flowdir is not supported in 100G mode\n");
+ return -ENOTSUP;
}
+ *ops = &qede_flow_ops;
return 0;
}
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 479b4f4df6..d72df2e13b 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -1751,32 +1751,11 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev,
}
static int
-sfc_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+sfc_dev_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
- int rc = ENOTSUP;
-
- sfc_log_init(sa, "entry");
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET) {
- rc = EINVAL;
- } else {
- *(const void **)arg = &sfc_flow_ops;
- rc = 0;
- }
- break;
- default:
- sfc_err(sa, "Unknown filter type %u", filter_type);
- break;
- }
-
- sfc_log_init(sa, "exit: %d", -rc);
- SFC_ASSERT(rc >= 0);
- return -rc;
+ *ops = &sfc_flow_ops;
+ return 0;
}
static int
@@ -1859,7 +1838,7 @@ static const struct eth_dev_ops sfc_eth_dev_ops = {
.reta_query = sfc_dev_rss_reta_query,
.rss_hash_update = sfc_dev_rss_hash_update,
.rss_hash_conf_get = sfc_dev_rss_hash_conf_get,
- .filter_ctrl = sfc_dev_filter_ctrl,
+ .flow_ops_get = sfc_dev_flow_ops_get,
.set_mc_addr_list = sfc_set_mc_addr_list,
.rxq_info_get = sfc_rx_queue_info_get,
.txq_info_get = sfc_tx_queue_info_get,
diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c
index 99d8468c94..0c2a79a7d2 100644
--- a/drivers/net/softnic/rte_eth_softnic.c
+++ b/drivers/net/softnic/rte_eth_softnic.c
@@ -248,18 +248,11 @@ pmd_link_update(struct rte_eth_dev *dev __rte_unused,
}
static int
-pmd_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+pmd_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- if (filter_type == RTE_ETH_FILTER_GENERIC &&
- filter_op == RTE_ETH_FILTER_GET) {
- *(const void **)arg = &pmd_flow_ops;
- return 0;
- }
-
- return -ENOTSUP;
+ *ops = &pmd_flow_ops;
+ return 0;
}
static int
@@ -287,7 +280,7 @@ static const struct eth_dev_ops pmd_ops = {
.dev_infos_get = pmd_dev_infos_get,
.rx_queue_setup = pmd_rx_queue_setup,
.tx_queue_setup = pmd_tx_queue_setup,
- .filter_ctrl = pmd_filter_ctrl,
+ .flow_ops_get = pmd_flow_ops_get,
.tm_ops_get = pmd_tm_ops_get,
.mtr_ops_get = pmd_mtr_ops_get,
};
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index c36d4bf76e..68baa18523 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1890,7 +1890,7 @@ static const struct eth_dev_ops ops = {
.stats_reset = tap_stats_reset,
.dev_supported_ptypes_get = tap_dev_supported_ptypes_get,
.rss_hash_update = tap_rss_hash_update,
- .filter_ctrl = tap_dev_filter_ctrl,
+ .flow_ops_get = tap_dev_flow_ops_get,
};
static int
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index 1538349e9c..1ee6fb30ab 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -2160,35 +2160,20 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
}
/**
- * Manage filter operations.
+ * Get rte_flow operations.
*
* @param dev
* Pointer to Ethernet device structure.
- * @param filter_type
- * Filter type.
- * @param filter_op
- * Operation to perform.
- * @param arg
+ * @param ops
* Pointer to operation-specific structure.
*
* @return
* 0 on success, negative errno value on failure.
*/
int
-tap_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+tap_dev_flow_ops_get(struct rte_eth_dev *dev __rte_unused,
+ const struct rte_flow_ops **ops)
{
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &tap_flow_ops;
- return 0;
- default:
- TAP_LOG(ERR, "%p: filter type (%d) not supported",
- dev, filter_type);
- }
- return -EINVAL;
+ *ops = &tap_flow_ops;
+ return 0;
}
diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h
index ac60a9ae20..240fbc3dfa 100644
--- a/drivers/net/tap/tap_flow.h
+++ b/drivers/net/tap/tap_flow.h
@@ -46,10 +46,8 @@ enum bpf_fd_idx {
SEC_MAX,
};
-int tap_dev_filter_ctrl(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
+int tap_dev_flow_ops_get(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
int tap_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error);
int tap_flow_implicit_create(struct pmd_internals *pmd,
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 1ab8d2cded..be45ba9177 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -4078,27 +4078,11 @@ txgbe_add_del_ethertype_filter(struct rte_eth_dev *dev,
}
static int
-txgbe_dev_filter_ctrl(__rte_unused struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg)
+txgbe_dev_flow_ops_get(__rte_unused struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops)
{
- int ret = 0;
-
- switch (filter_type) {
- case RTE_ETH_FILTER_GENERIC:
- if (filter_op != RTE_ETH_FILTER_GET)
- return -EINVAL;
- *(const void **)arg = &txgbe_flow_ops;
- break;
- default:
- PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
- filter_type);
- ret = -EINVAL;
- break;
- }
-
- return ret;
+ *ops = &txgbe_flow_ops;
+ return 0;
}
static u8 *
@@ -5208,7 +5192,7 @@ static const struct eth_dev_ops txgbe_eth_dev_ops = {
.reta_query = txgbe_dev_rss_reta_query,
.rss_hash_update = txgbe_dev_rss_hash_update,
.rss_hash_conf_get = txgbe_dev_rss_hash_conf_get,
- .filter_ctrl = txgbe_dev_filter_ctrl,
+ .flow_ops_get = txgbe_dev_flow_ops_get,
.set_mc_addr_list = txgbe_dev_set_mc_addr_list,
.rxq_info_get = txgbe_rxq_info_get,
.txq_info_get = txgbe_txq_info_get,
diff --git a/lib/librte_ethdev/ethdev_driver.h b/lib/librte_ethdev/ethdev_driver.h
index 57fdedaa1a..d9b1a580d7 100644
--- a/lib/librte_ethdev/ethdev_driver.h
+++ b/lib/librte_ethdev/ethdev_driver.h
@@ -465,34 +465,16 @@ typedef int (*eth_get_module_eeprom_t)(struct rte_eth_dev *dev,
struct rte_dev_eeprom_info *info);
/**< @internal Retrieve plugin module eeprom data */
+struct rte_flow_ops;
/**
- * Feature filter types
+ * @internal
+ * Get flow operations.
+ *
+ * If the flow API is not supported for the specified device,
+ * the driver can return NULL.
*/
-enum rte_filter_type {
- RTE_ETH_FILTER_NONE = 0,
- RTE_ETH_FILTER_ETHERTYPE,
- RTE_ETH_FILTER_FLEXIBLE,
- RTE_ETH_FILTER_SYN,
- RTE_ETH_FILTER_NTUPLE,
- RTE_ETH_FILTER_TUNNEL,
- RTE_ETH_FILTER_FDIR,
- RTE_ETH_FILTER_HASH,
- RTE_ETH_FILTER_L2_TUNNEL,
- RTE_ETH_FILTER_GENERIC,
-};
-
-/**
- * Generic operations on filters
- */
-enum rte_filter_op {
- RTE_ETH_FILTER_GET, /**< get flow API ops */
-};
-
-typedef int (*eth_filter_ctrl_t)(struct rte_eth_dev *dev,
- enum rte_filter_type filter_type,
- enum rte_filter_op filter_op,
- void *arg);
-/**< @internal Take operations to assigned filter type on an Ethernet device */
+typedef int (*eth_flow_ops_get_t)(struct rte_eth_dev *dev,
+ const struct rte_flow_ops **ops);
typedef int (*eth_tm_ops_get_t)(struct rte_eth_dev *dev, void *ops);
/**< @internal Get Traffic Management (TM) operations on an Ethernet device */
@@ -880,7 +862,7 @@ struct eth_dev_ops {
eth_get_module_eeprom_t get_module_eeprom;
/** Get plugin module eeprom data. */
- eth_filter_ctrl_t filter_ctrl; /**< common filter control. */
+ eth_flow_ops_get_t flow_ops_get; /**< Get flow operations. */
eth_get_dcb_info get_dcb_info; /** Get DCB information. */
@@ -1377,6 +1359,18 @@ rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,
* Legacy ethdev API used internally by drivers.
*/
+enum rte_filter_type {
+ RTE_ETH_FILTER_NONE = 0,
+ RTE_ETH_FILTER_ETHERTYPE,
+ RTE_ETH_FILTER_FLEXIBLE,
+ RTE_ETH_FILTER_SYN,
+ RTE_ETH_FILTER_NTUPLE,
+ RTE_ETH_FILTER_TUNNEL,
+ RTE_ETH_FILTER_FDIR,
+ RTE_ETH_FILTER_HASH,
+ RTE_ETH_FILTER_L2_TUNNEL,
+};
+
/**
* Define all structures for Ethertype Filter type.
*/
diff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h
index 8a50dbfef9..42652f9cce 100644
--- a/lib/librte_ethdev/rte_eth_ctrl.h
+++ b/lib/librte_ethdev/rte_eth_ctrl.h
@@ -339,7 +339,7 @@ struct rte_eth_fdir_action {
};
/**
- * A structure used to define the flow director filter entry by filter_ctrl API.
+ * A structure used to define the flow director filter entry.
*/
struct rte_eth_fdir_filter {
uint32_t soft_id;
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 241af6c4ca..e07e617d74 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -255,18 +255,21 @@ rte_flow_ops_get(uint16_t port_id, struct rte_flow_error *error)
if (unlikely(!rte_eth_dev_is_valid_port(port_id)))
code = ENODEV;
- else if (unlikely(!dev->dev_ops->filter_ctrl ||
- dev->dev_ops->filter_ctrl(dev,
- RTE_ETH_FILTER_GENERIC,
- RTE_ETH_FILTER_GET,
- &ops) ||
- !ops))
+ else if (unlikely(dev->dev_ops->flow_ops_get == NULL))
+ /* flow API not supported with this driver dev_ops */
code = ENOSYS;
else
- return ops;
- rte_flow_error_set(error, code, RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
- NULL, rte_strerror(code));
- return NULL;
+ code = dev->dev_ops->flow_ops_get(dev, &ops);
+ if (code == 0 && ops == NULL)
+ /* flow API not supported with this device */
+ code = ENOSYS;
+
+ if (code != 0) {
+ rte_flow_error_set(error, code, RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
+ NULL, rte_strerror(code));
+ return NULL;
+ }
+ return ops;
}
/* Check whether a flow rule can be created on a given port. */
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index dabd819d10..da594d9256 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -28,31 +28,6 @@ extern "C" {
/**
* Generic flow operations structure implemented and returned by PMDs.
*
- * To implement this API, PMDs must handle the RTE_ETH_FILTER_GENERIC filter
- * type in their .filter_ctrl callback function (struct eth_dev_ops) as well
- * as the RTE_ETH_FILTER_GET filter operation.
- *
- * If successful, this operation must result in a pointer to a PMD-specific
- * struct rte_flow_ops written to the argument address as described below:
- *
- * \code
- *
- * // PMD filter_ctrl callback
- *
- * static const struct rte_flow_ops pmd_flow_ops = { ... };
- *
- * switch (filter_type) {
- * case RTE_ETH_FILTER_GENERIC:
- * if (filter_op != RTE_ETH_FILTER_GET)
- * return -EINVAL;
- * *(const void **)arg = &pmd_flow_ops;
- * return 0;
- * }
- *
- * \endcode
- *
- * See also rte_flow_ops_get().
- *
* These callback functions are not supposed to be used by applications
* directly, which must rely on the API defined in rte_flow.h.
*
--
2.30.1
^ permalink raw reply [relevance 1%]
* [dpdk-dev] [PATCH v4 0/8] Introduce event vectorization
2021-03-16 20:01 4% ` [dpdk-dev] [PATCH v3 " pbhagavatula
@ 2021-03-19 20:57 4% ` pbhagavatula
` (2 more replies)
0 siblings, 3 replies; 200+ results
From: pbhagavatula @ 2021-03-19 20:57 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~628% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
4.728 mpps avg 4.728 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
34.383 mpps avg 34.383 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v4 Changes:
- Fix missing event vector structure in event structure.(Jay)
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/tools/testeventdev.rst | 28 ++
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 68 ++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 11 +-
lib/librte_eventdev/rte_eventdev.h | 144 +++++++-
lib/librte_eventdev/version.map | 4 +
19 files changed, 1479 insertions(+), 86 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH v2] bus/pci: fix Windows kernel driver categories
2021-03-18 22:07 0% ` Ranjit Menon
@ 2021-03-19 15:24 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-19 15:24 UTC (permalink / raw)
To: dev
Cc: dmitry.kozliuk, stable, Tal Shnaiderman, Narcisa Vasile,
Pallavi Kadam, John Alexander, Ranjit Menon
18/03/2021 23:07, Ranjit Menon:
> On 3/18/2021 3:48 AM, Thomas Monjalon wrote:
> > In Windows probing, the value RTE_PCI_KDRV_NONE was used
> > instead of RTE_PCI_KDRV_UNKNOWN.
> > This value covers the mlx case where the kernel driver is in place,
> > offering a bifurcated mode to the userspace driver.
> > When the kernel driver is listed as unknown,
> > there is no special treatment in DPDK probing, contrary to UIO modes.
> >
> > The value RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
> > instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
> > While adding the new value RTE_PCI_KDRV_NET_UIO
> > (at the end for ABI compatibility),
> > the enum of kernel driver categories is annotated.
> >
> > Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
> > Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> Acked-by: Tal Shnaiderman <talshn@nvidia.com>
> Acked-by: Ranjit Menon <ranjit.menon@intel.com>
Applied
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] eal: mark version parts API as experimental
2021-03-18 12:29 0% ` Bruce Richardson
@ 2021-03-19 15:21 0% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-19 15:21 UTC (permalink / raw)
To: Bruce Richardson; +Cc: dev, stable, David Marchand, Ray Kinsella
18/03/2021 13:29, Bruce Richardson:
> On Wed, Mar 17, 2021 at 04:15:35PM +0100, Thomas Monjalon wrote:
> > Some functions were introduced in DPDK 21.05 to query the version parts
> > (prefix, year, month, minor, suffix, release) at runtime.
> > Per guidelines, these new public functions must be marked with
> > __rte_experimental and ABI versioned as EXPERIMENTAL.
> >
> > Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
> > Cc: stable@dpdk.org
> >
> > Suggested-by: David Marchand <david.marchand@redhat.com>
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Applied
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [RFC 3/5] eal: lcore state FINISHED is not required
@ 2021-03-19 13:42 3% ` Ananyev, Konstantin
2021-03-30 2:54 0% ` Honnappa Nagarahalli
0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2021-03-19 13:42 UTC (permalink / raw)
To: Honnappa Nagarahalli, thomas, Feifei Wang, david.marchand
Cc: hemant.agrawal, Nipun.gupta@nxp.com, jerinj, Van Haaren, Harry,
Richardson, Bruce, dmitry.kozliuk, navasile, dmitrym, Kadam,
Pallavi, dev, Ruifeng Wang, nd, nd
Hi everyone,
> <snip>
>
> > >
> > > > > Subject: [RFC 3/5] eal: lcore state FINISHED is not required
> > > > >
> > > > > FINISHED state seems to be used to indicate that the worker's
> > > > > update of the 'state' is not visible to other threads. There seems
> > > > > to be no requirement to have such a state.
> > > >
> > > > I am not sure "FINISHED" is necessary to be removed, and I propose
> > > > some of my profiles for discussion.
> > > > There are three states for lcore now:
> > > > "WAIT": indicate lcore can start working
> > > > "RUNNING": indicate lcore is working
> > > > "FINISHED": indicate lcore has finished its working and wait to be
> > > > reset
> > > If you look at the definitions of "WAIT" and "FINISHED" states, they look
> > similar, except for "wait to be reset" in "FINISHED" state . The code really does
> > not do anything to reset the lcore. It just changes the state to "WAIT".
I agree that 3 states here seems excessive.
Just 2 (RUNNING/IDLE) seems enough.
Though we can't just remove FINISHED here - it will be an Abi breakage.
Might be deprecate FINISHED now and remove in 21.11.
Also need to decide what rte_eal_wait_lcore() should return in that case?
Always zero, or always status of last function called?
> > >
> > > >
> > > > From the description above, we can find "FINISHED" is different from
> > > > "WAIT", it can shows that lcore has done the work and finished it.
> > > > Thus, if we remove "FINISHED", maybe we will not know whether the
> > > > lcore finishes its work or just doesn't start, because this two state has the
> > same tag "WAIT".
> > > Looking at "eal_thread_loop", the worker thread sets the state to "RUNNING"
> > before sending the ack back to main core. After that it is guaranteed that the
> > worker will run the assigned function. Only case where it will not run the
> > assigned function is when the 'write' syscall fails, in which case it results in a
> > panic.
> >
> > Quick note: it should not panic.
> > We must find a way to return an error
> > without crashing the whole application.
> The syscalls are being used to communicate the status back to the main thread. If they fail, it is not possible to communicate the status.
> May be it is better to panic.
> We could change the implementation using shared variables, but it would require polling the memory. May be the syscalls are being used to
> avoid polling. However, this polling would happen during init time (or similar) for a short duration.
AFAIK we use read and write not for status communication, but sort of sleep/ack point.
Though I agree if we can't do read/write from the system pipe then something is totally wrong,
and probably there is no much point to continue.
> >
> >
> > > > Furthermore, consider such a scenario:
> > > > Core 1 need to monitor Core 2 state, if Core 2 finishes one task,
> > > > Core 1 can start its working.
> > > > However, if there is only one tag "WAIT", Core 1 maybe start its
> > > > work at the wrong time, when Core 2 still does not start its task at state
> > "WAIT".
> > > > This is just my guess, and at present, there is no similar
> > > > application scenario in dpdk.
> > > To be able to do this effectively, core 1 needs to observe the state change
> > from WAIT->RUNNING->FINISHED. This requires that core 1 should be calling
> > rte_eal_remote_launch and rte_eal_wait_lcore functions. It is not possible to
> > observe this state transition from a 3rd core (for ex: a worker might go from
> > RUNNING->FINISHED->WAIT->RUNNING which a 3rd core might not be able to
> > observe).
> > >
> > > >
> > > > On the other hand, if we decide to remove "FINISHED", please
> > > > consider the following files:
> > > > 1. lib/librte_eal/linux/eal_thread.c: line 31
> > > > lib/librte_eal/windows/eal_thread.c: line 22
> > > > lib/librte_eal/freebsd/eal_thread.c: line 31
> > > I have looked at these lines, they do not capture "why" FINISHED state is
> > required.
> > >
> > > 2.
> > > > lib/librte_eal/include/rte_launch.h: line 24, 44, 121, 123, 131 3.
> > > > examples/l2fwd-
> > > > keepalive/main.c: line 510
> > > > rte_eal_wait_lcore(id_core) can be removed. Because the core state
> > > > has been checked as "WAIT", this is a redundant operation
> >
> >
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v2] bus/pci: fix Windows kernel driver categories
2021-03-18 10:48 3% ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2021-03-18 12:00 0% ` Tal Shnaiderman
@ 2021-03-18 22:07 0% ` Ranjit Menon
2021-03-19 15:24 0% ` Thomas Monjalon
1 sibling, 1 reply; 200+ results
From: Ranjit Menon @ 2021-03-18 22:07 UTC (permalink / raw)
To: Thomas Monjalon, dev
Cc: dmitry.kozliuk, stable, Tal Shnaiderman, Narcisa Vasile,
Pallavi Kadam, John Alexander
On 3/18/2021 3:48 AM, Thomas Monjalon wrote:
> In Windows probing, the value RTE_PCI_KDRV_NONE was used
> instead of RTE_PCI_KDRV_UNKNOWN.
> This value covers the mlx case where the kernel driver is in place,
> offering a bifurcated mode to the userspace driver.
> When the kernel driver is listed as unknown,
> there is no special treatment in DPDK probing, contrary to UIO modes.
>
> The value RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
> instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
> While adding the new value RTE_PCI_KDRV_NET_UIO
> (at the end for ABI compatibility),
> the enum of kernel driver categories is annotated.
>
> Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
> Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
> Cc: stable@dpdk.org
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
> v2: improve comments and commit message
> ---
> drivers/bus/pci/rte_bus_pci.h | 13 +++++++------
> drivers/bus/pci/windows/pci.c | 14 +++++++-------
> 2 files changed, 14 insertions(+), 13 deletions(-)
>
Acked-by: Ranjit Menon <ranjit.menon@intel.com>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] bus/pci: fix Windows kernel driver categories
2021-03-18 7:49 3% ` Thomas Monjalon
@ 2021-03-18 22:00 0% ` Ranjit Menon
0 siblings, 0 replies; 200+ results
From: Ranjit Menon @ 2021-03-18 22:00 UTC (permalink / raw)
To: Thomas Monjalon
Cc: dev, dmitry.kozliuk, stable, Tal Shnaiderman, Narcisa Vasile,
John Alexander, Pallavi Kadam, matan, viacheslavo
On 3/18/2021 12:49 AM, Thomas Monjalon wrote:
> 18/03/2021 00:17, Ranjit Menon:
>> Hi Thomas,
>>
>> On 3/16/2021 4:11 PM, Thomas Monjalon wrote:
>>> In Windows probing, the value RTE_PCI_KDRV_NONE was used
>>> instead of RTE_PCI_KDRV_UNKNOWN (mlx case),
>>> and RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
>>> instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
>> Shouldn't the mlx case actually remain RTE_PCI_KDRV_NONE?
>>
>> mlx does not require a UIO-like kernel driver...No? And NONE implies that no kernel driver is used/required.
>> Not sure what is correct here.
> No this is a bifurcated model, meaning kernel and userland
> work together. The PCI device is bound to the kernel driver,
> but the driver is not listed because no special treatment is required.
>
>>> While adding the new value RTE_PCI_KDRV_NET_UIO,
>>> the enum of kernel driver categories is annotated.
>>>
>>> Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
>>> Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>>> ---
>>> drivers/bus/pci/rte_bus_pci.h | 13 +++++++------
>>> drivers/bus/pci/windows/pci.c | 14 +++++++-------
>>> 2 files changed, 14 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
>>> index fdda046515..3d009cc74b 100644
>>> --- a/drivers/bus/pci/rte_bus_pci.h
>>> +++ b/drivers/bus/pci/rte_bus_pci.h
>>> @@ -52,12 +52,13 @@ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver);
>>> struct rte_devargs;
>>>
>>> enum rte_pci_kernel_driver {
>>> - RTE_PCI_KDRV_UNKNOWN = 0,
>>> - RTE_PCI_KDRV_IGB_UIO,
>>> - RTE_PCI_KDRV_VFIO,
>>> - RTE_PCI_KDRV_UIO_GENERIC,
>>> - RTE_PCI_KDRV_NIC_UIO,
>>> - RTE_PCI_KDRV_NONE,
>>> + RTE_PCI_KDRV_UNKNOWN = 0, /* not listed - may be a bifurcated driver */
>>> + RTE_PCI_KDRV_IGB_UIO, /* igb_uio for Linux */
>>> + RTE_PCI_KDRV_VFIO, /* VFIO for Linux */
>>> + RTE_PCI_KDRV_UIO_GENERIC, /* uio_generic for Linux */
>>> + RTE_PCI_KDRV_NIC_UIO, /* nic_uio for FreeBSD */
>>> + RTE_PCI_KDRV_NONE, /* error */
>>> + RTE_PCI_KDRV_NET_UIO, /* NetUIO for Windows */
>>> };
>>>
>> Any chance we can re-order the enums, so that _NONE and _UNKNOWN are at
>> the top?
> No, it would break the ABI.
>
>> This will change the value, and break code where this value was
>> hard-coded. But how likely is that...?
> The problem is when loading the new PCI bus driver with an old device driver.
>
>
>
OK. Thanks for the explanation, Thomas.
ranjit m.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH 1/3] Add EAL threads API
2021-03-18 15:48 5% ` David Marchand
@ 2021-03-18 19:40 4% ` Narcisa Ana Maria Vasile
0 siblings, 0 replies; 200+ results
From: Narcisa Ana Maria Vasile @ 2021-03-18 19:40 UTC (permalink / raw)
To: David Marchand
Cc: dev, Thomas Monjalon, Dmitry Kozlyuk, Khoa To, navasile,
Dmitry Malloy (MESHCHANINOV),
roretzla, Omar Cardona, Bruce Richardson, Pallavi Kadam
On Thu, Mar 18, 2021 at 04:48:49PM +0100, David Marchand wrote:
> On Thu, Mar 18, 2021 at 2:01 AM Narcisa Ana Maria Vasile
> <navasile@linux.microsoft.com> wrote:
> > diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c
> > index 73a055902..5219e783e 100644
> > --- a/lib/librte_eal/common/eal_common_thread.c
>
> rte_thread_*et_affinity() are stable.
> This breaks the ABI (which is bad) and this API change was not
> announced previously.
>
Thank you David, I will revert the renaming of the stable
functions to fix the ABI break.
Given that the original functions only operate on the current thread
(using the _thread_self()), changing their names to
rte_thread_self_*et_affinity() brings more clarity to the purpose of
the functions. We will propose an ABI change to rename
them in the next release (following the proper ABI changes procedures).
> --
> David Marchand
^ permalink raw reply [relevance 4%]
* Re: [dpdk-dev] [PATCH 1/3] Add EAL threads API
@ 2021-03-18 15:48 5% ` David Marchand
2021-03-18 19:40 4% ` Narcisa Ana Maria Vasile
2021-03-23 0:20 2% ` [dpdk-dev] [PATCH v2 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
1 sibling, 1 reply; 200+ results
From: David Marchand @ 2021-03-18 15:48 UTC (permalink / raw)
To: Narcisa Ana Maria Vasile
Cc: dev, Thomas Monjalon, Dmitry Kozlyuk, Khoa To, navasile,
Dmitry Malloy (MESHCHANINOV),
roretzla, Omar Cardona, Bruce Richardson, Pallavi Kadam
On Thu, Mar 18, 2021 at 2:01 AM Narcisa Ana Maria Vasile
<navasile@linux.microsoft.com> wrote:
> diff --git a/lib/librte_eal/common/eal_common_thread.c b/lib/librte_eal/common/eal_common_thread.c
> index 73a055902..5219e783e 100644
> --- a/lib/librte_eal/common/eal_common_thread.c
> +++ b/lib/librte_eal/common/eal_common_thread.c
> @@ -84,7 +84,7 @@ thread_update_affinity(rte_cpuset_t *cpusetp)
> }
>
> int
> -rte_thread_set_affinity(rte_cpuset_t *cpusetp)
> +rte_thread_self_set_affinity(rte_cpuset_t *cpusetp)
> {
> if (pthread_setaffinity_np(pthread_self(), sizeof(rte_cpuset_t),
> cpusetp) != 0) {
[snip]
> diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h
> index e640ea185..66b112bc4 100644
> --- a/lib/librte_eal/include/rte_thread.h
> +++ b/lib/librte_eal/include/rte_thread.h
[snip]
> +/**
> + * Set the affinity of thread 'thread_id' to the cpu set
> + * specified by 'cpuset'.
> + *
> + * @param thread_id
> + * Id of the thread for which to set the affinity.
> + *
> + * @param cpuset_size
> + *
> + * @param cpuset
> + * Pointer to CPU affinity to set.
> + *
> + * @return
> + * On success, return 0.
> + * On failure, return nonzero.
> + */
> +__rte_experimental
> +int rte_thread_set_affinity(rte_thread_t thread_id, size_t cpuset_size,
> + const rte_cpuset_t *cpuset);
> +
[snip]
> @@ -34,7 +353,7 @@ typedef struct eal_tls_key *rte_tls_key;
> * @return
> * On success, return 0; otherwise return -1;
> */
> -int rte_thread_set_affinity(rte_cpuset_t *cpusetp);
> +int rte_thread_self_set_affinity(rte_cpuset_t *cpusetp);
>
> /**
> * Get core affinity of the current thread.
rte_thread_*et_affinity() are stable.
This breaks the ABI (which is bad) and this API change was not
announced previously.
The ABI check will catch it for you if you stop at this patch (the
patch 3 actually makes the check go silent because of a wrong
version.map update with duplicate symbols).
$ DPDK_ABI_REF_VERSION=v21.02 ./devtools/test-meson-builds.sh
...
[2502/2502] Linking target drivers/librte_event_octeontx2.so.21.2
Error: ABI issue reported for 'abidiff --suppr
/home/dmarchan/dpdk/devtools/../devtools/libabigail.abignore
--no-added-syms --headers-dir1
/home/dmarchan/abi/v21.02/build-gcc-shared/usr/local/include
--headers-dir2 /home/dmarchan/builds/build-gcc-shared/install/usr/local/include
/home/dmarchan/abi/v21.02/build-gcc-shared/dump/librte_eal.dump
/home/dmarchan/builds/build-gcc-shared/install/dump/librte_eal.dump'
ABIDIFF_ABI_CHANGE, this change requires a review (abidiff flagged
this as a potential issue).
ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this change breaks the ABI.
$ abidiff --suppr
/home/dmarchan/dpdk/devtools/../devtools/libabigail.abignore
--no-added-syms --headers-dir1
/home/dmarchan/abi/v21.02/build-gcc-shared/usr/local/include
--headers-dir2 /home/dmarchan/builds/build-gcc-shared/install/usr/local/include
/home/dmarchan/abi/v21.02/build-gcc-shared/dump/librte_eal.dump
/home/dmarchan/builds/build-gcc-shared/install/dump/librte_eal.dump
Functions changes summary: 2 Removed, 0 Changed, 0 Added (6 filtered
out) functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Variable symbols changes summary: 0 Removed, 0 Added variable symbol
not referenced by debug info
2 Removed functions:
[D] 'function void rte_thread_get_affinity(rte_cpuset_t*)'
{rte_thread_get_affinity@@DPDK_21}
[D] 'function int rte_thread_set_affinity(rte_cpuset_t*)'
{rte_thread_set_affinity@@DPDK_21}
--
David Marchand
^ permalink raw reply [relevance 5%]
* Re: [dpdk-dev] [PATCH] eal: fix version macro
2021-03-18 14:41 0% ` Thomas Monjalon
@ 2021-03-18 15:45 0% ` Bruce Richardson
0 siblings, 0 replies; 200+ results
From: Bruce Richardson @ 2021-03-18 15:45 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: David Marchand, dev, dpdk stable
On Thu, Mar 18, 2021 at 03:41:35PM +0100, Thomas Monjalon wrote:
> 18/03/2021 13:28, Bruce Richardson:
> > On Wed, Mar 17, 2021 at 11:01:25AM +0100, Thomas Monjalon wrote:
> > > 17/03/2021 10:48, David Marchand:
> > > > On Wed, Mar 17, 2021 at 10:31 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > > > >
> > > > > The macro RTE_VERSION is broken since updated with function calls.
> > > > > It is a build-time version number, and must be built with macros.
> > > > > For a run-time version number, there is the function rte_version().
> > > > >
> > > > > Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
> > > > > Cc: stable@dpdk.org
> > > > >
> > > > > Reported-by: David Marchand <david.marchand@redhat.com>
> > > > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > > > > ---
> > > > > lib/librte_eal/include/rte_version.h | 8 ++++----
> > > > > 1 file changed, 4 insertions(+), 4 deletions(-)
> > > > >
> > > > > diff --git a/lib/librte_eal/include/rte_version.h b/lib/librte_eal/include/rte_version.h
> > > > > index 2f3f727b46..736c5703be 100644
> > > > > --- a/lib/librte_eal/include/rte_version.h
> > > > > +++ b/lib/librte_eal/include/rte_version.h
> > > > > @@ -28,10 +28,10 @@ extern "C" {
> > > > > * All version numbers in one to compare with RTE_VERSION_NUM()
> > > > > */
> > > > > #define RTE_VERSION RTE_VERSION_NUM( \
> > > > > - rte_version_year(), \
> > > > > - rte_version_month(), \
> > > > > - rte_version_minor(), \
> > > > > - rte_version_release())
> > > > > + RTE_VER_YEAR, \
> > > > > + RTE_VER_MONTH, \
> > > > > + RTE_VER_MINOR, \
> > > > > + RTE_VER_RELEASE)
> > > > >
> > > > > /**
> > > > > * Function to return DPDK version prefix string
> > > >
> > > > The original patch wanted to fix rte_version() at runtime.
> > > > I don't see the need to keep the rte_version_XXX exports now that
> > > > RTE_VERSION is reverted.
> > >
> > > I think it may help to query the version numbers at runtime,
> > > in "if" condition. Is there another way I'm missing?
> > > We may argue that the runtime version number should not be used
> > > to decide how to behave in an application.
> > >
> > I would also tend toward keeping them, for the same reason that runtime is
> > definitely to be preferred over build time, and they are not like to be
> > much of a maintenance burden.
> >
> > Also, next time we have an ABI break, I wonder if the existing macros
> > should be renamed to have an RTE_BUILD_VER_ prefix, to make it clear that
> > it's the build version only that is being reported rather than the version
> > actually being used. Similarly the functions could be renamed to have
> > rte_runtime_ prefix, ensuring that in all cases the user is clear whether
> > they are getting the build version or the runtime version.
>
> I am fine with such rename,
> but that's already quite clear that a macro is at build time,
> and a function is usually evaluated at runtime.
>
If we take the existing rte_version function, without checking the source
code, one has no way of checking if that is resolved at runtime (as it is
now) or at compile-time (as it was). However, if we assume that that is a
bug and that all such functions should be run-time operations, then
there is no difficulty.
/Bruce
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] eal: fix version macro
2021-03-18 12:28 3% ` Bruce Richardson
@ 2021-03-18 14:41 0% ` Thomas Monjalon
2021-03-18 15:45 0% ` Bruce Richardson
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-18 14:41 UTC (permalink / raw)
To: Bruce Richardson; +Cc: David Marchand, dev, dpdk stable
18/03/2021 13:28, Bruce Richardson:
> On Wed, Mar 17, 2021 at 11:01:25AM +0100, Thomas Monjalon wrote:
> > 17/03/2021 10:48, David Marchand:
> > > On Wed, Mar 17, 2021 at 10:31 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > > >
> > > > The macro RTE_VERSION is broken since updated with function calls.
> > > > It is a build-time version number, and must be built with macros.
> > > > For a run-time version number, there is the function rte_version().
> > > >
> > > > Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
> > > > Cc: stable@dpdk.org
> > > >
> > > > Reported-by: David Marchand <david.marchand@redhat.com>
> > > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > > > ---
> > > > lib/librte_eal/include/rte_version.h | 8 ++++----
> > > > 1 file changed, 4 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/lib/librte_eal/include/rte_version.h b/lib/librte_eal/include/rte_version.h
> > > > index 2f3f727b46..736c5703be 100644
> > > > --- a/lib/librte_eal/include/rte_version.h
> > > > +++ b/lib/librte_eal/include/rte_version.h
> > > > @@ -28,10 +28,10 @@ extern "C" {
> > > > * All version numbers in one to compare with RTE_VERSION_NUM()
> > > > */
> > > > #define RTE_VERSION RTE_VERSION_NUM( \
> > > > - rte_version_year(), \
> > > > - rte_version_month(), \
> > > > - rte_version_minor(), \
> > > > - rte_version_release())
> > > > + RTE_VER_YEAR, \
> > > > + RTE_VER_MONTH, \
> > > > + RTE_VER_MINOR, \
> > > > + RTE_VER_RELEASE)
> > > >
> > > > /**
> > > > * Function to return DPDK version prefix string
> > >
> > > The original patch wanted to fix rte_version() at runtime.
> > > I don't see the need to keep the rte_version_XXX exports now that
> > > RTE_VERSION is reverted.
> >
> > I think it may help to query the version numbers at runtime,
> > in "if" condition. Is there another way I'm missing?
> > We may argue that the runtime version number should not be used
> > to decide how to behave in an application.
> >
> I would also tend toward keeping them, for the same reason that runtime is
> definitely to be preferred over build time, and they are not like to be
> much of a maintenance burden.
>
> Also, next time we have an ABI break, I wonder if the existing macros
> should be renamed to have an RTE_BUILD_VER_ prefix, to make it clear that
> it's the build version only that is being reported rather than the version
> actually being used. Similarly the functions could be renamed to have
> rte_runtime_ prefix, ensuring that in all cases the user is clear whether
> they are getting the build version or the runtime version.
I am fine with such rename,
but that's already quite clear that a macro is at build time,
and a function is usually evaluated at runtime.
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] eal: mark version parts API as experimental
2021-03-17 15:15 3% [dpdk-dev] [PATCH] eal: mark version parts API as experimental Thomas Monjalon
@ 2021-03-18 12:29 0% ` Bruce Richardson
2021-03-19 15:21 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Bruce Richardson @ 2021-03-18 12:29 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev, stable, David Marchand, Ray Kinsella, Neil Horman
On Wed, Mar 17, 2021 at 04:15:35PM +0100, Thomas Monjalon wrote:
> Some functions were introduced in DPDK 21.05 to query the version parts
> (prefix, year, month, minor, suffix, release) at runtime.
> Per guidelines, these new public functions must be marked with
> __rte_experimental and ABI versioned as EXPERIMENTAL.
>
> Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
> Cc: stable@dpdk.org
>
> Suggested-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [relevance 0%]
* Re: [dpdk-dev] [PATCH] eal: fix version macro
@ 2021-03-18 12:28 3% ` Bruce Richardson
2021-03-18 14:41 0% ` Thomas Monjalon
0 siblings, 1 reply; 200+ results
From: Bruce Richardson @ 2021-03-18 12:28 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: David Marchand, dev, dpdk stable
On Wed, Mar 17, 2021 at 11:01:25AM +0100, Thomas Monjalon wrote:
> 17/03/2021 10:48, David Marchand:
> > On Wed, Mar 17, 2021 at 10:31 AM Thomas Monjalon <thomas@monjalon.net> wrote:
> > >
> > > The macro RTE_VERSION is broken since updated with function calls.
> > > It is a build-time version number, and must be built with macros.
> > > For a run-time version number, there is the function rte_version().
> > >
> > > Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
> > > Cc: stable@dpdk.org
> > >
> > > Reported-by: David Marchand <david.marchand@redhat.com>
> > > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > > ---
> > > lib/librte_eal/include/rte_version.h | 8 ++++----
> > > 1 file changed, 4 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/lib/librte_eal/include/rte_version.h b/lib/librte_eal/include/rte_version.h
> > > index 2f3f727b46..736c5703be 100644
> > > --- a/lib/librte_eal/include/rte_version.h
> > > +++ b/lib/librte_eal/include/rte_version.h
> > > @@ -28,10 +28,10 @@ extern "C" {
> > > * All version numbers in one to compare with RTE_VERSION_NUM()
> > > */
> > > #define RTE_VERSION RTE_VERSION_NUM( \
> > > - rte_version_year(), \
> > > - rte_version_month(), \
> > > - rte_version_minor(), \
> > > - rte_version_release())
> > > + RTE_VER_YEAR, \
> > > + RTE_VER_MONTH, \
> > > + RTE_VER_MINOR, \
> > > + RTE_VER_RELEASE)
> > >
> > > /**
> > > * Function to return DPDK version prefix string
> >
> > The original patch wanted to fix rte_version() at runtime.
> > I don't see the need to keep the rte_version_XXX exports now that
> > RTE_VERSION is reverted.
>
> I think it may help to query the version numbers at runtime,
> in "if" condition. Is there another way I'm missing?
> We may argue that the runtime version number should not be used
> to decide how to behave in an application.
>
I would also tend toward keeping them, for the same reason that runtime is
definitely to be preferred over build time, and they are not like to be
much of a maintenance burden.
Also, next time we have an ABI break, I wonder if the existing macros
should be renamed to have an RTE_BUILD_VER_ prefix, to make it clear that
it's the build version only that is being reported rather than the version
actually being used. Similarly the functions could be renamed to have
rte_runtime_ prefix, ensuring that in all cases the user is clear whether
they are getting the build version or the runtime version.
/Bruce
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information
@ 2021-03-18 12:25 13% Lijun Ou
2021-03-22 9:22 3% ` Ferruh Yigit
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
0 siblings, 2 replies; 200+ results
From: Lijun Ou @ 2021-03-18 12:25 UTC (permalink / raw)
To: thomas, ferruh.yigit; +Cc: dev, linuxarm
Currently, upper-layer application could get queue state only
through pointers such as dev->data->tx_queue_state[queue_id],
this is not the recommended way to access it. So this patch
add get queue state when call rte_eth_rx_queue_info_get and
rte_eth_tx_queue_info_get API.
Note: The hairpin queue is not supported with above
rte_eth_*x_queue_info_get, so the queue state could be
RTE_ETH_QUEUE_STATE_STARTED or RTE_ETH_QUEUE_STATE_STOPPED.
Note: After add queue_state field, the 'struct rte_eth_rxq_info' size
remains 128B, and the 'struct rte_eth_txq_info' size remains 64B, so
it could be ABI compatible.
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
Signed-off-by: Lijun Ou <oulijun@huawei.com>
---
doc/guides/rel_notes/release_21_05.rst | 6 ++++++
lib/librte_ethdev/rte_ethdev.c | 3 +++
lib/librte_ethdev/rte_ethdev.h | 4 ++++
3 files changed, 13 insertions(+)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 43063e3..165b5f7 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -156,6 +156,12 @@ ABI Changes
* No ABI change that would break compatibility with 20.11.
+* Added new field ``queue_state`` to ``rte_eth_rxq_info`` structure
+ to provide indicated rxq queue state.
+
+* Added new field ``queue_state`` to ``rte_eth_txq_info`` structure
+ to provide indicated txq queue state.
+
Known Issues
------------
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 3059aa5..fbd10b2 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -5042,6 +5042,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->rxq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->rx_queue_state[queue_id];
+
return 0;
}
@@ -5082,6 +5084,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
memset(qinfo, 0, sizeof(*qinfo));
dev->dev_ops->txq_info_get(dev, queue_id, qinfo);
+ qinfo->queue_state = dev->data->tx_queue_state[queue_id];
return 0;
}
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index efda313..3b83c5a 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1591,6 +1591,8 @@ struct rte_eth_rxq_info {
uint8_t scattered_rx; /**< scattered packets RX supported. */
uint16_t nb_desc; /**< configured number of RXDs. */
uint16_t rx_buf_size; /**< hardware receive buffer size. */
+ /**< Queues state: STARTED(1) / STOPPED(0). */
+ uint8_t queue_state;
} __rte_cache_min_aligned;
/**
@@ -1600,6 +1602,8 @@ struct rte_eth_rxq_info {
struct rte_eth_txq_info {
struct rte_eth_txconf conf; /**< queue config parameters. */
uint16_t nb_desc; /**< configured number of TXDs. */
+ /**< Queues state: STARTED(1) / STOPPED(0). */
+ uint8_t queue_state;
} __rte_cache_min_aligned;
/* Generic Burst mode flag definition, values can be ORed. */
--
2.7.4
^ permalink raw reply [relevance 13%]
* Re: [dpdk-dev] [PATCH v2] bus/pci: fix Windows kernel driver categories
2021-03-18 10:48 3% ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
@ 2021-03-18 12:00 0% ` Tal Shnaiderman
2021-03-18 22:07 0% ` Ranjit Menon
1 sibling, 0 replies; 200+ results
From: Tal Shnaiderman @ 2021-03-18 12:00 UTC (permalink / raw)
To: NBU-Contact-Thomas Monjalon, dev
Cc: dmitry.kozliuk, stable, Ranjit Menon, Narcisa Vasile,
Pallavi Kadam, John Alexander
> Subject: [PATCH v2] bus/pci: fix Windows kernel driver categories
>
> In Windows probing, the value RTE_PCI_KDRV_NONE was used instead of
> RTE_PCI_KDRV_UNKNOWN.
> This value covers the mlx case where the kernel driver is in place, offering a
> bifurcated mode to the userspace driver.
> When the kernel driver is listed as unknown, there is no special treatment in
> DPDK probing, contrary to UIO modes.
>
> The value RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used instead of having
> a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
> While adding the new value RTE_PCI_KDRV_NET_UIO (at the end for ABI
> compatibility), the enum of kernel driver categories is annotated.
>
> Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
> Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
> Cc: stable@dpdk.org
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
> v2: improve comments and commit message
> ---
> drivers/bus/pci/rte_bus_pci.h | 13 +++++++------
> drivers/bus/pci/windows/pci.c | 14 +++++++-------
> 2 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
> index fdda046515..876abddefb 100644
> --- a/drivers/bus/pci/rte_bus_pci.h
> +++ b/drivers/bus/pci/rte_bus_pci.h
> @@ -52,12 +52,13 @@ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver);
> struct rte_devargs;
>
> enum rte_pci_kernel_driver {
> - RTE_PCI_KDRV_UNKNOWN = 0,
> - RTE_PCI_KDRV_IGB_UIO,
> - RTE_PCI_KDRV_VFIO,
> - RTE_PCI_KDRV_UIO_GENERIC,
> - RTE_PCI_KDRV_NIC_UIO,
> - RTE_PCI_KDRV_NONE,
> + RTE_PCI_KDRV_UNKNOWN = 0, /* may be misc UIO or bifurcated
> driver */
> + RTE_PCI_KDRV_IGB_UIO, /* igb_uio for Linux */
> + RTE_PCI_KDRV_VFIO, /* VFIO for Linux */
> + RTE_PCI_KDRV_UIO_GENERIC, /* uio_pci_generic for Linux */
> + RTE_PCI_KDRV_NIC_UIO, /* nic_uio for FreeBSD */
> + RTE_PCI_KDRV_NONE, /* no attached driver */
> + RTE_PCI_KDRV_NET_UIO, /* NetUIO for Windows */
> };
>
> /**
> diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
> index 8f906097f4..d39a7748b8 100644
> --- a/drivers/bus/pci/windows/pci.c
> +++ b/drivers/bus/pci/windows/pci.c
> @@ -38,7 +38,7 @@ rte_pci_map_device(struct rte_pci_device *dev)
> * Devices that are bound to netuio are mapped at
> * the bus probing stage.
> */
> - if (dev->kdrv == RTE_PCI_KDRV_NIC_UIO)
> + if (dev->kdrv == RTE_PCI_KDRV_NET_UIO)
> return 0;
> else
> return -1;
> @@ -207,14 +207,14 @@ get_device_resource_info(HDEVINFO dev_info,
> int ret;
>
> switch (dev->kdrv) {
> - case RTE_PCI_KDRV_NONE:
> - /* mem_resource - Unneeded for RTE_PCI_KDRV_NONE */
> + case RTE_PCI_KDRV_UNKNOWN:
> + /* bifurcated driver case - mem_resource is unneeded */
> dev->mem_resource[0].phys_addr = 0;
> dev->mem_resource[0].len = 0;
> dev->mem_resource[0].addr = NULL;
> break;
> - case RTE_PCI_KDRV_NIC_UIO:
> - /* get device info from netuio kernel driver */
> + case RTE_PCI_KDRV_NET_UIO:
> + /* get device info from NetUIO kernel driver */
> ret = get_netuio_device_info(dev_info, dev_info_data,
> dev);
> if (ret != 0) {
> RTE_LOG(DEBUG, EAL,
> @@ -323,9 +323,9 @@ set_kernel_driver_type(PSP_DEVINFO_DATA
> device_info_data, {
> /* set kernel driver type based on device class */
> if (IsEqualGUID(&(device_info_data->ClassGuid),
> &GUID_DEVCLASS_NETUIO))
> - dev->kdrv = RTE_PCI_KDRV_NIC_UIO;
> + dev->kdrv = RTE_PCI_KDRV_NET_UIO;
> else
> - dev->kdrv = RTE_PCI_KDRV_NONE;
> + dev->kdrv = RTE_PCI_KDRV_UNKNOWN;
> }
>
> static int
> --
> 2.30.1
Acked-by: Tal Shnaiderman <talshn@nvidia.com>
^ permalink raw reply [relevance 0%]
* [dpdk-dev] [PATCH v2] bus/pci: fix Windows kernel driver categories
@ 2021-03-18 10:48 3% ` Thomas Monjalon
2021-03-18 12:00 0% ` Tal Shnaiderman
2021-03-18 22:07 0% ` Ranjit Menon
1 sibling, 2 replies; 200+ results
From: Thomas Monjalon @ 2021-03-18 10:48 UTC (permalink / raw)
To: dev
Cc: dmitry.kozliuk, stable, Tal Shnaiderman, Ranjit Menon,
Narcisa Vasile, Pallavi Kadam, John Alexander
In Windows probing, the value RTE_PCI_KDRV_NONE was used
instead of RTE_PCI_KDRV_UNKNOWN.
This value covers the mlx case where the kernel driver is in place,
offering a bifurcated mode to the userspace driver.
When the kernel driver is listed as unknown,
there is no special treatment in DPDK probing, contrary to UIO modes.
The value RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
While adding the new value RTE_PCI_KDRV_NET_UIO
(at the end for ABI compatibility),
the enum of kernel driver categories is annotated.
Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
Cc: stable@dpdk.org
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
v2: improve comments and commit message
---
drivers/bus/pci/rte_bus_pci.h | 13 +++++++------
drivers/bus/pci/windows/pci.c | 14 +++++++-------
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
index fdda046515..876abddefb 100644
--- a/drivers/bus/pci/rte_bus_pci.h
+++ b/drivers/bus/pci/rte_bus_pci.h
@@ -52,12 +52,13 @@ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver);
struct rte_devargs;
enum rte_pci_kernel_driver {
- RTE_PCI_KDRV_UNKNOWN = 0,
- RTE_PCI_KDRV_IGB_UIO,
- RTE_PCI_KDRV_VFIO,
- RTE_PCI_KDRV_UIO_GENERIC,
- RTE_PCI_KDRV_NIC_UIO,
- RTE_PCI_KDRV_NONE,
+ RTE_PCI_KDRV_UNKNOWN = 0, /* may be misc UIO or bifurcated driver */
+ RTE_PCI_KDRV_IGB_UIO, /* igb_uio for Linux */
+ RTE_PCI_KDRV_VFIO, /* VFIO for Linux */
+ RTE_PCI_KDRV_UIO_GENERIC, /* uio_pci_generic for Linux */
+ RTE_PCI_KDRV_NIC_UIO, /* nic_uio for FreeBSD */
+ RTE_PCI_KDRV_NONE, /* no attached driver */
+ RTE_PCI_KDRV_NET_UIO, /* NetUIO for Windows */
};
/**
diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
index 8f906097f4..d39a7748b8 100644
--- a/drivers/bus/pci/windows/pci.c
+++ b/drivers/bus/pci/windows/pci.c
@@ -38,7 +38,7 @@ rte_pci_map_device(struct rte_pci_device *dev)
* Devices that are bound to netuio are mapped at
* the bus probing stage.
*/
- if (dev->kdrv == RTE_PCI_KDRV_NIC_UIO)
+ if (dev->kdrv == RTE_PCI_KDRV_NET_UIO)
return 0;
else
return -1;
@@ -207,14 +207,14 @@ get_device_resource_info(HDEVINFO dev_info,
int ret;
switch (dev->kdrv) {
- case RTE_PCI_KDRV_NONE:
- /* mem_resource - Unneeded for RTE_PCI_KDRV_NONE */
+ case RTE_PCI_KDRV_UNKNOWN:
+ /* bifurcated driver case - mem_resource is unneeded */
dev->mem_resource[0].phys_addr = 0;
dev->mem_resource[0].len = 0;
dev->mem_resource[0].addr = NULL;
break;
- case RTE_PCI_KDRV_NIC_UIO:
- /* get device info from netuio kernel driver */
+ case RTE_PCI_KDRV_NET_UIO:
+ /* get device info from NetUIO kernel driver */
ret = get_netuio_device_info(dev_info, dev_info_data, dev);
if (ret != 0) {
RTE_LOG(DEBUG, EAL,
@@ -323,9 +323,9 @@ set_kernel_driver_type(PSP_DEVINFO_DATA device_info_data,
{
/* set kernel driver type based on device class */
if (IsEqualGUID(&(device_info_data->ClassGuid), &GUID_DEVCLASS_NETUIO))
- dev->kdrv = RTE_PCI_KDRV_NIC_UIO;
+ dev->kdrv = RTE_PCI_KDRV_NET_UIO;
else
- dev->kdrv = RTE_PCI_KDRV_NONE;
+ dev->kdrv = RTE_PCI_KDRV_UNKNOWN;
}
static int
--
2.30.1
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH v2 2/5] devargs: refactor scratch buffer storage
@ 2021-03-18 9:14 3% ` Thomas Monjalon
0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2021-03-18 9:14 UTC (permalink / raw)
To: Xueming Li
Cc: Ferruh Yigit, Andrew Rybchenko, Olivier Matz, dev,
Viacheslav Ovsiienko, Asaf Penso, david.marchand,
bruce.richardson
18/01/2021 16:16, Xueming Li:
> In current design, legacy parser rte_devargs_parse() saved scratch
> buffer to devargs.args while new parser rte_devargs_layers_parse() saved
> to devargs.data. Code using devargs had to know the difference and
> cleaned up memory accordingly - error prone.
>
> This patch unifies data the dedicate scratch buffer, introduces
> rte_devargs_free() function to wrap the memory memory clean up.
>
> Signed-off-by: Xueming Li <xuemingl@nvidia.com>
> ---
> --- a/lib/librte_eal/include/rte_devargs.h
> +++ b/lib/librte_eal/include/rte_devargs.h
> @@ -60,16 +60,16 @@ struct rte_devargs {
> /** Name of the device. */
> char name[RTE_DEV_NAME_MAX_LEN];
> RTE_STD_C11
> - union {
> - /** Arguments string as given by user or "" for no argument. */
> - char *args;
> + union { /**< driver-related part of device string. */
> + const char *args; /**< legacy name. */
> const char *drv_str;
> };
> struct rte_bus *bus; /**< bus handle. */
> struct rte_class *cls; /**< class handle. */
> const char *bus_str; /**< bus-related part of device string. */
> const char *cls_str; /**< class-related part of device string. */
> - const char *data; /**< Device string storage. */
> + char *data; /**< Scratch buffer. */
> + const char *src; /**< Arguments given by user. */
Adding a field changes the size of the struct, which is an ABI break.
We need to plan this change for DPDK 21.11.
Let's think what can be done in the meantime.
^ permalink raw reply [relevance 3%]
* Re: [dpdk-dev] [PATCH] bus/pci: fix Windows kernel driver categories
@ 2021-03-18 7:49 3% ` Thomas Monjalon
2021-03-18 22:00 0% ` Ranjit Menon
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-18 7:49 UTC (permalink / raw)
To: Ranjit Menon
Cc: dev, dmitry.kozliuk, stable, Tal Shnaiderman, Narcisa Vasile,
John Alexander, Pallavi Kadam, matan, viacheslavo
18/03/2021 00:17, Ranjit Menon:
> Hi Thomas,
>
> On 3/16/2021 4:11 PM, Thomas Monjalon wrote:
> > In Windows probing, the value RTE_PCI_KDRV_NONE was used
> > instead of RTE_PCI_KDRV_UNKNOWN (mlx case),
> > and RTE_PCI_KDRV_NIC_UIO (FreeBSD) was re-used
> > instead of having a new RTE_PCI_KDRV_NET_UIO for Windows NetUIO.
> Shouldn't the mlx case actually remain RTE_PCI_KDRV_NONE?
>
> mlx does not require a UIO-like kernel driver...No? And NONE implies that no kernel driver is used/required.
> Not sure what is correct here.
No this is a bifurcated model, meaning kernel and userland
work together. The PCI device is bound to the kernel driver,
but the driver is not listed because no special treatment is required.
> > While adding the new value RTE_PCI_KDRV_NET_UIO,
> > the enum of kernel driver categories is annotated.
> >
> > Fixes: b762221ac24f ("bus/pci: support Windows with bifurcated drivers")
> > Fixes: c76ec01b4591 ("bus/pci: support netuio on Windows")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> > drivers/bus/pci/rte_bus_pci.h | 13 +++++++------
> > drivers/bus/pci/windows/pci.c | 14 +++++++-------
> > 2 files changed, 14 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h
> > index fdda046515..3d009cc74b 100644
> > --- a/drivers/bus/pci/rte_bus_pci.h
> > +++ b/drivers/bus/pci/rte_bus_pci.h
> > @@ -52,12 +52,13 @@ TAILQ_HEAD(rte_pci_driver_list, rte_pci_driver);
> > struct rte_devargs;
> >
> > enum rte_pci_kernel_driver {
> > - RTE_PCI_KDRV_UNKNOWN = 0,
> > - RTE_PCI_KDRV_IGB_UIO,
> > - RTE_PCI_KDRV_VFIO,
> > - RTE_PCI_KDRV_UIO_GENERIC,
> > - RTE_PCI_KDRV_NIC_UIO,
> > - RTE_PCI_KDRV_NONE,
> > + RTE_PCI_KDRV_UNKNOWN = 0, /* not listed - may be a bifurcated driver */
> > + RTE_PCI_KDRV_IGB_UIO, /* igb_uio for Linux */
> > + RTE_PCI_KDRV_VFIO, /* VFIO for Linux */
> > + RTE_PCI_KDRV_UIO_GENERIC, /* uio_generic for Linux */
> > + RTE_PCI_KDRV_NIC_UIO, /* nic_uio for FreeBSD */
> > + RTE_PCI_KDRV_NONE, /* error */
> > + RTE_PCI_KDRV_NET_UIO, /* NetUIO for Windows */
> > };
> >
>
> Any chance we can re-order the enums, so that _NONE and _UNKNOWN are at
> the top?
No, it would break the ABI.
> This will change the value, and break code where this value was
> hard-coded. But how likely is that...?
The problem is when loading the new PCI bus driver with an old device driver.
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH] eal: mark version parts API as experimental
@ 2021-03-17 15:15 3% Thomas Monjalon
2021-03-18 12:29 0% ` Bruce Richardson
0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2021-03-17 15:15 UTC (permalink / raw)
To: dev; +Cc: stable, David Marchand, Ray Kinsella, Neil Horman, Bruce Richardson
Some functions were introduced in DPDK 21.05 to query the version parts
(prefix, year, month, minor, suffix, release) at runtime.
Per guidelines, these new public functions must be marked with
__rte_experimental and ABI versioned as EXPERIMENTAL.
Fixes: 5b637a848195 ("eal: fix querying DPDK version at runtime")
Cc: stable@dpdk.org
Suggested-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
lib/librte_eal/include/rte_version.h | 7 +++++++
lib/librte_eal/version.map | 14 ++++++++------
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/lib/librte_eal/include/rte_version.h b/lib/librte_eal/include/rte_version.h
index 736c5703be..b06a62e7a2 100644
--- a/lib/librte_eal/include/rte_version.h
+++ b/lib/librte_eal/include/rte_version.h
@@ -18,6 +18,7 @@ extern "C" {
#include <string.h>
#include <stdio.h>
#include <rte_common.h>
+#include <rte_compat.h>
/**
* Macro to compute a version number usable for comparisons
@@ -36,31 +37,37 @@ extern "C" {
/**
* Function to return DPDK version prefix string
*/
+__rte_experimental
const char *rte_version_prefix(void);
/**
* Function to return DPDK version year
*/
+__rte_experimental
unsigned int rte_version_year(void);
/**
* Function to return DPDK version month
*/
+__rte_experimental
unsigned int rte_version_month(void);
/**
* Function to return DPDK minor version number
*/
+__rte_experimental
unsigned int rte_version_minor(void);
/**
* Function to return DPDK version suffix for any release candidates
*/
+__rte_experimental
const char *rte_version_suffix(void);
/**
* Function to return DPDK version release candidate value
*/
+__rte_experimental
unsigned int rte_version_release(void);
/**
diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map
index 756c60ed1d..48a2b55d57 100644
--- a/lib/librte_eal/version.map
+++ b/lib/librte_eal/version.map
@@ -200,12 +200,6 @@ DPDK_21 {
rte_uuid_parse;
rte_uuid_unparse;
rte_version;
- rte_version_minor;
- rte_version_month;
- rte_version_prefix;
- rte_version_release;
- rte_version_suffix;
- rte_version_year;
rte_vfio_clear_group;
rte_vfio_container_create;
rte_vfio_container_destroy;
@@ -419,6 +413,14 @@ EXPERIMENTAL {
rte_thread_tls_key_delete;
rte_thread_tls_value_get;
rte_thread_tls_value_set;
+
+ # added in 21.05
+ rte_version_minor;
+ rte_version_month;
+ rte_version_prefix;
+ rte_version_release;
+ rte_version_suffix;
+ rte_version_year;
};
INTERNAL {
--
2.30.1
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH v3 0/8] Introduce event vectorization
2021-03-16 15:48 4% ` [dpdk-dev] [PATCH v2 0/8] " pbhagavatula
@ 2021-03-16 20:01 4% ` pbhagavatula
2021-03-19 20:57 4% ` [dpdk-dev] [PATCH v4 " pbhagavatula
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-16 20:01 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~628% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
4.728 mpps avg 4.728 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
34.383 mpps avg 34.383 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v3 Changes:
- Fix unintended formatting changes.
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 +++++++++++++++--
app/test-eventdev/test_pipeline_common.c | 105 +++++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++++++--
.../prog_guide/event_ethernet_rx_adapter.rst | 38 +++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/tools/testeventdev.rst | 28 ++
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 305 ++++++++++++++++-
.../rte_event_eth_rx_adapter.h | 68 ++++
.../rte_event_eth_tx_adapter.c | 66 +++-
lib/librte_eventdev/rte_eventdev.c | 11 +-
lib/librte_eventdev/rte_eventdev.h | 142 +++++++-
lib/librte_eventdev/version.map | 4 +
19 files changed, 1477 insertions(+), 86 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v2 0/8] Introduce event vectorization
@ 2021-03-16 15:48 4% ` pbhagavatula
2021-03-16 20:01 4% ` [dpdk-dev] [PATCH v3 " pbhagavatula
0 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2021-03-16 15:48 UTC (permalink / raw)
To: jerinj, jay.jayatheerthan, erik.g.carrillo, abhinandan.gujjar,
timothy.mcdaniel, hemant.agrawal, harry.van.haaren,
mattias.ronnblom, liang.j.ma
Cc: dev, Pavan Nikhilesh
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
In traditional event programming model, events are identified by a
flow-id and a uintptr_t. The flow-id uniquely identifies a given event
and determines the order of scheduling based on schedule type, the
uintptr_t holds a single object.
Event devices also support burst mode with configurable dequeue depth,
i.e. each dequeue call would return multiple events and each event
might be at a different stage of the pipeline.
Having a burst of events belonging to different stages in a dequeue
burst is not only difficult to vectorize but also increases the scheduler
overhead and application overhead of pipelining events further.
Using event vectors we see a performance gain of ~628% as shown in [1].
By introducing event vectorization, each event will be capable of holding
multiple uintptr_t of the same flow thereby allowing applications
to vectorize their pipeline and reduce the complexity of pipelining
events across multiple stages. This also reduces the complexity of handling
enqueue and dequeue on an event device.
Since event devices are transparent to the events they are scheduling
so the event producers such as eth_rx_adapter, crypto_adapter , etc..
are responsible for vectorizing the buffers of the same flow into a single
event.
The series also breaks ABI in the patch [8/8] which is targetted to the
v21.11 release.
The dpdk-test-eventdev application has been updated with options to test
multiple vector sizes and timeouts.
[1]
As for performance improvement, with a ARM Cortex-A72 equivalent processer,
software event device (--vdev=event_sw0), single worker core, single stage
and using one service core for Rx adapter, Tx adapter, Scheduling.
Without event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
4.728 mpps avg 4.728 mpps
With event vectorization:
./build/app/dpdk-test-eventdev -l 7-23 -s 0x700 --vdev="event_sw0" --
--prod_type_ethdev --nb_pkts=0 --verbose 2 --test=pipeline_queue
--stlist=a --wlcores=20 --enable_vector --nb_eth_queues 1
--vector_size 256
Port[0] using Rx adapter[0] configured
Port[0] using Tx adapter[0] Configured
34.383 mpps avg 34.383 mpps
Having dedicated service cores for each Rx queues and tweaking the vector,
dequeue burst size would further improve performance.
API usage is shown below:
Configuration:
struct rte_event_eth_rx_adapter_event_vector_config vec_conf;
vector_pool = rte_event_vector_pool_create("vector_pool",
nb_elem, 0, vector_size, socket_id);
rte_event_eth_rx_adapter_create(id, event_id, &adptr_conf);
rte_event_eth_rx_adapter_queue_add(id, eth_id, -1, &queue_conf);
if (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR) {
vec_conf.vector_sz = vector_size;
vec_conf.vector_timeout_ns = vector_tmo_nsec;
vec_conf.vector_mp = vector_pool;
rte_event_eth_rx_adapter_queue_event_vector_config(id,
eth_id, -1, &vec_conf);
}
Fastpath:
num = rte_event_dequeue_burst(event_id, port_id, &ev, 1, 0);
if (!num)
continue;
if (ev.event_type & RTE_EVENT_TYPE_VECTOR) {
switch (ev.event_type) {
case RTE_EVENT_TYPE_ETHDEV_VECTOR:
case RTE_EVENT_TYPE_ETH_RX_ADAPTER_VECTOR:
struct rte_mbuf **mbufs;
mbufs = ev.vector_ev->mbufs;
for (i = 0; i < ev.vector_ev->nb_elem; i++)
//Process mbufs.
break;
case ...
}
}
...
v2 Changes:
- Multiple gramatical and style fixes.(Jerin)
- Add parameter to define vector size in power of 2. (Jerin)
- Redo patch series w/o breaking ABI till the last patch.(David)
- Add deprication notice to announce ABI break in 21.11.(David)
- Add vector limits validation to app/test-eventdev.
Pavan Nikhilesh (8):
eventdev: introduce event vector capability
eventdev: introduce event vector Rx capability
eventdev: introduce event vector Tx capability
eventdev: add Rx adapter event vector support
eventdev: add Tx adapter event vector support
app/eventdev: add event vector mode in pipeline test
doc: announce event Rx adapter config changes
eventdev: simplify Rx adapter event vector config
app/test-eventdev/evt_common.h | 4 +
app/test-eventdev/evt_options.c | 52 +++
app/test-eventdev/evt_options.h | 4 +
app/test-eventdev/test_pipeline_atq.c | 310 ++++++++++++-
app/test-eventdev/test_pipeline_common.c | 69 ++-
app/test-eventdev/test_pipeline_common.h | 18 +
app/test-eventdev/test_pipeline_queue.c | 320 ++++++++++++-
.../prog_guide/event_ethernet_rx_adapter.rst | 38 ++
.../prog_guide/event_ethernet_tx_adapter.rst | 12 +
doc/guides/prog_guide/eventdev.rst | 36 +-
doc/guides/rel_notes/deprecation.rst | 9 +
doc/guides/tools/testeventdev.rst | 28 ++
lib/librte_eventdev/eventdev_pmd.h | 31 +-
.../rte_event_eth_rx_adapter.c | 305 ++++++++++++-
.../rte_event_eth_rx_adapter.h | 68 +++
.../rte_event_eth_tx_adapter.c | 66 ++-
lib/librte_eventdev/rte_eventdev.c | 11 +-
lib/librte_eventdev/rte_eventdev.h | 428 +++++++++++-------
lib/librte_eventdev/version.map | 4 +
19 files changed, 1568 insertions(+), 245 deletions(-)
--
2.17.1
^ permalink raw reply [relevance 4%]
* [dpdk-dev] [PATCH v6 2/2] eal: rename key opaque pointer and functions in TLS API
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Tal Shnaiderman
@ 2021-03-16 13:28 3% ` Tal Shnaiderman
2021-03-26 8:24 0% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Thomas Monjalon
1 sibling, 0 replies; 200+ results
From: Tal Shnaiderman @ 2021-03-16 13:28 UTC (permalink / raw)
To: dev
Cc: thomas, pallavi.kadam, dmitry.kozliuk, navasile, dmitrym,
david.marchand, anatoly.burakov, vladimir.medvedkin, mb
rename the key opaque pointer from rte_tls_key to
rte_thread_key to avoid confusion with transport layer security.
Also rename and remove the "_tls" term from the following
functions to avoid redundancy:
rte_thread_tls_key_create
rte_thread_tls_key_delete
rte_thread_tls_value_set
rte_thread_tls_value_get
Suggested-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Suggested-by: Morten Brørup <mb@smartsharesystems.com>
Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
---
doc/guides/rel_notes/release_21_05.rst | 4 ++++
drivers/net/mlx5/linux/mlx5_flow_os.c | 10 +++++-----
drivers/net/mlx5/windows/mlx5_flow_os.c | 12 ++++++------
lib/librte_eal/include/rte_thread.h | 19 ++++++++++---------
lib/librte_eal/rte_eal_exports.def | 8 ++++----
lib/librte_eal/unix/rte_thread.c | 8 ++++----
lib/librte_eal/version.map | 8 ++++----
lib/librte_eal/windows/rte_thread.c | 8 ++++----
8 files changed, 41 insertions(+), 36 deletions(-)
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 21dc6d2342..4ab5404794 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -112,6 +112,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* eal: The experimental TLS API added in ``rte_thread.h`` has been renamed
+ from ``rte_thread_tls_*`` to ``rte_thread_*`` to avoid naming redundancy
+ and confusion with the transport layer security term.
+
ABI Changes
-----------
diff --git a/drivers/net/mlx5/linux/mlx5_flow_os.c b/drivers/net/mlx5/linux/mlx5_flow_os.c
index 732b1b2dd8..893f00b824 100644
--- a/drivers/net/mlx5/linux/mlx5_flow_os.c
+++ b/drivers/net/mlx5/linux/mlx5_flow_os.c
@@ -7,12 +7,12 @@
#include <rte_thread.h>
/* Key of thread specific flow workspace data. */
-static rte_tls_key key_workspace;
+static rte_thread_key key_workspace;
int
mlx5_flow_os_init_workspace_once(void)
{
- if (rte_thread_tls_key_create(&key_workspace, flow_release_workspace)) {
+ if (rte_thread_key_create(&key_workspace, flow_release_workspace)) {
DRV_LOG(ERR, "Can't create flow workspace data thread key.");
return -ENOMEM;
}
@@ -22,17 +22,17 @@ mlx5_flow_os_init_workspace_once(void)
void *
mlx5_flow_os_get_specific_workspace(void)
{
- return rte_thread_tls_value_get(key_workspace);
+ return rte_thread_value_get(key_workspace);
}
int
mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data)
{
- return rte_thread_tls_value_set(key_workspace, data);
+ return rte_thread_value_set(key_workspace, data);
}
void
mlx5_flow_os_release_workspace(void)
{
- rte_thread_tls_key_delete(key_workspace);
+ rte_thread_key_delete(key_workspace);
}
diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c b/drivers/net/mlx5/windows/mlx5_flow_os.c
index 2cc02df322..c4d5790726 100644
--- a/drivers/net/mlx5/windows/mlx5_flow_os.c
+++ b/drivers/net/mlx5/windows/mlx5_flow_os.c
@@ -252,7 +252,7 @@ struct mlx5_workspace_thread {
*/
static struct mlx5_workspace_thread *curr;
static struct mlx5_workspace_thread *first;
-rte_tls_key ws_tls_index;
+rte_thread_key ws_tls_index;
static pthread_mutex_t lock_thread_list;
static bool
@@ -329,7 +329,7 @@ mlx5_flow_os_release_workspace(void)
flow_release_workspace(first->mlx5_ws);
free(first);
}
- rte_thread_tls_key_delete(ws_tls_index);
+ rte_thread_key_delete(ws_tls_index);
pthread_mutex_destroy(&lock_thread_list);
}
@@ -368,7 +368,7 @@ mlx5_add_workspace_to_list(struct mlx5_flow_workspace *data)
int
mlx5_flow_os_init_workspace_once(void)
{
- int err = rte_thread_tls_key_create(&ws_tls_index, NULL);
+ int err = rte_thread_key_create(&ws_tls_index, NULL);
if (err) {
DRV_LOG(ERR, "Can't create flow workspace data thread key.");
@@ -381,7 +381,7 @@ mlx5_flow_os_init_workspace_once(void)
void *
mlx5_flow_os_get_specific_workspace(void)
{
- return rte_thread_tls_value_get(ws_tls_index);
+ return rte_thread_value_get(ws_tls_index);
}
int
@@ -391,7 +391,7 @@ mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data)
int old_err = rte_errno;
rte_errno = 0;
- if (!rte_thread_tls_value_get(ws_tls_index)) {
+ if (!rte_thread_value_get(ws_tls_index)) {
if (rte_errno) {
DRV_LOG(ERR, "Failed checking specific workspace.");
rte_errno = old_err;
@@ -409,7 +409,7 @@ mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data)
return -1;
}
}
- if (rte_thread_tls_value_set(ws_tls_index, data)) {
+ if (rte_thread_value_set(ws_tls_index, data)) {
DRV_LOG(ERR, "Failed setting specific workspace.");
err = -1;
}
diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h
index c77ad6d7c4..a75476edcc 100644
--- a/lib/librte_eal/include/rte_thread.h
+++ b/lib/librte_eal/include/rte_thread.h
@@ -23,7 +23,7 @@ extern "C" {
/**
* TLS key type, an opaque pointer.
*/
-typedef struct eal_tls_key *rte_tls_key;
+typedef struct eal_tls_key *rte_thread_key;
/**
* Set core affinity of the current thread.
@@ -65,13 +65,14 @@ void rte_thread_get_affinity(rte_cpuset_t *cpusetp);
*/
__rte_experimental
-int rte_thread_tls_key_create(rte_tls_key *key, void (*destructor)(void *));
+int rte_thread_key_create(rte_thread_key *key,
+ void (*destructor)(void *));
/**
* Delete a TLS data key visible to all threads in the process.
*
* @param key
- * The key allocated by rte_thread_tls_key_create().
+ * The key allocated by rte_thread_key_create().
*
* @return
* On success, zero.
@@ -80,15 +81,15 @@ int rte_thread_tls_key_create(rte_tls_key *key, void (*destructor)(void *));
* ENOEXEC - Specific OS error.
*/
__rte_experimental
-int rte_thread_tls_key_delete(rte_tls_key key);
+int rte_thread_key_delete(rte_thread_key key);
/**
* Set value bound to the TLS key on behalf of the calling thread.
*
* @param key
- * The key allocated by rte_thread_tls_key_create().
+ * The key allocated by rte_thread_key_create().
* @param value
- * The value bound to the rte_tls_key key for the calling thread.
+ * The value bound to the rte_thread_key key for the calling thread.
*
* @return
* On success, zero.
@@ -97,13 +98,13 @@ int rte_thread_tls_key_delete(rte_tls_key key);
* ENOEXEC - Specific OS error.
*/
__rte_experimental
-int rte_thread_tls_value_set(rte_tls_key key, const void *value);
+int rte_thread_value_set(rte_thread_key key, const void *value);
/**
* Get value bound to the TLS key on behalf of the calling thread.
*
* @param key
- * The key allocated by rte_thread_tls_key_create().
+ * The key allocated by rte_thread_key_create().
*
* @return
* On success, value data pointer (can also be NULL).
@@ -112,7 +113,7 @@ int rte_thread_tls_value_set(rte_tls_key key, const void *value);
* ENOEXEC - Specific OS error.
*/
__rte_experimental
-void *rte_thread_tls_value_get(rte_tls_key key);
+void *rte_thread_value_get(rte_thread_key key);
#ifdef __cplusplus
}
diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def
index 474cf123fa..c320077547 100644
--- a/lib/librte_eal/rte_eal_exports.def
+++ b/lib/librte_eal/rte_eal_exports.def
@@ -325,10 +325,10 @@ EXPORTS
rte_vect_get_max_simd_bitwidth
rte_vect_set_max_simd_bitwidth
- rte_thread_tls_key_create
- rte_thread_tls_key_delete
- rte_thread_tls_value_get
- rte_thread_tls_value_set
+ rte_thread_key_create
+ rte_thread_key_delete
+ rte_thread_value_get
+ rte_thread_value_set
rte_mem_lock
rte_mem_map
diff --git a/lib/librte_eal/unix/rte_thread.c b/lib/librte_eal/unix/rte_thread.c
index b187c69a4c..c72d619ec1 100644
--- a/lib/librte_eal/unix/rte_thread.c
+++ b/lib/librte_eal/unix/rte_thread.c
@@ -17,7 +17,7 @@ struct eal_tls_key {
};
int
-rte_thread_tls_key_create(rte_tls_key *key, void (*destructor)(void *))
+rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *))
{
int err;
@@ -39,7 +39,7 @@ rte_thread_tls_key_create(rte_tls_key *key, void (*destructor)(void *))
}
int
-rte_thread_tls_key_delete(rte_tls_key key)
+rte_thread_key_delete(rte_thread_key key)
{
int err;
@@ -61,7 +61,7 @@ rte_thread_tls_key_delete(rte_tls_key key)
}
int
-rte_thread_tls_value_set(rte_tls_key key, const void *value)
+rte_thread_value_set(rte_thread_key key, const void *value)
{
int err;
@@ -81,7 +81,7 @@ rte_thread_tls_value_set(rte_tls_key key, const void *value)
}
void *
-rte_thread_tls_value_get(rte_tls_key key)
+rte_thread_value_get(rte_thread_key key)
{
if (!key) {
RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map
index fce90a112f..c07aab176c 100644
--- a/lib/librte_eal/version.map
+++ b/lib/librte_eal/version.map
@@ -408,10 +408,10 @@ EXPERIMENTAL {
rte_power_monitor;
rte_power_monitor_wakeup;
rte_power_pause;
- rte_thread_tls_key_create;
- rte_thread_tls_key_delete;
- rte_thread_tls_value_get;
- rte_thread_tls_value_set;
+ rte_thread_key_create;
+ rte_thread_key_delete;
+ rte_thread_value_get;
+ rte_thread_value_set;
};
INTERNAL {
diff --git a/lib/librte_eal/windows/rte_thread.c b/lib/librte_eal/windows/rte_thread.c
index fa9e360855..667287c387 100644
--- a/lib/librte_eal/windows/rte_thread.c
+++ b/lib/librte_eal/windows/rte_thread.c
@@ -12,7 +12,7 @@ struct eal_tls_key {
};
int
-rte_thread_tls_key_create(rte_tls_key *key,
+rte_thread_key_create(rte_thread_key *key,
__rte_unused void (*destructor)(void *))
{
*key = malloc(sizeof(**key));
@@ -32,7 +32,7 @@ rte_thread_tls_key_create(rte_tls_key *key,
}
int
-rte_thread_tls_key_delete(rte_tls_key key)
+rte_thread_key_delete(rte_thread_key key)
{
if (!key) {
RTE_LOG(DEBUG, EAL, "Invalid TLS key.\n");
@@ -50,7 +50,7 @@ rte_thread_tls_key_delete(rte_tls_key key)
}
int
-rte_thread_tls_value_set(rte_tls_key key, const void *value)
+rte_thread_value_set(rte_thread_key key, const void *value)
{
char *p;
@@ -70,7 +70,7 @@ rte_thread_tls_value_set(rte_tls_key key, const void *value)
}
void *
-rte_thread_tls_value_get(rte_tls_key key)
+rte_thread_value_get(rte_thread_key key)
{
void *output;
--
2.16.1.windows.4
^ permalink raw reply [relevance 3%]
* [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements
@ 2021-03-16 13:28 3% ` Tal Shnaiderman
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 2/2] eal: rename key opaque pointer and functions in TLS API Tal Shnaiderman
2021-03-26 8:24 0% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Thomas Monjalon
0 siblings, 2 replies; 200+ results
From: Tal Shnaiderman @ 2021-03-16 13:28 UTC (permalink / raw)
To: dev
Cc: thomas, pallavi.kadam, dmitry.kozliuk, navasile, dmitrym,
david.marchand, anatoly.burakov, vladimir.medvedkin, mb
---
v6: fix misalignment in comment fix from v5 and missing NL in RN [Thomas]
v5: shorten docu comment on rte_errno and add ABI change info to release note [Thomas]
v4: replace errno EOTHER with ENOEXEC as EOTHER is undefined in unix.
v3: -Unify rte_errno values to a generic errno for OS compatibility [DmitryK]
-Rename the TLS function to avoid redundancy[MortenB].
v2: Rename key to avoid redundancy[MortenB].
---
Tal Shnaiderman (2):
eal: error number enhancement for thread TLS API
eal: rename key opaque pointer and functions in TLS API
doc/guides/rel_notes/release_21_05.rst | 4 ++++
drivers/net/mlx5/linux/mlx5_flow_os.c | 10 +++++-----
drivers/net/mlx5/windows/mlx5_flow_os.c | 12 ++++++------
lib/librte_eal/include/rte_thread.h | 33 +++++++++++++++++++++------------
lib/librte_eal/rte_eal_exports.def | 8 ++++----
lib/librte_eal/unix/rte_thread.c | 14 ++++++++++----
lib/librte_eal/version.map | 8 ++++----
lib/librte_eal/windows/rte_thread.c | 14 ++++++++++----
8 files changed, 64 insertions(+), 39 deletions(-)
--
2.16.1.windows.4
^ permalink raw reply [relevance 3%]
* [dpdk-dev] cryptodev: change raw data path dequeue API
@ 2021-03-16 11:14 9% Fan Zhang
2021-03-31 17:20 4% ` [dpdk-dev] [dpdk-dev v2] " Fan Zhang
0 siblings, 1 reply; 200+ results
From: Fan Zhang @ 2021-03-16 11:14 UTC (permalink / raw)
To: dev; +Cc: gakhil, Fan Zhang
This patch changes the experimental raw data path dequeue burst API.
Originally the API enforces the user to provide callback function
to get maximum dequeue count. This change gives the user one more
option to pass directly the expected dequeue count.
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
app/test/test_cryptodev.c | 8 +-------
doc/guides/rel_notes/release_21_05.rst | 2 ++
drivers/crypto/qat/qat_sym_hw_dp.c | 4 +++-
lib/librte_cryptodev/rte_cryptodev.c | 5 +++--
lib/librte_cryptodev/rte_cryptodev.h | 8 ++++++++
5 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index f91debc16..a91054742 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -162,12 +162,6 @@ ceil_byte_length(uint32_t num_bits)
return (num_bits >> 3);
}
-static uint32_t
-get_raw_dp_dequeue_count(void *user_data __rte_unused)
-{
- return 1;
-}
-
static void
post_process_raw_dp_op(void *user_data, uint32_t index __rte_unused,
uint8_t is_op_success)
@@ -345,7 +339,7 @@ process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
n = n_success = 0;
while (count++ < MAX_RAW_DEQUEUE_COUNT && n == 0) {
n = rte_cryptodev_raw_dequeue_burst(ctx,
- get_raw_dp_dequeue_count, post_process_raw_dp_op,
+ NULL, 1, post_process_raw_dp_op,
(void **)&ret_op, 0, &n_success,
&dequeue_status);
if (dequeue_status < 0) {
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 21dc6d234..b9ca0cc30 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -130,6 +130,8 @@ ABI Changes
* No ABI change that would break compatibility with 20.11.
+* cryptodev: the function ``rte_cryptodev_raw_dequeue_burst`` is added a
+ parameter ``max_nb_to_dequeue`` to give user a more flexible dequeue control.
Known Issues
------------
diff --git a/drivers/crypto/qat/qat_sym_hw_dp.c b/drivers/crypto/qat/qat_sym_hw_dp.c
index 01afb883e..e075f3ec2 100644
--- a/drivers/crypto/qat/qat_sym_hw_dp.c
+++ b/drivers/crypto/qat/qat_sym_hw_dp.c
@@ -707,6 +707,7 @@ qat_sym_dp_enqueue_chain_jobs(void *qp_data, uint8_t *drv_ctx,
static __rte_always_inline uint32_t
qat_sym_dp_dequeue_burst(void *qp_data, uint8_t *drv_ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success_jobs, int *return_status)
@@ -736,7 +737,8 @@ qat_sym_dp_dequeue_burst(void *qp_data, uint8_t *drv_ctx,
resp_opaque = (void *)(uintptr_t)resp->opaque_data;
/* get the dequeue count */
- n = get_dequeue_count(resp_opaque);
+ n = get_dequeue_count != NULL ? get_dequeue_count(resp_opaque) :
+ max_nb_to_dequeue;
if (unlikely(n == 0))
return 0;
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 40f55a3cd..0c16b04f8 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -2232,13 +2232,14 @@ rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
uint32_t
rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success_jobs, int *status)
{
return (*ctx->dequeue_burst)(ctx->qp_data, ctx->drv_ctx_data,
- get_dequeue_count, post_dequeue, out_user_data,
- is_user_data_array, n_success_jobs, status);
+ get_dequeue_count, max_nb_to_dequeue, post_dequeue,
+ out_user_data, is_user_data_array, n_success_jobs, status);
}
int
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index ae34f33f6..b2a125511 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -1546,6 +1546,9 @@ typedef void (*rte_cryptodev_raw_post_dequeue_t)(void *user_data,
* @param drv_ctx Driver specific context data.
* @param get_dequeue_count User provided callback function to
* obtain dequeue operation count.
+ * @param max_nb_to_dequeue When get_dequeue_count is NULL this
+ * value is used to pass the maximum
+ * number of operations to be dequeued.
* @param post_dequeue User provided callback function to
* post-process a dequeued operation.
* @param out_user_data User data pointer array to be retrieve
@@ -1580,6 +1583,7 @@ typedef void (*rte_cryptodev_raw_post_dequeue_t)(void *user_data,
typedef uint32_t (*cryptodev_sym_raw_dequeue_burst_t)(void *qp,
uint8_t *drv_ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success, int *dequeue_status);
@@ -1747,6 +1751,9 @@ rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
* data.
* @param get_dequeue_count User provided callback function to
* obtain dequeue operation count.
+ * @param max_nb_to_dequeue When get_dequeue_count is NULL this
+ * value is used to pass the maximum
+ * number of operations to be dequeued.
* @param post_dequeue User provided callback function to
* post-process a dequeued operation.
* @param out_user_data User data pointer array to be retrieve
@@ -1782,6 +1789,7 @@ __rte_experimental
uint32_t
rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
+ uint32_t max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t post_dequeue,
void **out_user_data, uint8_t is_user_data_array,
uint32_t *n_success, int *dequeue_status);
--
2.25.1
^ permalink raw reply [relevance 9%]
Results 4201-4400 of ~18000 next (older) | prev (newer) | reverse | sort options + mbox downloads above
-- links below jump to the message on this page --
2020-01-04 1:33 [dpdk-dev] [PATCH 00/14] cleanup resources on shutdown Stephen Hemminger
2020-05-03 17:21 ` [dpdk-dev] [PATCH v3 0/8] eal: " David Marchand
2020-10-19 22:24 ` Thomas Monjalon
2021-03-24 21:30 0% ` Thomas Monjalon
2020-04-16 11:00 [dpdk-dev] [PATCH] ci: remove aarch64 from Travis jobs Thomas Monjalon
2021-03-25 15:46 ` Thomas Monjalon
2021-03-25 16:40 3% ` Aaron Conole
2021-03-25 17:11 0% ` Thomas Monjalon
2020-06-07 12:26 [dpdk-dev] Handling missing export functions in MSVC linkage Tal Shnaiderman
2020-06-08 0:09 ` Dmitry Kozlyuk
2020-06-08 8:33 ` David Marchand
2021-03-26 8:39 0% ` Thomas Monjalon
2021-03-26 14:14 0% ` [dpdk-dev] [EXTERNAL] " Tyler Retzlaff
2020-12-18 15:16 [dpdk-dev] [RFC 1/9] devargs: fix data buffer storage type Xueming Li
2021-04-13 3:14 ` [dpdk-dev] [PATCH v5 0/5] eal: enable global device syntax by default Xueming Li
2021-04-13 3:14 ` [dpdk-dev] [PATCH v5 1/5] devargs: unify scratch buffer storage Xueming Li
2021-04-16 7:00 3% ` David Marchand
2021-04-14 19:49 3% ` [dpdk-dev] [PATCH v5 0/5] eal: enable global device syntax by default Thomas Monjalon
2021-01-18 15:16 [dpdk-dev] [PATCH v2 0/5] eal: enable global device syntax Xueming Li
2021-01-18 15:16 ` [dpdk-dev] [PATCH v2 2/5] devargs: refactor scratch buffer storage Xueming Li
2021-03-18 9:14 3% ` Thomas Monjalon
2021-02-04 14:34 [dpdk-dev] [PATCH] cryptodev: support multiple cipher block sizes Matan Azrad
2021-04-13 18:19 4% ` [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units Thomas Monjalon
2021-04-13 19:48 0% ` Matan Azrad
2021-04-13 20:42 10% ` [dpdk-dev] [PATCH v4] " Thomas Monjalon
2021-04-14 18:37 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-14 19:38 0% ` Thomas Monjalon
2021-04-14 19:43 0% ` Akhil Goyal
2021-04-14 20:17 0% ` Thomas Monjalon
2021-04-14 20:21 10% ` [dpdk-dev] [PATCH v5] " Thomas Monjalon
2021-04-15 8:35 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-15 19:01 3% ` Akhil Goyal
2021-04-15 19:31 0% ` David Marchand
2021-02-18 14:12 [dpdk-dev] [PATCH v3] build: alias default build as generic Juraj Linkeš
2021-03-29 10:49 3% ` [dpdk-dev] [PATCH v4] " Juraj Linkeš
2021-03-30 6:40 3% ` [dpdk-dev] [PATCH v5] " Juraj Linkeš
2021-02-20 22:09 [dpdk-dev] [PATCH 0/7] Introduce event vectorization pbhagavatula
2021-03-16 15:48 4% ` [dpdk-dev] [PATCH v2 0/8] " pbhagavatula
2021-03-16 20:01 4% ` [dpdk-dev] [PATCH v3 " pbhagavatula
2021-03-19 20:57 4% ` [dpdk-dev] [PATCH v4 " pbhagavatula
2021-03-19 20:57 ` [dpdk-dev] [PATCH v4 1/8] eventdev: introduce event vector capability pbhagavatula
2021-03-22 9:06 3% ` Kinsella, Ray
2021-03-22 9:10 0% ` [dpdk-dev] [EXT] " Pavan Nikhilesh Bhagavatula
2021-03-23 18:44 0% ` [dpdk-dev] [PATCH v4 0/8] Introduce event vectorization Jerin Jacob
2021-03-24 5:05 4% ` [dpdk-dev] [PATCH v5 " pbhagavatula
2021-03-24 5:39 0% ` Jayatheerthan, Jay
2021-03-24 6:44 0% ` Pavan Nikhilesh Bhagavatula
2021-03-24 8:10 0% ` Jayatheerthan, Jay
2021-03-24 19:28 4% ` [dpdk-dev] [PATCH v6 " pbhagavatula
2021-03-25 17:10 4% ` [dpdk-dev] [PATCH v7 " pbhagavatula
2021-03-26 14:08 4% ` [dpdk-dev] [PATCH v8 " pbhagavatula
2021-03-30 8:22 4% ` [dpdk-dev] [PATCH v9 " pbhagavatula
2021-03-31 9:29 4% ` [dpdk-dev] [PATCH v10 " pbhagavatula
2021-04-03 9:44 0% ` Jerin Jacob
2021-02-24 21:20 [dpdk-dev] [RFC 0/5] Use correct memory ordering in eal functions Honnappa Nagarahalli
2021-02-25 8:44 ` [dpdk-dev] 回复: [RFC 3/5] eal: lcore state FINISHED is not required Feifei Wang
2021-02-25 23:33 ` [dpdk-dev] " Honnappa Nagarahalli
2021-02-26 8:26 ` Thomas Monjalon
2021-03-02 3:13 ` Honnappa Nagarahalli
2021-03-19 13:42 3% ` Ananyev, Konstantin
2021-03-30 2:54 0% ` Honnappa Nagarahalli
2021-02-25 17:02 [dpdk-dev] [PATCH 1/7] common/octeontx: enable build only on 64bit Linux pbhagavatula
2021-03-24 10:55 ` Jerin Jacob
2021-03-25 10:42 ` Thomas Monjalon
2021-03-25 10:46 3% ` Thomas Monjalon
2021-03-25 10:58 4% ` Kinsella, Ray
2021-03-25 11:03 0% ` Thomas Monjalon
2021-03-25 12:46 4% ` Jerin Jacob
2021-03-25 12:47 0% ` Kinsella, Ray
2021-03-25 12:58 0% ` Jerin Jacob
2021-03-25 13:02 3% ` Kinsella, Ray
2021-03-26 10:50 0% ` Jerin Jacob
2021-03-25 14:57 0% ` Thomas Monjalon
2021-03-25 15:01 0% ` David Marchand
2021-03-25 14:52 3% ` [dpdk-dev] [PATCH 21.11 v2 0/3] octeontx build only on 64-bit Linux Thomas Monjalon
2021-02-25 19:01 [dpdk-dev] [PATCH 1/2] eal: make max interrupt vector id configurable pbhagavatula
2021-03-24 11:01 ` Jerin Jacob
2021-03-24 11:14 3% ` David Marchand
2021-03-24 12:54 4% ` Jerin Jacob
2021-03-24 15:25 0% ` David Marchand
2021-03-24 16:20 0% ` Jerin Jacob
2021-03-09 8:15 [dpdk-dev] [PATCH 0/4] *** Support for one flow dump *** Haifei Luo
2021-04-07 6:09 ` [dpdk-dev] [PATCH v2 0/5] support single flow dump Haifei Luo
2021-04-07 6:09 4% ` [dpdk-dev] [PATCH v2 5/5] doc: add single flow dump to guides Haifei Luo
2021-03-10 17:24 [dpdk-dev] [PATCH 0/4] telemetry logging improvements and cleanup Bruce Richardson
2021-03-25 13:57 ` [dpdk-dev] [PATCH v2 " Bruce Richardson
2021-03-25 13:57 10% ` [dpdk-dev] [PATCH v2 2/4] telemetry: make the legacy registration function internal Bruce Richardson
2021-03-11 13:13 [dpdk-dev] [PATCH v9 00/10] ethdev: support SubFunction representor Xueming Li
2021-03-11 13:13 ` [dpdk-dev] [PATCH v9 05/10] kvargs: update parser to support multiple lists Xueming Li
2021-04-12 16:42 3% ` Kinsella, Ray
2021-03-11 19:27 [dpdk-dev] [PATCH] ethdev: introduce enable_driver_sdk to install driver headers Tyler Retzlaff
2021-03-12 22:20 ` [dpdk-dev] [PATCH v2] " Tyler Retzlaff
2021-03-23 17:04 0% ` Ferruh Yigit
2021-03-24 4:32 3% ` Tyler Retzlaff
2021-03-24 11:27 0% ` Ferruh Yigit
2021-03-24 11:30 0% ` Thomas Monjalon
2021-03-30 12:50 0% ` Ferruh Yigit
2021-03-11 22:17 [dpdk-dev] [PATCH 0/2] ethdev: remove some use of legacy filtering interface Thomas Monjalon
2021-03-21 8:59 ` [dpdk-dev] [PATCH v3 0/2] ethdev: remove some use of legacy filtering Thomas Monjalon
2021-03-21 9:00 1% ` [dpdk-dev] [PATCH v3 1/2] ethdev: replace callback getting filter operations Thomas Monjalon
2021-03-14 12:18 [dpdk-dev] [PATCH] cryptodev: support multiple cipher data-units Matan Azrad
[not found] ` <20210404150809.2154241-1-matan@nvidia.com>
2021-04-13 12:02 ` [dpdk-dev] [EXT] [PATCH v2] " Akhil Goyal
2021-04-13 16:39 3% ` Thomas Monjalon
2021-03-16 9:15 [dpdk-dev] [PATCH v5 1/2] eal: error number enhancement for thread TLS API Tal Shnaiderman
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Tal Shnaiderman
2021-03-16 13:28 3% ` [dpdk-dev] [PATCH v6 2/2] eal: rename key opaque pointer and functions in TLS API Tal Shnaiderman
2021-03-26 8:24 0% ` [dpdk-dev] [PATCH v6 0/2] EAL Thread TLS API enhancements Thomas Monjalon
2021-03-16 11:14 9% [dpdk-dev] cryptodev: change raw data path dequeue API Fan Zhang
2021-03-31 17:20 4% ` [dpdk-dev] [dpdk-dev v2] " Fan Zhang
2021-03-16 22:18 [dpdk-dev] [PATCH 01/25] event/dlb2: add dlb v2.5 probe Timothy McDaniel
2021-04-13 20:14 ` [dpdk-dev] [PATCH v3 00/26] Add DLB V2.5 Timothy McDaniel
2021-04-13 20:14 ` [dpdk-dev] [PATCH v3 25/26] event/dlb: remove version from device name Timothy McDaniel
2021-04-14 19:31 4% ` Jerin Jacob
2021-04-14 19:42 0% ` McDaniel, Timothy
2021-04-14 19:44 ` Jerin Jacob
2021-04-14 20:33 3% ` Thomas Monjalon
2021-04-15 3:22 0% ` McDaniel, Timothy
2021-04-15 5:47 0% ` Jerin Jacob
2021-04-15 7:48 0% ` Thomas Monjalon
2021-04-15 7:56 0% ` Jerin Jacob
2021-03-16 23:11 [dpdk-dev] [PATCH] bus/pci: fix Windows kernel driver categories Thomas Monjalon
2021-03-17 23:17 ` Ranjit Menon
2021-03-18 7:49 3% ` Thomas Monjalon
2021-03-18 22:00 0% ` Ranjit Menon
2021-03-18 10:48 3% ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2021-03-18 12:00 0% ` Tal Shnaiderman
2021-03-18 22:07 0% ` Ranjit Menon
2021-03-19 15:24 0% ` Thomas Monjalon
2021-03-17 9:31 [dpdk-dev] [PATCH] eal: fix version macro Thomas Monjalon
2021-03-17 9:48 ` David Marchand
2021-03-17 10:01 ` Thomas Monjalon
2021-03-18 12:28 3% ` Bruce Richardson
2021-03-18 14:41 0% ` Thomas Monjalon
2021-03-18 15:45 0% ` Bruce Richardson
2021-03-17 15:15 3% [dpdk-dev] [PATCH] eal: mark version parts API as experimental Thomas Monjalon
2021-03-18 12:29 0% ` Bruce Richardson
2021-03-19 15:21 0% ` Thomas Monjalon
2021-03-18 1:00 [dpdk-dev] [PATCH 0/3] eal: Add new API for threading Narcisa Ana Maria Vasile
2021-03-18 1:00 ` [dpdk-dev] [PATCH 1/3] Add EAL threads API Narcisa Ana Maria Vasile
2021-03-18 15:48 5% ` David Marchand
2021-03-18 19:40 4% ` Narcisa Ana Maria Vasile
2021-03-23 0:20 2% ` [dpdk-dev] [PATCH v2 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
2021-03-25 3:46 2% ` [dpdk-dev] [PATCH v3 " Narcisa Ana Maria Vasile
2021-03-18 12:25 13% [dpdk-dev] [PATCH] ethdev: add queue state when retrieve queue information Lijun Ou
2021-03-22 9:22 3% ` Ferruh Yigit
2021-03-22 9:38 0% ` Kinsella, Ray
2021-03-22 9:39 0% ` oulijun
2021-03-22 14:49 0% ` Andrew Rybchenko
2021-03-22 15:45 0% ` Ananyev, Konstantin
2021-03-22 16:02 0% ` Andrew Rybchenko
2021-03-22 16:53 0% ` Ananyev, Konstantin
2021-03-22 17:07 3% ` Andrew Rybchenko
2021-03-22 18:53 0% ` Ananyev, Konstantin
2021-03-23 10:13 0% ` Ferruh Yigit
2021-03-23 10:19 0% ` Ferruh Yigit
2021-03-23 11:07 0% ` Ananyev, Konstantin
2021-03-25 10:01 0% ` oulijun
2021-03-25 10:18 0% ` Ananyev, Konstantin
2021-03-25 11:09 13% ` [dpdk-dev] [PATCH V2] " Lijun Ou
2021-04-06 0:49 0% ` oulijun
2021-04-06 1:55 ` Stephen Hemminger
2021-04-14 10:09 3% ` Ferruh Yigit
2021-04-06 14:02 0% ` Ananyev, Konstantin
2021-04-14 10:40 0% ` Ferruh Yigit
2021-04-14 10:56 0% ` Ananyev, Konstantin
2021-04-15 2:40 8% ` [dpdk-dev] [PATCH V3] " Lijun Ou
2021-04-15 12:33 3% ` Ferruh Yigit
2021-04-15 12:36 4% ` Thomas Monjalon
2021-04-15 12:45 0% ` Ferruh Yigit
2021-04-15 13:34 3% ` Thomas Monjalon
2021-04-16 0:58 0% ` [dpdk-dev] [Linuxarm] " oulijun
2021-03-23 12:11 [dpdk-dev] [PATCH] ethdev: update qfi definition Raslan Darawsheh
2021-03-26 13:12 ` Ferruh Yigit
2021-03-29 8:53 ` Ori Kam
2021-03-29 9:06 3% ` Raslan Darawsheh
2021-03-29 11:14 0% ` Ferruh Yigit
2021-03-25 3:47 [dpdk-dev] [PATCH v3 10/10] Enable the new EAL thread API Narcisa Ana Maria Vasile
2021-03-26 23:52 2% ` [dpdk-dev] [PATCH v4 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
2021-03-26 23:52 [dpdk-dev] [PATCH v4 09/10] eal: add EAL argument for setting thread priority Narcisa Ana Maria Vasile
2021-03-29 22:40 2% ` [dpdk-dev] [PATCH v5 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
2021-03-29 22:40 [dpdk-dev] [PATCH v5 01/10] eal: add thread id and simple thread functions Narcisa Ana Maria Vasile
2021-04-03 1:38 2% ` [dpdk-dev] [PATCH v6 00/10] eal: Add new API for threading Narcisa Ana Maria Vasile
2021-03-30 8:07 4% [dpdk-dev] cryptodev: change raw data path dequeue API Akhil Goyal
2021-03-31 0:44 3% [dpdk-dev] Minutes of Technical Board Meeting, 2021-03-10 Honnappa Nagarahalli
2021-03-31 8:52 0% ` Tom Barbette
2021-04-06 13:13 0% ` Morten Brørup
2021-04-07 0:47 0% ` Honnappa Nagarahalli
2021-04-07 7:11 0% ` Morten Brørup
2021-04-07 9:58 0% ` Bruce Richardson
2021-04-07 10:29 0% ` Morten Brørup
2021-03-31 22:34 [dpdk-dev] [PATCH 0/2] pci: add rte prefix Thomas Monjalon
2021-04-06 10:28 ` [dpdk-dev] [PATCH v3 " Thomas Monjalon
2021-04-06 10:28 4% ` [dpdk-dev] [PATCH v3 1/2] pci: rename catch-all ID Thomas Monjalon
2021-03-31 22:45 [dpdk-dev] [PATCH] eal: move DMA mapping from bus-specific to generic driver Thomas Monjalon
2021-03-31 22:53 4% ` Thomas Monjalon
2021-04-01 8:40 0% ` Kinsella, Ray
2021-04-12 15:03 0% ` Kinsella, Ray
2021-04-01 6:54 [dpdk-dev] [PATCH 0/2] Support meter policy API Li Zhang
2021-04-01 6:54 1% ` [dpdk-dev] [PATCH 1/2] ethdev: add pre-defined " Li Zhang
2021-04-01 9:52 [dpdk-dev] [PATCH 0/5] Offload flags fixes David Marchand
2021-04-01 9:52 ` [dpdk-dev] [PATCH 2/5] net/tap: do not touch Tx offload flags David Marchand
2021-04-07 20:15 ` Flavio Leitner
2021-04-08 7:41 ` Olivier Matz
2021-04-08 11:21 ` Flavio Leitner
2021-04-08 12:16 3% ` Ananyev, Konstantin
2021-04-01 11:49 [dpdk-dev] [RFC PATCH 00/14] Build file update proposals Bruce Richardson
2021-04-01 11:50 1% ` [dpdk-dev] [RFC PATCH 13/14] lib: remove librte_ prefix from directory names Bruce Richardson
2021-04-06 16:32 [dpdk-dev] [PATCH] build: list symbols exports in a single file David Marchand
2021-04-06 17:59 2% ` [dpdk-dev] [PATCH v2] " David Marchand
2021-04-07 9:06 [dpdk-dev] [PATCH] service: clean references to removed symbol David Marchand
2021-04-08 12:54 4% ` Van Haaren, Harry
2021-04-08 12:58 0% ` David Marchand
2021-04-08 13:06 4% ` Van Haaren, Harry
2021-04-08 14:04 0% ` David Marchand
2021-04-08 14:54 3% ` Thomas Monjalon
[not found] <1615967952-228321-1-git-send-email-bingz@nvidia.com>
2021-04-08 14:46 2% ` [dpdk-dev] [RFC PATCH v2] ethdev: introduce indirect action APIs Bing Zhao
2021-04-09 3:54 4% ` [dpdk-dev] [PATCH] " Bing Zhao
2021-04-10 14:03 ` [dpdk-dev] [PATCH v2 0/4] Change shared action API to action handle API Bing Zhao
2021-04-10 14:03 4% ` [dpdk-dev] [PATCH v2 1/4] ethdev: introduce indirect action APIs Bing Zhao
2021-04-12 19:42 0% ` Ferruh Yigit
2021-04-13 1:26 0% ` Bing Zhao
2021-04-13 14:00 0% ` Ori Kam
2021-04-13 12:36 0% ` Andrey Vesnovaty
2021-04-15 13:55 0% ` Andrew Rybchenko
2021-04-15 14:10 0% ` Thomas Monjalon
2021-04-15 16:02 0% ` Andrew Rybchenko
2021-04-15 15:51 ` [dpdk-dev] [PATCH v3 0/1] Change shared action API to action handle API Bing Zhao
2021-04-15 15:51 1% ` [dpdk-dev] [PATCH v3 1/1] ethdev: introduce indirect action APIs Bing Zhao
2021-04-15 15:56 0% ` Ori Kam
2021-04-15 17:59 0% ` Ajit Khaparde
2021-04-16 6:58 0% ` Bing Zhao
2021-04-16 7:03 0% ` Thomas Monjalon
2021-04-12 7:43 [dpdk-dev] [PATCH v7 0/3] Enhancements to crypto adapter forward mode Shijith Thotton
2021-04-13 10:29 ` [dpdk-dev] [PATCH v8 " Shijith Thotton
2021-04-13 10:29 ` [dpdk-dev] [PATCH v8 1/3] eventdev: introduce crypto adapter enqueue API Shijith Thotton
2021-04-14 7:28 4% ` Jerin Jacob Kollanukkaran
2021-04-14 7:58 3% ` Akhil Goyal
2021-04-14 8:18 3% ` Thomas Monjalon
2021-04-14 8:39 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-14 8:43 0% ` Thomas Monjalon
2021-04-14 12:20 ` [dpdk-dev] [PATCH v9 0/4] Enhancements to crypto adapter forward mode gakhil
2021-04-14 12:20 4% ` [dpdk-dev] [PATCH v9 4/4] devtools: add exception for reserved fields gakhil
2021-04-14 12:53 0% ` Thomas Monjalon
2021-04-14 14:16 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-14 14:22 0% ` Thomas Monjalon
2021-04-12 8:28 [dpdk-dev] [PATCH 0/3] add lock-free stack support discovery Stanislaw Kardach
2021-04-12 8:29 4% ` [dpdk-dev] [PATCH 2/3] stack: add lock-free support indication Stanislaw Kardach
2021-04-12 13:20 [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob Kollanukkaran
2021-04-12 22:12 ` Thomas Monjalon
2021-04-13 7:15 5% ` David Marchand
2021-04-13 7:31 0% ` Thomas Monjalon
2021-04-13 8:45 15% ` [dpdk-dev] [PATCH] devtools: skip removed DLB driver in ABI check Thomas Monjalon
2021-04-13 9:15 4% ` David Marchand
2021-04-13 9:32 4% ` Thomas Monjalon
2021-04-13 16:09 4% ` Kinsella, Ray
2021-04-13 16:44 4% ` Thomas Monjalon
2021-04-13 16:45 4% ` Kinsella, Ray
2021-04-13 8:54 5% ` [dpdk-dev] [pull-request] dpdk-next-net-eventdev - 21.05 - PRE-RC1 Jerin Jacob
2021-04-13 9:01 0% ` Thomas Monjalon
2021-04-13 9:07 0% ` David Marchand
2021-04-13 9:12 3% ` Thomas Monjalon
2021-04-13 9:14 5% ` David Marchand
2021-04-13 12:58 0% ` Aaron Conole
2021-04-12 21:53 23% [dpdk-dev] [PATCH] devtools: test different build types Thomas Monjalon
2021-04-14 12:20 [dpdk-dev] [PATCH v9 1/4] eventdev: introduce crypto adapter enqueue API gakhil
2021-04-14 18:04 ` [dpdk-dev] [PATCH v10 0/4] Enhancements to crypto adapter forward mode gakhil
2021-04-14 18:04 4% ` [dpdk-dev] [PATCH v10 1/4] devtools: add exception for reserved fields gakhil
2021-04-14 20:57 0% ` David Marchand
2021-04-15 5:32 0% ` [dpdk-dev] [EXT] " Akhil Goyal
2021-04-15 7:26 0% ` David Marchand
2021-04-15 8:25 0% ` Bruce Richardson
2021-04-15 9:08 3% [dpdk-dev] [PATCH] doc: announce modification in eventdev structure gakhil
2021-04-15 11:34 3% [dpdk-dev] DPDK Release Status Meeting 15/04/2021 Ferruh Yigit
2021-04-15 16:32 7% [dpdk-dev] [PATCH] ci: bump ABI reference version David Marchand
2021-04-15 16:57 7% ` Thomas Monjalon
2021-04-15 19:28 7% ` David Marchand
2021-04-15 19:38 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
2021-04-15 19:40 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
2021-04-15 19:43 8% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation David Marchand
2021-04-15 19:43 7% ` [dpdk-dev] [PATCH v2 2/2] ci: bump ABI reference version David Marchand
2021-04-16 6:39 4% ` [dpdk-dev] [PATCH v2 1/2] ci: fix ABI reference generation Juraj Linkeš
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).