DPDK patches and discussions
 help / color / mirror / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download: 
* Re: [dpdk-dev] [PATCH 3/3] lib: remind experimental status in library headers
  @ 2020-05-28  6:53  5%     ` David Marchand
  0 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-28  6:53 UTC (permalink / raw)
  To: Honnappa Nagarahalli
  Cc: dev, thomas, techboard, stable, Nicolas Chautru,
	Konstantin Ananyev, Fiona Trahe, Ashish Gupta,
	Vladimir Medvedkin, Bernard Iremonger, Gage Eads, Olivier Matz,
	Kevin Laatz, nd, Ray Kinsella, Neil Horman

Hello Honnappa,

On Fri, May 22, 2020 at 4:16 PM Honnappa Nagarahalli
<Honnappa.Nagarahalli@arm.com> wrote:
> > @@ -11,7 +11,8 @@
> >   * Wireless base band device abstraction APIs.
> >   *
> >   * @warning
> > - * @b EXPERIMENTAL: this API may change without prior notice
> > + * @b EXPERIMENTAL:
> > + * All functions in this file may change or disappear without prior notice.
> nit, is 'removed' a better choice instead of 'disappear'? May be something like:
> All functions in this file may be changed or removed without prior notice.

I used the same form than in the abi policy (that I wanted but forgot
to update in patch 1 afterwards... will be fixed in v2).

#. Libraries or APIs marked as :ref:`experimental <experimental_apis>` may
   change without constraint, as they are not considered part of an ABI version.
   Experimental libraries have the major ABI version ``0``.

No strong opinion, but I prefer keeping a single phrasing.
If we go with your suggestion, I will update the abi policy.


-- 
David Marchand


^ permalink raw reply	[relevance 5%]

* Re: [dpdk-dev] [PATCH] stack: remove experimental tag from API
  2020-05-28  1:04  3% [dpdk-dev] [PATCH] stack: remove experimental tag from API Gage Eads
@ 2020-05-28  5:46  3% ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-28  5:46 UTC (permalink / raw)
  To: Gage Eads, dev
  Cc: thomas, david.marchand, nhorman, phil.yang, honnappa.nagarahalli,
	olivier.matz

Hi Gage,

Do you have any idea.
If the change from experimental to stable symbol is likely to break anyone's application?
(are folks actively using the api with shared libraries)

If so, you _may_ consider offering a temporary alias to experimental until the v21 is declared at 20.11.
This is entirely at your discretion, see
https://doc.dpdk.org/guides/contributing/abi_versioning.html (4.3.1.4)

Please see my additional comments on the map file below.

On 28/05/2020 02:04, Gage Eads wrote:
> The stack library was first released in 19.05, and its interfaces have been
> stable since their initial introduction. This commit promotes the full
> interface to stable, starting with the 20.08 ABI.
> 
> Signed-off-by: Gage Eads <gage.eads@intel.com>
> ---
>  lib/librte_stack/rte_stack.h           | 29 -----------------------------
>  lib/librte_stack/rte_stack_lf.h        |  2 --
>  lib/librte_stack/rte_stack_std.h       |  3 ---
>  lib/librte_stack/rte_stack_version.map |  2 +-
>  4 files changed, 1 insertion(+), 35 deletions(-)
> 
> diff --git a/lib/librte_stack/rte_stack.h b/lib/librte_stack/rte_stack.h
> index 27ddb199e..343dd019a 100644
> --- a/lib/librte_stack/rte_stack.h
> +++ b/lib/librte_stack/rte_stack.h
> @@ -4,7 +4,6 @@
>  
>  /**
>   * @file rte_stack.h
> - * @b EXPERIMENTAL: this API may change without prior notice
>   *
>   * RTE Stack
>   *
> @@ -98,9 +97,6 @@ struct rte_stack {
>  #include "rte_stack_lf.h"
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Push several objects on the stack (MT-safe).
>   *
>   * @param s
> @@ -112,7 +108,6 @@ struct rte_stack {
>   * @return
>   *   Actual number of objects pushed (either 0 or *n*).
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
>  {
> @@ -126,9 +121,6 @@ rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
>  }
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Pop several objects from the stack (MT-safe).
>   *
>   * @param s
> @@ -140,7 +132,6 @@ rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
>   * @return
>   *   Actual number of objects popped (either 0 or *n*).
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>  {
> @@ -154,9 +145,6 @@ rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>  }
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Return the number of used entries in a stack.
>   *
>   * @param s
> @@ -164,7 +152,6 @@ rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>   * @return
>   *   The number of used entries in the stack.
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  rte_stack_count(struct rte_stack *s)
>  {
> @@ -177,9 +164,6 @@ rte_stack_count(struct rte_stack *s)
>  }
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Return the number of free entries in a stack.
>   *
>   * @param s
> @@ -187,7 +171,6 @@ rte_stack_count(struct rte_stack *s)
>   * @return
>   *   The number of free entries in the stack.
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  rte_stack_free_count(struct rte_stack *s)
>  {
> @@ -197,9 +180,6 @@ rte_stack_free_count(struct rte_stack *s)
>  }
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Create a new stack named *name* in memory.
>   *
>   * This function uses ``memzone_reserve()`` to allocate memory for a stack of
> @@ -226,28 +206,20 @@ rte_stack_free_count(struct rte_stack *s)
>   *    - ENOMEM - insufficient memory to create the stack
>   *    - ENAMETOOLONG - name size exceeds RTE_STACK_NAMESIZE
>   */
> -__rte_experimental
>  struct rte_stack *
>  rte_stack_create(const char *name, unsigned int count, int socket_id,
>  		 uint32_t flags);
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Free all memory used by the stack.
>   *
>   * @param s
>   *   Stack to free
>   */
> -__rte_experimental
>  void
>  rte_stack_free(struct rte_stack *s);
>  
>  /**
> - * @warning
> - * @b EXPERIMENTAL: this API may change without prior notice
> - *
>   * Lookup a stack by its name.
>   *
>   * @param name
> @@ -258,7 +230,6 @@ rte_stack_free(struct rte_stack *s);
>   *    - ENOENT - Stack with name *name* not found.
>   *    - EINVAL - *name* pointer is NULL.
>   */
> -__rte_experimental
>  struct rte_stack *
>  rte_stack_lookup(const char *name);
>  
> diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h
> index e67630c27..eb106e64e 100644
> --- a/lib/librte_stack/rte_stack_lf.h
> +++ b/lib/librte_stack/rte_stack_lf.h
> @@ -27,7 +27,6 @@
>   * @return
>   *   Actual number of objects enqueued.
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  __rte_stack_lf_push(struct rte_stack *s,
>  		    void * const *obj_table,
> @@ -66,7 +65,6 @@ __rte_stack_lf_push(struct rte_stack *s,
>   * @return
>   *   - Actual number of objects popped.
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  __rte_stack_lf_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>  {
> diff --git a/lib/librte_stack/rte_stack_std.h b/lib/librte_stack/rte_stack_std.h
> index 7142cbf8e..ae28add5c 100644
> --- a/lib/librte_stack/rte_stack_std.h
> +++ b/lib/librte_stack/rte_stack_std.h
> @@ -19,7 +19,6 @@
>   * @return
>   *   Actual number of objects pushed (either 0 or *n*).
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
>  		     unsigned int n)
> @@ -59,7 +58,6 @@ __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
>   * @return
>   *   Actual number of objects popped (either 0 or *n*).
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>  {
> @@ -94,7 +92,6 @@ __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
>   * @return
>   *   The number of used entries in the stack.
>   */
> -__rte_experimental
>  static __rte_always_inline unsigned int
>  __rte_stack_std_count(struct rte_stack *s)
>  {
> diff --git a/lib/librte_stack/rte_stack_version.map b/lib/librte_stack/rte_stack_version.map
> index 6662679c3..22c703d3b 100644
> --- a/lib/librte_stack/rte_stack_version.map
> +++ b/lib/librte_stack/rte_stack_version.map
> @@ -1,4 +1,4 @@
> -EXPERIMENTAL {
> +DPDK_20.0.3 {
>  	global:
>  
>  	rte_stack_create;
> 

Should be DPDK_21, the next major ABI version is v21. 



^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v14 0/2] support for VFIO-PCI VF token interface
  @ 2020-05-28  1:22  4% ` Haiyue Wang
  0 siblings, 0 replies; 200+ results
From: Haiyue Wang @ 2020-05-28  1:22 UTC (permalink / raw)
  To: dev, anatoly.burakov, thomas, jerinj, david.marchand, arybchenko
  Cc: Haiyue Wang

v14: Rebase the patch for 20.08 release note.

v13: Rename the EAL get VF token function, and leave the freebsd type as empty.

v12: support to vfio devices with VF token and no token.

v11: Use the eal parameter to pass the VF token, then not every PCI
     device needs to be specified with this token. Also no ABI issue
     now.

v10: Use the __rte_internal to mark the internal API changing.

v9: Rewrite the document.

v8: Update the document.

v7: Add the Fixes tag in uuid, the release note and help
    document.

v6: Drop the Fixes tag in uuid, since the file has been
    moved to another place, not suitable to apply on stable.
    And this is not a bug, just some kind of enhancement.

v5: 1. Add the VF token parse error handling.
    2. Split into two patches for different logic module.
    3. Add more comments into the code for explaining the design.
    4. Drop the ABI change workaround, this patch set focuses on code review.

v4: 1. Ignore rte_vfio_setup_device ABI check since it is
       for Linux driver use.

v3: Fix the Travis build failed:
           (1). rte_uuid.h:97:55: error: unknown type name ‘size_t’
           (2). rte_uuid.h:58:2: error: implicit declaration of function ‘memcpy’

v2: Fix the FreeBSD build error.

v1: Update the commit message.

RFC v2:
         Based on Vamsi's RFC v1, and Alex's patch for Qemu
        [https://lore.kernel.org/lkml/20200204161737.34696b91@w520.home/]: 
       Use the devarg to pass-down the VF token.

RFC v1: https://patchwork.dpdk.org/patch/66281/ by Vamsi.

Haiyue Wang (2):
  eal: add uuid dependent header files explicitly
  eal: support for VFIO-PCI VF token

 doc/guides/linux_gsg/linux_drivers.rst        | 35 ++++++++++++++++++-
 doc/guides/linux_gsg/linux_eal_parameters.rst |  4 +++
 doc/guides/rel_notes/release_20_08.rst        |  5 +++
 lib/librte_eal/common/eal_common_options.c    |  2 ++
 lib/librte_eal/common/eal_internal_cfg.h      |  2 ++
 lib/librte_eal/common/eal_options.h           |  2 ++
 lib/librte_eal/freebsd/eal.c                  |  4 +++
 lib/librte_eal/include/rte_eal.h              | 12 +++++++
 lib/librte_eal/include/rte_uuid.h             |  2 ++
 lib/librte_eal/linux/eal.c                    | 29 +++++++++++++++
 lib/librte_eal/linux/eal_vfio.c               | 19 ++++++++++
 lib/librte_eal/rte_eal_version.map            |  1 +
 12 files changed, 116 insertions(+), 1 deletion(-)

-- 
2.26.2


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH] stack: remove experimental tag from API
@ 2020-05-28  1:04  3% Gage Eads
  2020-05-28  5:46  3% ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Gage Eads @ 2020-05-28  1:04 UTC (permalink / raw)
  To: dev
  Cc: thomas, david.marchand, mdr, nhorman, phil.yang,
	honnappa.nagarahalli, olivier.matz

The stack library was first released in 19.05, and its interfaces have been
stable since their initial introduction. This commit promotes the full
interface to stable, starting with the 20.08 ABI.

Signed-off-by: Gage Eads <gage.eads@intel.com>
---
 lib/librte_stack/rte_stack.h           | 29 -----------------------------
 lib/librte_stack/rte_stack_lf.h        |  2 --
 lib/librte_stack/rte_stack_std.h       |  3 ---
 lib/librte_stack/rte_stack_version.map |  2 +-
 4 files changed, 1 insertion(+), 35 deletions(-)

diff --git a/lib/librte_stack/rte_stack.h b/lib/librte_stack/rte_stack.h
index 27ddb199e..343dd019a 100644
--- a/lib/librte_stack/rte_stack.h
+++ b/lib/librte_stack/rte_stack.h
@@ -4,7 +4,6 @@
 
 /**
  * @file rte_stack.h
- * @b EXPERIMENTAL: this API may change without prior notice
  *
  * RTE Stack
  *
@@ -98,9 +97,6 @@ struct rte_stack {
 #include "rte_stack_lf.h"
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Push several objects on the stack (MT-safe).
  *
  * @param s
@@ -112,7 +108,6 @@ struct rte_stack {
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
 {
@@ -126,9 +121,6 @@ rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Pop several objects from the stack (MT-safe).
  *
  * @param s
@@ -140,7 +132,6 @@ rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
@@ -154,9 +145,6 @@ rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Return the number of used entries in a stack.
  *
  * @param s
@@ -164,7 +152,6 @@ rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
  * @return
  *   The number of used entries in the stack.
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 rte_stack_count(struct rte_stack *s)
 {
@@ -177,9 +164,6 @@ rte_stack_count(struct rte_stack *s)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Return the number of free entries in a stack.
  *
  * @param s
@@ -187,7 +171,6 @@ rte_stack_count(struct rte_stack *s)
  * @return
  *   The number of free entries in the stack.
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 rte_stack_free_count(struct rte_stack *s)
 {
@@ -197,9 +180,6 @@ rte_stack_free_count(struct rte_stack *s)
 }
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Create a new stack named *name* in memory.
  *
  * This function uses ``memzone_reserve()`` to allocate memory for a stack of
@@ -226,28 +206,20 @@ rte_stack_free_count(struct rte_stack *s)
  *    - ENOMEM - insufficient memory to create the stack
  *    - ENAMETOOLONG - name size exceeds RTE_STACK_NAMESIZE
  */
-__rte_experimental
 struct rte_stack *
 rte_stack_create(const char *name, unsigned int count, int socket_id,
 		 uint32_t flags);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Free all memory used by the stack.
  *
  * @param s
  *   Stack to free
  */
-__rte_experimental
 void
 rte_stack_free(struct rte_stack *s);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
  * Lookup a stack by its name.
  *
  * @param name
@@ -258,7 +230,6 @@ rte_stack_free(struct rte_stack *s);
  *    - ENOENT - Stack with name *name* not found.
  *    - EINVAL - *name* pointer is NULL.
  */
-__rte_experimental
 struct rte_stack *
 rte_stack_lookup(const char *name);
 
diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h
index e67630c27..eb106e64e 100644
--- a/lib/librte_stack/rte_stack_lf.h
+++ b/lib/librte_stack/rte_stack_lf.h
@@ -27,7 +27,6 @@
  * @return
  *   Actual number of objects enqueued.
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 __rte_stack_lf_push(struct rte_stack *s,
 		    void * const *obj_table,
@@ -66,7 +65,6 @@ __rte_stack_lf_push(struct rte_stack *s,
  * @return
  *   - Actual number of objects popped.
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 __rte_stack_lf_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
diff --git a/lib/librte_stack/rte_stack_std.h b/lib/librte_stack/rte_stack_std.h
index 7142cbf8e..ae28add5c 100644
--- a/lib/librte_stack/rte_stack_std.h
+++ b/lib/librte_stack/rte_stack_std.h
@@ -19,7 +19,6 @@
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
 		     unsigned int n)
@@ -59,7 +58,6 @@ __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
@@ -94,7 +92,6 @@ __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
  * @return
  *   The number of used entries in the stack.
  */
-__rte_experimental
 static __rte_always_inline unsigned int
 __rte_stack_std_count(struct rte_stack *s)
 {
diff --git a/lib/librte_stack/rte_stack_version.map b/lib/librte_stack/rte_stack_version.map
index 6662679c3..22c703d3b 100644
--- a/lib/librte_stack/rte_stack_version.map
+++ b/lib/librte_stack/rte_stack_version.map
@@ -1,4 +1,4 @@
-EXPERIMENTAL {
+DPDK_20.0.3 {
 	global:
 
 	rte_stack_create;
-- 
2.13.6


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 21:43  4%       ` Thomas Monjalon
@ 2020-05-28  0:28  4%         ` Neil Horman
  0 siblings, 0 replies; 200+ results
From: Neil Horman @ 2020-05-28  0:28 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Harini Ramakrishnan, Fady Bader, dev, Omar Cardona,
	Pallavi Kadam, Ranjit Menon, dmitry.kozliuk, mdr

On Wed, May 27, 2020 at 11:43:49PM +0200, Thomas Monjalon wrote:
> 27/05/2020 23:27, Thomas Monjalon:
> > 27/05/2020 22:35, Neil Horman:
> > > On Wed, May 27, 2020 at 02:50:07PM +0200, Thomas Monjalon wrote:
> > > > +Cc more people
> > > > 
> > > > 27/05/2020 12:41, Fady Bader:
> > > > > What should we do with the ABI versioning in Windows ?
> > > > 
> > > > I think there are 2 questions here:
> > > > 
> > > > 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> > > > The decision must be clearly documented.
> > > > 
> > > My first notion, without any greater thought is "why wouldn't we".  ABI
> > > stability is OS agnostic.  If a symbol is considered stable, theres no reason
> > > that I can think of that it wouldn't be stable for each OS.
> > 
> > Technical reason + no need so far.
> > 
> > 
> > > > 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> > > > Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> > > > 
> > > Can you elaborate on what exactly the issue is here?  I presume by your comment
> > > above that visual studio either doesn't support symbol level versioning or
> > > doesn't support versioning at all?
> > 
> > I don't know how to implement the macros in rte_function_versioning.h for Windows.
> > 
> > 
> > > If thats the case, and there is a commitment to make dpdk buildable on windows,
> > > I suppose the only choice is to make a ifdef WINDOWS section of the
> > > rte_function_versioning.h file, and effectively turn all the macros into no-ops.
> > 
> > Yes that's the idea.
> > But we still need to implement either BIND_DEFAULT_SYMBOL or MAP_STATIC_SYMBOL
> > to alias the latest function version to the actual function symbol.
> 
> I've just found a tip in https://sourceware.org/binutils/docs/ld/WIN32.html
> It suggests to create a weak symbol:
> void foo() __attribute__((weak, alias ("foo_latestversion")));
> 
Ahh, you're using mingw, which appears to support versioning.  If the windows
equivalent of ld.so honors those versions, I would think the versioning bits
should almost just work (assuming that mingw supports all the used
__attirbutes__)

Neil

> 
> > > The BIND_DEFAULT_SYMBOL macro looks like it could still work, as MSVC has an
> > > alias linker command thats implementable via __pragma, but thats probably all we
> > > can do, unless there is some more robust versioning support that I can't find.
> > 
> > What is this pragma?
> > 
> > 
> > > Note we will also likely need to agument the makefiles/meson files so that the
> > > link stage doesn't pass the version script to the linker
> > 
> > Why not using the version script for exported symbols?
> > We are already doing it (.def file generated from .map).
> 
> 
> 
> 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 21:27  4%     ` Thomas Monjalon
  2020-05-27 21:43  4%       ` Thomas Monjalon
@ 2020-05-28  0:21  4%       ` Neil Horman
  1 sibling, 0 replies; 200+ results
From: Neil Horman @ 2020-05-28  0:21 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Harini Ramakrishnan, Fady Bader, dev, Omar Cardona,
	Pallavi Kadam, Ranjit Menon, dmitry.kozliuk, mdr

On Wed, May 27, 2020 at 11:27:12PM +0200, Thomas Monjalon wrote:
> 27/05/2020 22:35, Neil Horman:
> > On Wed, May 27, 2020 at 02:50:07PM +0200, Thomas Monjalon wrote:
> > > +Cc more people
> > > 
> > > 27/05/2020 12:41, Fady Bader:
> > > > What should we do with the ABI versioning in Windows ?
> > > 
> > > I think there are 2 questions here:
> > > 
> > > 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> > > The decision must be clearly documented.
> > > 
> > My first notion, without any greater thought is "why wouldn't we".  ABI
> > stability is OS agnostic.  If a symbol is considered stable, theres no reason
> > that I can think of that it wouldn't be stable for each OS.
> 
> Technical reason + no need so far.
> 
I'm not sure what you mean by technical reason.  As for need, I'd be careful of
that.  We already have the infrastructure, so if symbol versioning can be
implemented, we should.  We should only rip it out for windows if the
compiler/linker/loader doesn't support symbol versioning.  And I honestly don't
have a definitive answer on that

> 
> > > 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> > > Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> > > 
> > Can you elaborate on what exactly the issue is here?  I presume by your comment
> > above that visual studio either doesn't support symbol level versioning or
> > doesn't support versioning at all?
> 
> I don't know how to implement the macros in rte_function_versioning.h for Windows.
> 
Thats a question beyond my skill, especially given that I don't have a windows
compiler available

> 
> > If thats the case, and there is a commitment to make dpdk buildable on windows,
> > I suppose the only choice is to make a ifdef WINDOWS section of the
> > rte_function_versioning.h file, and effectively turn all the macros into no-ops.
> 
> Yes that's the idea.
> But we still need to implement either BIND_DEFAULT_SYMBOL or MAP_STATIC_SYMBOL
> to alias the latest function version to the actual function symbol.
> 
You can use alternate names, which is equivalent to clang/gccs
__attribute__((alias)):
https://stackoverflow.com/questions/53381461/does-visual-c-provide-a-language-construct-with-the-same-functionality-as-a

> > The BIND_DEFAULT_SYMBOL macro looks like it could still work, as MSVC has an
> > alias linker command thats implementable via __pragma, but thats probably all we
> > can do, unless there is some more robust versioning support that I can't find.
> 
> What is this pragma?
> 
See the link above

> 
> > Note we will also likely need to agument the makefiles/meson files so that the
> > link stage doesn't pass the version script to the linker
> 
> Why not using the version script for exported symbols?
> We are already doing it (.def file generated from .map).
> 
Well, if msvc doesn't support symbol versioning, I expect their linker won't
accept a linker version script, or are you using another compiler?
Neil

> 
> 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 21:27  4%     ` Thomas Monjalon
@ 2020-05-27 21:43  4%       ` Thomas Monjalon
  2020-05-28  0:28  4%         ` Neil Horman
  2020-05-28  0:21  4%       ` Neil Horman
  1 sibling, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-27 21:43 UTC (permalink / raw)
  To: Neil Horman, Harini Ramakrishnan, Fady Bader
  Cc: dev, Omar Cardona, Pallavi Kadam, Ranjit Menon, dmitry.kozliuk, mdr

27/05/2020 23:27, Thomas Monjalon:
> 27/05/2020 22:35, Neil Horman:
> > On Wed, May 27, 2020 at 02:50:07PM +0200, Thomas Monjalon wrote:
> > > +Cc more people
> > > 
> > > 27/05/2020 12:41, Fady Bader:
> > > > What should we do with the ABI versioning in Windows ?
> > > 
> > > I think there are 2 questions here:
> > > 
> > > 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> > > The decision must be clearly documented.
> > > 
> > My first notion, without any greater thought is "why wouldn't we".  ABI
> > stability is OS agnostic.  If a symbol is considered stable, theres no reason
> > that I can think of that it wouldn't be stable for each OS.
> 
> Technical reason + no need so far.
> 
> 
> > > 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> > > Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> > > 
> > Can you elaborate on what exactly the issue is here?  I presume by your comment
> > above that visual studio either doesn't support symbol level versioning or
> > doesn't support versioning at all?
> 
> I don't know how to implement the macros in rte_function_versioning.h for Windows.
> 
> 
> > If thats the case, and there is a commitment to make dpdk buildable on windows,
> > I suppose the only choice is to make a ifdef WINDOWS section of the
> > rte_function_versioning.h file, and effectively turn all the macros into no-ops.
> 
> Yes that's the idea.
> But we still need to implement either BIND_DEFAULT_SYMBOL or MAP_STATIC_SYMBOL
> to alias the latest function version to the actual function symbol.

I've just found a tip in https://sourceware.org/binutils/docs/ld/WIN32.html
It suggests to create a weak symbol:
void foo() __attribute__((weak, alias ("foo_latestversion")));


> > The BIND_DEFAULT_SYMBOL macro looks like it could still work, as MSVC has an
> > alias linker command thats implementable via __pragma, but thats probably all we
> > can do, unless there is some more robust versioning support that I can't find.
> 
> What is this pragma?
> 
> 
> > Note we will also likely need to agument the makefiles/meson files so that the
> > link stage doesn't pass the version script to the linker
> 
> Why not using the version script for exported symbols?
> We are already doing it (.def file generated from .map).




^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 20:35  7%   ` Neil Horman
@ 2020-05-27 21:27  4%     ` Thomas Monjalon
  2020-05-27 21:43  4%       ` Thomas Monjalon
  2020-05-28  0:21  4%       ` Neil Horman
  0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2020-05-27 21:27 UTC (permalink / raw)
  To: Neil Horman, Harini Ramakrishnan
  Cc: Fady Bader, dev, Omar Cardona, Pallavi Kadam, Ranjit Menon,
	dmitry.kozliuk, mdr

27/05/2020 22:35, Neil Horman:
> On Wed, May 27, 2020 at 02:50:07PM +0200, Thomas Monjalon wrote:
> > +Cc more people
> > 
> > 27/05/2020 12:41, Fady Bader:
> > > What should we do with the ABI versioning in Windows ?
> > 
> > I think there are 2 questions here:
> > 
> > 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> > The decision must be clearly documented.
> > 
> My first notion, without any greater thought is "why wouldn't we".  ABI
> stability is OS agnostic.  If a symbol is considered stable, theres no reason
> that I can think of that it wouldn't be stable for each OS.

Technical reason + no need so far.


> > 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> > Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> > 
> Can you elaborate on what exactly the issue is here?  I presume by your comment
> above that visual studio either doesn't support symbol level versioning or
> doesn't support versioning at all?

I don't know how to implement the macros in rte_function_versioning.h for Windows.


> If thats the case, and there is a commitment to make dpdk buildable on windows,
> I suppose the only choice is to make a ifdef WINDOWS section of the
> rte_function_versioning.h file, and effectively turn all the macros into no-ops.

Yes that's the idea.
But we still need to implement either BIND_DEFAULT_SYMBOL or MAP_STATIC_SYMBOL
to alias the latest function version to the actual function symbol.

> The BIND_DEFAULT_SYMBOL macro looks like it could still work, as MSVC has an
> alias linker command thats implementable via __pragma, but thats probably all we
> can do, unless there is some more robust versioning support that I can't find.

What is this pragma?


> Note we will also likely need to agument the makefiles/meson files so that the
> link stage doesn't pass the version script to the linker

Why not using the version script for exported symbols?
We are already doing it (.def file generated from .map).



^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 12:50  7% ` Thomas Monjalon
  2020-05-27 14:32  4%   ` Ray Kinsella
@ 2020-05-27 20:35  7%   ` Neil Horman
  2020-05-27 21:27  4%     ` Thomas Monjalon
  1 sibling, 1 reply; 200+ results
From: Neil Horman @ 2020-05-27 20:35 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Fady Bader, dev, Harini Ramakrishnan, Omar Cardona,
	Pallavi Kadam, Ranjit Menon, dmitry.kozliuk, mdr

On Wed, May 27, 2020 at 02:50:07PM +0200, Thomas Monjalon wrote:
> +Cc more people
> 
> 27/05/2020 12:41, Fady Bader:
> > What should we do with the ABI versioning in Windows ?
> 
> I think there are 2 questions here:
> 
> 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> The decision must be clearly documented.
> 
My first notion, without any greater thought is "why wouldn't we".  ABI
stability is OS agnostic.  If a symbol is considered stable, theres no reason
that I can think of that it wouldn't be stable for each OS.

> 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> 
Can you elaborate on what exactly the issue is here?  I presume by your comment
above that visual studio either doesn't support symbol level versioning or
doesn't support versioning at all?

If thats the case, and there is a commitment to make dpdk buildable on windows,
I suppose the only choice is to make a ifdef WINDOWS section of the
rte_function_versioning.h file, and effectively turn all the macros into no-ops.
The BIND_DEFAULT_SYMBOL macro looks like it could still work, as MSVC has an
alias linker command thats implementable via __pragma, but thats probably all we
can do, unless there is some more robust versioning support that I can't find.
Note we will also likely need to agument the makefiles/meson files so that the
link stage doesn't pass the version script to the linker 

Neil

> 
> 

^ permalink raw reply	[relevance 7%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 12:50  7% ` Thomas Monjalon
@ 2020-05-27 14:32  4%   ` Ray Kinsella
  2020-05-27 20:35  7%   ` Neil Horman
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-27 14:32 UTC (permalink / raw)
  To: Thomas Monjalon, Fady Bader
  Cc: dev, Harini Ramakrishnan, Omar Cardona, Pallavi Kadam,
	Ranjit Menon, dmitry.kozliuk, nhorman


Is my impression is the the Windows build is nascent, a fair one? 
Would we consider the entire build experimental for the moment?

Thanks,

Ray K

On 27/05/2020 13:50, Thomas Monjalon wrote:
> +Cc more people
> 
> 27/05/2020 12:41, Fady Bader:
>> What should we do with the ABI versioning in Windows ?
> 
> I think there are 2 questions here:
> 
> 1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
> The decision must be clearly documented.
> 
> 2/ How do we implement the macros in rte_function_versioning.h for Windows?
> Something needs to be done, otherwise we cannot compile libraries having some function versioning.
> 
> 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] ABI versioning in Windows
  2020-05-27 10:41  7% [dpdk-dev] ABI versioning in Windows Fady Bader
@ 2020-05-27 12:50  7% ` Thomas Monjalon
  2020-05-27 14:32  4%   ` Ray Kinsella
  2020-05-27 20:35  7%   ` Neil Horman
  0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2020-05-27 12:50 UTC (permalink / raw)
  To: Fady Bader
  Cc: dev, Harini Ramakrishnan, Omar Cardona, Pallavi Kadam,
	Ranjit Menon, dmitry.kozliuk, mdr, nhorman

+Cc more people

27/05/2020 12:41, Fady Bader:
> What should we do with the ABI versioning in Windows ?

I think there are 2 questions here:

1/ Do we want to maintain ABI compatibility on Windows like we do for Linux and FreeBSD?
The decision must be clearly documented.

2/ How do we implement the macros in rte_function_versioning.h for Windows?
Something needs to be done, otherwise we cannot compile libraries having some function versioning.



^ permalink raw reply	[relevance 7%]

* [dpdk-dev] ABI versioning in Windows
@ 2020-05-27 10:41  7% Fady Bader
  2020-05-27 12:50  7% ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Fady Bader @ 2020-05-27 10:41 UTC (permalink / raw)
  To: dev; +Cc: ocardona, Anand Rawat, Stephen Hemminger

What should we do with the ABI versioning in Windows ?

^ permalink raw reply	[relevance 7%]

* [dpdk-dev] [PATCH] version: 20.08-rc0
@ 2020-05-27  8:41  7% David Marchand
  0 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-27  8:41 UTC (permalink / raw)
  To: dev; +Cc: thomas

Start a new release cycle with empty release notes.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 .travis.yml                            |   2 +-
 ABI_VERSION                            |   2 +-
 VERSION                                |   2 +-
 doc/guides/rel_notes/index.rst         |   1 +
 doc/guides/rel_notes/release_20_08.rst | 139 +++++++++++++++++++++++++
 5 files changed, 143 insertions(+), 3 deletions(-)
 create mode 100644 doc/guides/rel_notes/release_20_08.rst

diff --git a/.travis.yml b/.travis.yml
index 2d2292ff64..14f8124233 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -36,7 +36,7 @@ script: ./.ci/${TRAVIS_OS_NAME}-build.sh
 
 env:
   global:
-    - REF_GIT_TAG=v20.02
+    - REF_GIT_TAG=v20.05
 
 jobs:
   include:
diff --git a/ABI_VERSION b/ABI_VERSION
index 204da679a1..a9ac8dacb0 100644
--- a/ABI_VERSION
+++ b/ABI_VERSION
@@ -1 +1 @@
-20.0.2
+20.0.3
diff --git a/VERSION b/VERSION
index 4e3f998d00..30bbcd61a4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-20.05.0
+20.08.0-rc0
diff --git a/doc/guides/rel_notes/index.rst b/doc/guides/rel_notes/index.rst
index 31278d2a8a..05c9d837a4 100644
--- a/doc/guides/rel_notes/index.rst
+++ b/doc/guides/rel_notes/index.rst
@@ -8,6 +8,7 @@ Release Notes
     :maxdepth: 1
     :numbered:
 
+    release_20_08
     release_20_05
     release_20_02
     release_19_11
diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst
new file mode 100644
index 0000000000..39064afbe9
--- /dev/null
+++ b/doc/guides/rel_notes/release_20_08.rst
@@ -0,0 +1,139 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+   Copyright 2020 The DPDK contributors
+
+.. include:: <isonum.txt>
+
+DPDK Release 20.08
+==================
+
+.. **Read this first.**
+
+   The text in the sections below explains how to update the release notes.
+
+   Use proper spelling, capitalization and punctuation in all sections.
+
+   Variable and config names should be quoted as fixed width text:
+   ``LIKE_THIS``.
+
+   Build the docs and view the output file to ensure the changes are correct::
+
+      make doc-guides-html
+
+      xdg-open build/doc/html/guides/rel_notes/release_20_08.html
+
+
+New Features
+------------
+
+.. This section should contain new features added in this release.
+   Sample format:
+
+   * **Add a title in the past tense with a full stop.**
+
+     Add a short 1-2 sentence description in the past tense.
+     The description should be enough to allow someone scanning
+     the release notes to understand the new feature.
+
+     If the feature adds a lot of sub-features you can use a bullet list
+     like this:
+
+     * Added feature foo to do something.
+     * Enhanced feature bar to do something else.
+
+     Refer to the previous release notes for examples.
+
+     Suggested order in release notes items:
+     * Core libs (EAL, mempool, ring, mbuf, buses)
+     * Device abstraction libs and PMDs
+       - ethdev (lib, PMDs)
+       - cryptodev (lib, PMDs)
+       - eventdev (lib, PMDs)
+       - etc
+     * Other libs
+     * Apps, Examples, Tools (if significant)
+
+     This section is a comment. Do not overwrite or remove it.
+     Also, make sure to start the actual text at the margin.
+     =========================================================
+
+
+Removed Items
+-------------
+
+.. This section should contain removed items in this release. Sample format:
+
+   * Add a short 1-2 sentence description of the removed item
+     in the past tense.
+
+   This section is a comment. Do not overwrite or remove it.
+   Also, make sure to start the actual text at the margin.
+   =========================================================
+
+
+API Changes
+-----------
+
+.. This section should contain API changes. Sample format:
+
+   * sample: Add a short 1-2 sentence description of the API change
+     which was announced in the previous releases and made in this release.
+     Start with a scope label like "ethdev:".
+     Use fixed width quotes for ``function_names`` or ``struct_names``.
+     Use the past tense.
+
+   This section is a comment. Do not overwrite or remove it.
+   Also, make sure to start the actual text at the margin.
+   =========================================================
+
+
+ABI Changes
+-----------
+
+.. This section should contain ABI changes. Sample format:
+
+   * sample: Add a short 1-2 sentence description of the ABI change
+     which was announced in the previous releases and made in this release.
+     Start with a scope label like "ethdev:".
+     Use fixed width quotes for ``function_names`` or ``struct_names``.
+     Use the past tense.
+
+   This section is a comment. Do not overwrite or remove it.
+   Also, make sure to start the actual text at the margin.
+   =========================================================
+
+* No ABI change that would break compatibility with 19.11.
+
+
+Known Issues
+------------
+
+.. This section should contain new known issues in this release. Sample format:
+
+   * **Add title in present tense with full stop.**
+
+     Add a short 1-2 sentence description of the known issue
+     in the present tense. Add information on any known workarounds.
+
+   This section is a comment. Do not overwrite or remove it.
+   Also, make sure to start the actual text at the margin.
+   =========================================================
+
+
+Tested Platforms
+----------------
+
+.. This section should contain a list of platforms that were tested
+   with this release.
+
+   The format is:
+
+   * <vendor> platform with <vendor> <type of devices> combinations
+
+     * List of CPU
+     * List of OS
+     * List of devices
+     * Other relevant details...
+
+   This section is a comment. Do not overwrite or remove it.
+   Also, make sure to start the actual text at the margin.
+   =========================================================
-- 
2.23.0


^ permalink raw reply	[relevance 7%]

* Re: [dpdk-dev] [PATCH 20.08 8/9] devtools: support python3 only
  2020-05-22 13:23  4% ` [dpdk-dev] [PATCH 20.08 8/9] devtools: support python3 only Louise Kilheeney
@ 2020-05-27  6:15  0%   ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-27  6:15 UTC (permalink / raw)
  To: Louise Kilheeney, dev; +Cc: Neil Horman


yes - I noticed the rpm packaging has become very pedantic about this of late.

Ray K

On 22/05/2020 14:23, Louise Kilheeney wrote:
> Changed script to explicitly use python3 only.
> 
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> 
> Signed-off-by: Louise Kilheeney <louise.kilheeney@intel.com>
> ---
>  devtools/update_version_map_abi.py | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
> index 616412a1c..58aa368f9 100755
> --- a/devtools/update_version_map_abi.py
> +++ b/devtools/update_version_map_abi.py
> @@ -1,4 +1,4 @@
> -#!/usr/bin/env python
> +#!/usr/bin/env python3
>  # SPDX-License-Identifier: BSD-3-Clause
>  # Copyright(c) 2019 Intel Corporation
>  
> @@ -9,7 +9,6 @@
>  from the devtools/update-abi.sh utility.
>  """
>  
> -from __future__ import print_function
>  import argparse
>  import sys
>  import re
> 
Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [dpdk-announce] DPDK 20.05 released
@ 2020-05-26 19:53  3% Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-26 19:53 UTC (permalink / raw)
  To: announce

A new release is available:
	https://fast.dpdk.org/rel/dpdk-20.05.tar.xz

It was a quite big release cycle:
	1304 commits from 189 authors
	1983 files changed, 145825 insertions(+), 29147 deletions(-)

It is not planned (yet) to start a maintenance branch for 20.05.
This version, as previous one (20.02), is ABI-compatible with 19.11.

Below are some new features, grouped by category.
* General
	- packet processing graph
	- ring synchronisation modes for VMs and containers
	- RCU API for deferred resource reclamation
	- telemetry rework
	- low overhead tracing framework
	- GCC 10 support
* Networking
	- flow aging API
	- driver for Intel Foxville I225
* Cryptography
	- ChaCha20-Poly1305 crypto algorithm
	- event mode in the example application ipsec-secgw
* Baseband
	- 5G driver for Intel FPGA-based N3000

More details in the release notes:
	http://doc.dpdk.org/guides/rel_notes/release_20_05.html


There are 69 new contributors (including authors, reviewers and testers).
Welcome to Andrea Arcangeli, Asim Jamshed, Cheng Peng, Christos Ricudis,
Dave Burley, Dong Zhou, Dongsheng Rong, Eugeny Parshutin, Evan Swanson,
Fady Bader, Farah Smith, Guy Tzalik, Hailin Xu, Igor Russkikh, JP Lee,
Jakub Neruda, James Fox, Jianwei Mei, Jiawei Wang, Jun W Zhou,
Juraj Linkeš, Karra Satwik, Kishore Padmanabha, Lihong Ma, Lijian Zhang,
Linsi Yuan, Louise Kilheeney, Lukasz Wojciechowski, Mairtin o Loingsigh,
Martin Spinler, Matteo Croce, Michael Haeuptle, Mike Baucom,
Mit Matelske, Mohsin Shaikh, Muhammad Ahmad, Muhammad Bilal, Nannan Lu,
Narcisa Vasile, Niall Power, Peter Spreadborough, Przemyslaw Patynowski,
Qi Fu, Real Valiquette, Rohit Raj, Roland Qi, Sarosh Arif, Satheesh Paul,
Shahaji Bhosle, Sharon Haroni, Sivaprasad Tummala, Souvik Dey,
Steven Webster, Tal Shnaiderman, Tasnim Bashar, Vadim Podovinnikov,
Venky Venkatesh, Vijaya Mohan Guvva, Vu Pham, Wentao Cui, Xi Zhang, 
Xiaoxiao Zeng, Xinfeng Zhao, Yash Sharma, Yu Jiang, Zalfresso-Jundzillo,
Zhihong Peng, Zhimin Huang, and Zhiwei He.

Below is the number of patches per company (with authors count):
	438     Intel (57)
	194     Mellanox (24)
	171     Marvell (21)
	 89     Broadcom (12)
	 75     Huawei (10)
	 49     Red Hat (7)
	 49     NXP (7)
	 35     Microsoft (3)
	 34     ARM (6)
	 28     Semihalf (1)
	 24     Samsung (2)
	 22     OKTET Labs (2)
	 11     Ericsson (1)
	 11     AMD (3)
	  9     Chelsio (1)
	  8     BIFIT (1)
	  6     Cisco (3)
	  5     Solarflare (1)
	  5     IBM (2)
	  5     Emumba (3)
	  5     6WIND (1)


The new features for 20.08 may be submitted during the next 17 days.
DPDK 20.08 should be released on early August, in a tight schedule:
	http://core.dpdk.org/roadmap#dates

Thanks everyone, and happy birthday to our RTE_MAGIC!



^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v3] doc: plan splitting the ethdev ops struct
  2020-05-25  9:11  0%     ` Andrew Rybchenko
@ 2020-05-26 13:55  0%       ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-26 13:55 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: dev, Neil Horman, John McNamara, Marko Kovacevic, dev,
	Jerin Jacob Kollanukkaran, David Marchand, mdr, olivier.matz,
	Andrew Rybchenko

25/05/2020 11:11, Andrew Rybchenko:
> On 5/25/20 2:18 AM, Thomas Monjalon wrote:
> > 04/03/2020 10:57, Ferruh Yigit:
> >> For the ABI compatibility it is better to hide internal data structures
> >> from the application as much as possible. But because of some inline
> >> functions 'struct eth_dev_ops' can't be hidden completely.
> >>
> >> Plan is to split the 'struct eth_dev_ops' into two as ones used by
> >> inline functions and ones not used, and hide the second part that not
> >> used by inline functions completely to the application.
> >>
> >> Because of ABI break the work will be done in 20.11
> >>
> >> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> >> ---
> >> +* ethdev: Split the ``struct eth_dev_ops`` struct to hide it as much as possible
> >> +  will be done in 20.11.
> >> +  Currently the ``struct eth_dev_ops`` struct is accessible by the application
> >> +  because some inline functions, like ``rte_eth_tx_descriptor_status()``,
> >> +  access the struct directly.
> >> +  The struct will be separate in two, the ops used by inline functions will be moved
> >> +  next to Rx/Tx burst functions, rest of the ``struct eth_dev_ops`` struct will be
> >> +  moved to header file for drivers to hide it from applications.
> > Acked-by: Thomas Monjalon <thomas@monjalon.net>
> 
> Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>

Acked-by: David Marchand <david.marchand@redhat.com>

Applied, thanks



^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH] doc: plan splitting the ethdev ops struct
  @ 2020-05-26 13:01  0%   ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-26 13:01 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: Ferruh Yigit, dev, Neil Horman, John McNamara, Marko Kovacevic,
	dpdk-dev, David Marchand, Andrew Rybchenko

18/02/2020 06:07, Jerin Jacob:
> On Mon, Feb 17, 2020 at 9:08 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> >
> > For the ABI compatibility it is better to hide internal data structures
> > from the application as much as possible. But because of some inline
> > functions 'struct eth_dev_ops' can't be hidden completely.
> >
> > Plan is to split the 'struct eth_dev_ops' into two as ones used by
> > inline functions and ones not used, and hide the second part that not
> > used by inline functions completely to the application.
> 
> It is a good improvement.  IMO, If anything used in fast-path it
> should be in ``struct rte_eth_dev``
> and rest can completely be moved to internal. In this case, if
> `rte_eth_tx_descriptor_status`
> not used on fastpath, Maybe we don't need to maintain the inline
> status and move completely
> to .c file.
> 
> Those may be specifics of the work. In general, this change looks good to me.
> 
> Acked-by: Jerin Jacob <jerinj@marvell.com>

This ack is missing from v3.
Jerin, please could you confirm on v3?




^ permalink raw reply	[relevance 0%]

* [dpdk-dev] DPDK-20.05 RC4 quick report
@ 2020-05-26  8:33  3% Peng, Yuan
  0 siblings, 0 replies; 200+ results
From: Peng, Yuan @ 2020-05-26  8:33 UTC (permalink / raw)
  To: dev

DPDK-20.05 RC4 quick report

  *   Totally create ~400+ new test cases for DPDK20.05 new features.
  *   Totally run 9976 cases, execution percentage is 100%, pass rate is about 99.5%, 2 new issues are found, no critical issues.
  *   Checked build and compile, no new issue found.
  *   Checked Basic NIC PMD(i40e, ixgbe, ice) PF & VF regression, new found 1 PF issue.
  *   Checked virtio regression test, no new bug is found.
  *   Checked cryptodev and compressdev regression, no new issus found so far.
  *   Checked NIC performance, no new issue found so far.
  *   Checked ABI test, no new issue found so far.
  *   Checked 20.05 new features: 1 new issue found so far.

Thank you.
Yuan.


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2] doc: update release notes for 20.05
@ 2020-05-25 19:11  4% John McNamara
  0 siblings, 0 replies; 200+ results
From: John McNamara @ 2020-05-25 19:11 UTC (permalink / raw)
  To: dev; +Cc: thomas, ktraynor, ciara.power, fiona.trahe, John McNamara

Fix grammar, spelling and formatting of DPDK 20.05 release notes.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
---

v2: * Addressed comments from mailing list.
    * Tried to add a more coherent grouping to the crypto changes.


 doc/guides/rel_notes/release_20_05.rst | 274 ++++++++++++++++-----------------
 1 file changed, 129 insertions(+), 145 deletions(-)

diff --git a/doc/guides/rel_notes/release_20_05.rst b/doc/guides/rel_notes/release_20_05.rst
index a61631e..3c6106b 100644
--- a/doc/guides/rel_notes/release_20_05.rst
+++ b/doc/guides/rel_notes/release_20_05.rst
@@ -56,38 +56,38 @@ New Features
      Also, make sure to start the actual text at the margin.
      =========================================================
 
-* **Added Trace Library and Tracepoints**
+* **Added Trace Library and Tracepoints.**
 
-  A native implementation of ``common trace format(CTF)`` based trace library
-  has been added to provide the ability to add tracepoints in
-  application/library to get runtime trace/debug information for control and
-  fast APIs with minimum impact on fast path performance.
-  Typical trace overhead is ~20 cycles and instrumentation overhead is 1 cycle.
-  Added tracepoints in ``EAL``, ``ethdev``, ``cryptodev``, ``eventdev`` and
-  ``mempool`` libraries for important functions.
+  Added a native implementation of the "common trace format" (CTF) based trace
+  library. This allows the user add tracepoints in an application/library to
+  get runtime trace/debug information for control, and fast APIs with minimum
+  impact on fast path performance. Typical trace overhead is ~20 cycles and
+  instrumentation overhead is 1 cycle.  Added tracepoints in ``EAL``,
+  ``ethdev``, ``cryptodev``, ``eventdev`` and ``mempool`` libraries for
+  important functions.
 
-* **Added APIs for RCU defer queue.**
+* **Added APIs for RCU defer queues.**
 
-  Added APIs to create and delete defer queue. Additional APIs are provided
+  Added APIs to create and delete defer queues. Additional APIs are provided
   to enqueue a deleted resource and reclaim the resource in the future.
-  These APIs help the application use lock-free data structures with
+  These APIs help an application use lock-free data structures with
   less effort.
 
 * **Added new API for rte_ring.**
 
-  * New synchronization modes for rte_ring.
+  * Introduced new synchronization modes for ``rte_ring``.
 
-  Introduced new optional MT synchronization modes for rte_ring:
-  Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
-  With these mode selected, rte_ring shows significant improvements for
-  average enqueue/dequeue times on overcommitted systems.
+    Introduced new optional MT synchronization modes for ``rte_ring``:
+    Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
+    With these modes selected, ``rte_ring`` shows significant improvements for
+    average enqueue/dequeue times on overcommitted systems.
 
-  * Added peek style API for rte_ring.
+  * Added peek style API for ``rte_ring``.
 
-  For rings with producer/consumer in RTE_RING_SYNC_ST, RTE_RING_SYNC_MT_HTS
-  mode, provide an ability to split enqueue/dequeue operation into two phases
-  (enqueue/dequeue start; enqueue/dequeue finish). That allows user to inspect
-  objects in the ring without removing them from it (aka MT safe peek).
+    For rings with producer/consumer in ``RTE_RING_SYNC_ST``, ``RTE_RING_SYNC_MT_HTS``
+    mode, provide the ability to split enqueue/dequeue operation into two phases
+    (enqueue/dequeue start and enqueue/dequeue finish). This allows the user to inspect
+    objects in the ring without removing them (aka MT safe peek).
 
 * **Added flow aging support.**
 
@@ -100,14 +100,16 @@ New Features
   * Added new query: ``rte_flow_get_aged_flows`` to get the aged-out flows
     contexts from the port.
 
-* **ethdev: Added a new value to link speed for 200Gbps**
+* **ethdev: Added a new value to link speed for 200Gbps.**
 
-* **Updated Amazon ena driver.**
+  Added a new ethdev value to for link speeds of 200Gbps.
 
-  Updated ena PMD with new features and improvements, including:
+* **Updated the Amazon ena driver.**
+
+  Updated the ena PMD with new features and improvements, including:
 
   * Added support for large LLQ (Low-latency queue) headers.
-  * Added Tx drops as new extended driver statistic.
+  * Added Tx drops as a new extended driver statistic.
   * Added support for accelerated LLQ mode.
   * Handling of the 0 length descriptors on the Rx path.
 
@@ -115,14 +117,14 @@ New Features
 
   Updated Hisilicon hns3 driver with new features and improvements, including:
 
-  * Added support for TSO
-  * Added support for configuring promiscuous and allmulticast mode for VF
+  * Added support for TSO.
+  * Added support for configuring promiscuous and allmulticast mode for VF.
 
 * **Updated Intel i40e driver.**
 
   Updated i40e PMD with new features and improvements, including:
 
-  * Enable MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
+  * Enabled MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
   * Added support for RSS using L3/L4 source/destination only.
   * Added support for setting hash function in rte flow.
 
@@ -139,14 +141,14 @@ New Features
   Updated the Intel ice driver with new features and improvements, including:
 
   * Added support for DCF (Device Config Function) feature.
-  * Added switch filter support for intel DCF.
+  * Added switch filter support for Intel DCF.
 
 * **Updated Marvell OCTEON TX2 ethdev driver.**
 
-  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support with
-  below features.
+  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support,
+  including:
 
-  * Hierarchial Scheduling with DWRR and SP.
+  * Hierarchical Scheduling with DWRR and SP.
   * Single rate - Two color, Two rate - Three color shaping.
 
 * **Updated Mellanox mlx5 driver.**
@@ -158,14 +160,27 @@ New Features
   * Added support for configuring Hairpin queue data buffer size.
   * Added support for jumbo frame size (9K MTU) in Multi-Packet RQ mode.
   * Removed flow rules caching for memory saving and compliance with ethdev API.
-  * Optimized the memory consumption of flow.
-  * Added support for flow aging based on hardware counter.
-  * Added support for flow pattern with wildcard VLAN item (without VID value).
-  * Updated support for matching on GTP header, added match on GTP flags.
+  * Optimized the memory consumption of flows.
+  * Added support for flow aging based on hardware counters.
+  * Added support for flow patterns with wildcard VLAN items (without VID value).
+  * Updated support for matching on GTP headers, added match on GTP flags.
+
+* **Added a new driver for Intel Foxville I225 devices.**
+
+  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
+  :doc:`../nics/igc` NIC guide for more details on this new driver.
+
+* **Updated Broadcom bnxt driver.**
+
+  Updated the Broadcom bnxt driver with new features and improvements, including:
+
+  * Added support for host based flow table management.
+  * Added flow counters to extended stats.
+  * Added PCI function stats to extended stats.
 
 * **Added Chacha20-Poly1305 algorithm to Cryptodev API.**
 
-  Chacha20-Poly1305 AEAD algorithm can now be supported in Cryptodev.
+  Added support for Chacha20-Poly1305 AEAD algorithm in Cryptodev.
 
 * **Updated the AESNI MB crypto PMD.**
 
@@ -175,7 +190,7 @@ New Features
 
 * **Updated the AESNI GCM crypto PMD.**
 
-  * Added support for intel-ipsec-mb version 0.54.
+  Added support for intel-ipsec-mb version 0.54.
 
 * **Updated the ZUC crypto PMD.**
 
@@ -186,60 +201,51 @@ New Features
 
 * **Updated the SNOW3G crypto PMD.**
 
-  * Added support for intel-ipsec-mb version 0.54.
+  Added support for intel-ipsec-mb version 0.54.
 
 * **Updated the KASUMI crypto PMD.**
 
-  * Added support for intel-ipsec-mb version 0.54.
-
-* **Added a new driver for Intel Foxville I225 devices.**
-
-  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
-  :doc:`../nics/igc` NIC guide for more details on this new driver.
-
-* **Updated Broadcom bnxt driver.**
-
-  Updated Broadcom bnxt driver with new features and improvements, including:
+  Added support for intel-ipsec-mb version 0.54.
 
-  * Added support for host based flow table management
-  * Added flow counters to extended stats
-  * Added PCI function stats to extended stats
+* **Updated the QuickAssist Technology (QAT) Crypto PMD.**
 
-* **Added handling of mixed crypto algorithms in QAT PMD for GEN2.**
+  * Added handling of mixed crypto algorithms in QAT PMD for GEN2.
 
-  Enabled handling of mixed algorithms in encrypted digest hash-cipher
-  (generation) and cipher-hash (verification) requests in QAT PMD
-  when running on GEN2 QAT hardware with particular firmware versions
-  (GEN3 support was added in DPDK 20.02).
+    Enabled handling of mixed algorithms in encrypted digest hash-cipher
+    (generation) and cipher-hash (verification) requests in QAT PMD when
+    running on GEN2 QAT hardware with particular firmware versions (GEN3
+    support was added in DPDK 20.02).
 
-* **Added plain SHA-1,224,256,384,512 support to QAT PMD.**
+  * Added plain SHA-1, 224, 256, 384, 512 support to QAT PMD.
 
-  Added support for plain SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 hashes
-  to QAT PMD.
+    Added support for plain SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512
+    hashes to QAT PMD.
 
-* **Added AES-GCM/GMAC J0 support to QAT PMD.**
+  * Added AES-GCM/GMAC J0 support to QAT PMD.
 
-  Added support for AES-GCM/GMAC J0 to Intel QuickAssist Technology PMD. User can
-  use this feature by passing zero length IV in appropriate xform. For more
-  info please refer to rte_crypto_sym.h J0 comments.
+    Added support for AES-GCM/GMAC J0 to Intel QuickAssist Technology PMD. The
+    user can use this feature by passing a zero length IV in the appropriate
+    xform. For more information refer to the doxygen comments in
+    ``rte_crypto_sym.h`` for ``J0``.
 
-* **Updated the QAT PMD for AES-256 DOCSIS.**
+  * Updated the QAT PMD for AES-256 DOCSIS.
 
-  Added AES-256 DOCSIS algorithm support to QAT PMD.
+    Added AES-256 DOCSIS algorithm support to the QAT PMD.
 
-* **Added QAT intermediate buffer too small handling in QAT compression PMD.**
+* **Updated the QuickAssist Technology (QAT) Compression PMD.**
 
-  Added a special way of buffer handling when internal QAT intermediate buffer
-  is too small for Huffman dynamic compression operation. Instead of falling
+  Added special buffer handling when the internal QAT intermediate buffer is
+  too small for the Huffman dynamic compression operation. Instead of falling
   back to fixed compression, the operation is now split into multiple smaller
-  dynamic compression requests (possible to execute on QAT) and their results
-  are then combined and copied into the output buffer. This is not possible if
-  any checksum calculation was requested - in such case the code falls back to
-  fixed compression as before.
+  dynamic compression requests (which are possible to execute on QAT) and
+  their results are then combined and copied into the output buffer. This is
+  not possible if any checksum calculation was requested - in such cases the
+  code falls back to fixed compression as before.
 
 * **Updated the turbo_sw bbdev PMD.**
 
-  Supported large size code blocks which does not fit in one mbuf segment.
+  Added support for large size code blocks which do not fit in one mbuf
+  segment.
 
 * **Added Intel FPGA_5GNR_FEC bbdev PMD.**
 
@@ -255,31 +261,32 @@ New Features
     accurate load balancing.
   * Improved behavior on high-core count systems.
   * Reduced latency in low-load situations.
-  * Extended DSW xstats with migration- and load-related statistics.
+  * Extended DSW xstats with migration and load-related statistics.
 
-* **Updated ipsec-secgw sample application with following features.**
+* **Updated ipsec-secgw sample application.**
 
-  * Updated ipsec-secgw application to add event based packet processing.
-    The worker thread(s) would receive events and submit them back to the
-    event device after the processing. This way, multicore scaling and HW
-    assisted scheduling is achieved by making use of the event device
-    capabilities. The event mode currently supports only inline IPsec
-    protocol offload.
+  Updated the ``ipsec-secgw`` sample application with the following features:
 
-  * Updated ipsec-secgw application to support key sizes for AES-192-CBC,
-    AES-192-GCM, AES-256-GCM algorithms.
+  * Updated the application to add event based packet processing. The worker
+    thread(s) would receive events and submit them back to the event device
+    after the processing. This way, multicore scaling and HW assisted
+    scheduling is achieved by making use of the event device capabilities. The
+    event mode currently only supports inline IPsec protocol offload.
 
-  * Added IPsec inbound load-distribution support for ipsec-secgw application
-    using NIC load distribution feature(Flow Director).
+  * Updated the application to support key sizes for AES-192-CBC, AES-192-GCM,
+    AES-256-GCM algorithms.
+
+  * Added IPsec inbound load-distribution support for the application using
+    NIC load distribution feature (Flow Director).
 
 * **Updated Telemetry Library.**
 
-  The updated Telemetry library has many improvements on the original version
-  to make it more accessible and scalable:
+  The updated Telemetry library has been significantly improved in relation to
+  the original version to make it more accessible and scalable:
 
-  * It enables DPDK libraries and applications provide their own specific
-    telemetry information, rather than being limited to what could be reported
-    through the metrics library.
+  * It now enables DPDK libraries and applications to provide their own
+    specific telemetry information, rather than being limited to what could be
+    reported through the metrics library.
 
   * It is no longer dependent on the external Jansson library, which allows
     Telemetry be enabled by default.
@@ -287,61 +294,53 @@ New Features
   * The socket handling has been simplified making it easier for clients to
     connect and retrieve information.
 
-* **Added rte_graph library.**
+* **Added the rte_graph library.**
+
+  The Graph architecture abstracts the data processing functions as ``nodes``
+  and ``links`` them together to create a complex ``graph`` to enable
+  reusable/modular data processing functions. The graph library provides APIs
+  to enable graph framework operations such as create, lookup, dump and
+  destroy on graph and node operations such as clone, edge update, and edge
+  shrink, etc. The API also allows the creation of a stats cluster to monitor
+  per graph and per node statistics.
 
-  Graph architecture abstracts the data processing functions as a ``node`` and
-  ``links`` them together to create a complex ``graph`` to enable reusable/modular
-  data processing functions. The graph library provides API to enable graph
-  framework operations such as create, lookup, dump and destroy on graph and node
-  operations such as clone, edge update, and edge shrink, etc.
-  The API also allows to create the stats cluster to monitor per graph and per node stats.
+* **Added the rte_node library.**
 
-* **Added rte_node library which consists of a set of packet processing nodes.**
+  Added the ``rte_node`` library that consists of nodes used by the
+  ``rte_graph`` library. Each node performs a specific packet processing
+  function based on the application configuration.
 
-  The rte_node library that consists of nodes used by rte_graph library. Each
-  node performs a specific packet processing function based on application
-  configuration. The following nodes are added:
+  The following nodes are added:
 
-  * Null node: Skeleton node that defines the general structure of a node.
-  * Ethernet device node: Consists of ethernet Rx/Tx nodes as well as ethernet
+  * Null node: A skeleton node that defines the general structure of a node.
+  * Ethernet device node: Consists of Ethernet Rx/Tx nodes as well as Ethernet
     control APIs.
-  * IPv4 lookup node: Consists of ipv4 extract and lpm lookup node. Routes can
-    be configured by the application through ``rte_node_ip4_route_add`` function.
-  * IPv4 rewrite node: Consists of ipv4 and ethernet header rewrite functionality
-    that can be configured through ``rte_node_ip4_rewrite_add`` function.
+  * IPv4 lookup node: Consists of IPv4 extract and LPM lookup node. Routes can
+    be configured by the application through the ``rte_node_ip4_route_add``
+    function.
+  * IPv4 rewrite node: Consists of IPv4 and Ethernet header rewrite
+    functionality that can be configured through the
+    ``rte_node_ip4_rewrite_add`` function.
   * Packet drop node: Frees the packets received to their respective mempool.
 
 * **Added new l3fwd-graph sample application.**
 
-  Added an example application ``l3fwd-graph``. It demonstrates the usage of graph
-  library and node library for packet processing. In addition to the library usage
-  demonstration, this application can use for performance comparison with existing
-  ``l3fwd`` (The static code without any nodes) with the modular ``l3fwd-graph``
-  approach.
+  Added an example application ``l3fwd-graph``. This demonstrates the usage of
+  the graph library and node library for packet processing. In addition to the
+  library usage demonstration, this application can be used for performance
+  comparison of the existing ``l3fwd`` (static code without any nodes) with
+  the modular ``l3fwd-graph`` approach.
 
-* **Updated testpmd application.**
+* **Updated the testpmd application.**
 
-  * Added a new cmdline option ``--rx-mq-mode`` which can be used to test PMD's
-    behaviour on handling Rx mq mode.
+  Added a new cmdline option ``--rx-mq-mode`` which can be used to test PMD's
+  behaviour on handling Rx mq mode.
 
 * **Added support for GCC 10.**
 
   Added support for building with GCC 10.1.
 
 
-Removed Items
--------------
-
-.. This section should contain removed items in this release. Sample format:
-
-   * Add a short 1-2 sentence description of the removed item
-     in the past tense.
-
-   This section is a comment. Do not overwrite or remove it.
-   Also, make sure to start the actual text at the margin.
-   =========================================================
-
-
 API Changes
 -----------
 
@@ -358,7 +357,7 @@ API Changes
    =========================================================
 
 * mempool: The API of ``rte_mempool_populate_iova()`` and
-  ``rte_mempool_populate_virt()`` changed to return 0 instead of -EINVAL
+  ``rte_mempool_populate_virt()`` changed to return 0 instead of ``-EINVAL``
   when there is not enough room to store one object.
 
 
@@ -380,21 +379,6 @@ ABI Changes
 * No ABI change that would break compatibility with DPDK 20.02 and 19.11.
 
 
-Known Issues
-------------
-
-.. This section should contain new known issues in this release. Sample format:
-
-   * **Add title in present tense with full stop.**
-
-     Add a short 1-2 sentence description of the known issue
-     in the present tense. Add information on any known workarounds.
-
-   This section is a comment. Do not overwrite or remove it.
-   Also, make sure to start the actual text at the margin.
-   =========================================================
-
-
 Tested Platforms
 ----------------
 
-- 
2.7.5


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v3] doc: plan splitting the ethdev ops struct
    2020-05-24 23:18  0%   ` Thomas Monjalon
@ 2020-05-25 10:24  0%   ` David Marchand
  1 sibling, 0 replies; 200+ results
From: David Marchand @ 2020-05-25 10:24 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Neil Horman, John McNamara, Marko Kovacevic, dev,
	Jerin Jacob Kollanukkaran, Thomas Monjalon, Andrew Rybchenko

On Wed, Mar 4, 2020 at 10:57 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>
> For the ABI compatibility it is better to hide internal data structures
> from the application as much as possible. But because of some inline
> functions 'struct eth_dev_ops' can't be hidden completely.
>
> Plan is to split the 'struct eth_dev_ops' into two as ones used by
> inline functions and ones not used, and hide the second part that not
> used by inline functions completely to the application.
>
> Because of ABI break the work will be done in 20.11
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

Acked-by: David Marchand <david.marchand@redhat.com>


-- 
David Marchand


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3] doc: plan splitting the ethdev ops struct
  2020-05-24 23:18  0%   ` Thomas Monjalon
@ 2020-05-25  9:11  0%     ` Andrew Rybchenko
  2020-05-26 13:55  0%       ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Andrew Rybchenko @ 2020-05-25  9:11 UTC (permalink / raw)
  To: Thomas Monjalon, Ferruh Yigit
  Cc: Neil Horman, John McNamara, Marko Kovacevic, dev,
	Jerin Jacob Kollanukkaran, David Marchand, mdr, olivier.matz

On 5/25/20 2:18 AM, Thomas Monjalon wrote:
> 04/03/2020 10:57, Ferruh Yigit:
>> For the ABI compatibility it is better to hide internal data structures
>> from the application as much as possible. But because of some inline
>> functions 'struct eth_dev_ops' can't be hidden completely.
>>
>> Plan is to split the 'struct eth_dev_ops' into two as ones used by
>> inline functions and ones not used, and hide the second part that not
>> used by inline functions completely to the application.
>>
>> Because of ABI break the work will be done in 20.11
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> +* ethdev: Split the ``struct eth_dev_ops`` struct to hide it as much as possible
>> +  will be done in 20.11.
>> +  Currently the ``struct eth_dev_ops`` struct is accessible by the application
>> +  because some inline functions, like ``rte_eth_tx_descriptor_status()``,
>> +  access the struct directly.
>> +  The struct will be separate in two, the ops used by inline functions will be moved
>> +  next to Rx/Tx burst functions, rest of the ``struct eth_dev_ops`` struct will be
>> +  moved to header file for drivers to hide it from applications.
> Acked-by: Thomas Monjalon <thomas@monjalon.net>

Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>


^ permalink raw reply	[relevance 0%]

* [dpdk-dev] DPDK-20.05 RC3 quick report
@ 2020-05-25  4:16  3% Peng, Yuan
  0 siblings, 0 replies; 200+ results
From: Peng, Yuan @ 2020-05-25  4:16 UTC (permalink / raw)
  To: dev

DPDK-20.05 RC3 quick report

  *   Totally create ~400+ new test cases for DPDK20.05 new features.
  *   Totally 10203 cases, execution percentage is 100%, pass rate is about 99%, 8 new issues are found, including a high level issue(has been fixed and verified).
  *   Checked build and compile, found 1 new issue, now fixed and verified.
  *   Checked Basic NIC PMD(i40e, ixgbe, ice) PF & VF regression, new found 5 PF issue.
  *   Checked virtio regression test, no new bug is found.
  *   Checked cryptodev and compressdev regression, no new issus found so far.
  *   Checked NIC performance, no new issue found so far.
  *   Checked ABI test, no new issue found so far.
  *   Checked 20.05 new features: 2 new issue found so far.

Thank you.
Yuan.


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v5 01/11] eal: replace rte_page_sizes with a set of constants
  @ 2020-05-25  0:37  4%   ` Dmitry Kozlyuk
  0 siblings, 0 replies; 200+ results
From: Dmitry Kozlyuk @ 2020-05-25  0:37 UTC (permalink / raw)
  To: dev
  Cc: Dmitry Malloy, Narcisa Ana Maria Vasile, Fady Bader,
	Tal Shnaiderman, Dmitry Kozlyuk, Jerin Jacob, Anatoly Burakov

Clang on Windows follows MS ABI where enum values are limited to 2^31-1.
Enum rte_page_sizes has members valued above this limit, which get
wrapped to zero, resulting in compilation error (duplicate values in
enum). Using MS ABI is mandatory for Windows EAL to call Win32 APIs.

Remove rte_page_sizes and replace its values with #define's.
This enumeration is not used in public API, so there's no ABI breakage.

Suggested-by: Jerin Jacob <jerinjacobk@gmail.com>
Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---

Release notes for 20.08 don't exits yet, so not adding anything.

 lib/librte_eal/include/rte_memory.h | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/lib/librte_eal/include/rte_memory.h b/lib/librte_eal/include/rte_memory.h
index 3d8d0bd69..65374d53a 100644
--- a/lib/librte_eal/include/rte_memory.h
+++ b/lib/librte_eal/include/rte_memory.h
@@ -24,19 +24,16 @@ extern "C" {
 #include <rte_config.h>
 #include <rte_fbarray.h>
 
-__extension__
-enum rte_page_sizes {
-	RTE_PGSIZE_4K    = 1ULL << 12,
-	RTE_PGSIZE_64K   = 1ULL << 16,
-	RTE_PGSIZE_256K  = 1ULL << 18,
-	RTE_PGSIZE_2M    = 1ULL << 21,
-	RTE_PGSIZE_16M   = 1ULL << 24,
-	RTE_PGSIZE_256M  = 1ULL << 28,
-	RTE_PGSIZE_512M  = 1ULL << 29,
-	RTE_PGSIZE_1G    = 1ULL << 30,
-	RTE_PGSIZE_4G    = 1ULL << 32,
-	RTE_PGSIZE_16G   = 1ULL << 34,
-};
+#define RTE_PGSIZE_4K   (1ULL << 12)
+#define RTE_PGSIZE_64K  (1ULL << 16)
+#define RTE_PGSIZE_256K (1ULL << 18)
+#define RTE_PGSIZE_2M   (1ULL << 21)
+#define RTE_PGSIZE_16M  (1ULL << 24)
+#define RTE_PGSIZE_256M (1ULL << 28)
+#define RTE_PGSIZE_512M (1ULL << 29)
+#define RTE_PGSIZE_1G   (1ULL << 30)
+#define RTE_PGSIZE_4G   (1ULL << 32)
+#define RTE_PGSIZE_16G  (1ULL << 34)
 
 #define SOCKET_ID_ANY -1                    /**< Any NUMA socket. */
 
-- 
2.25.4


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v2] doc: deprication notice to mark tm spec as experimental
  2020-05-21 10:49  0%     ` Jerin Jacob
  2020-05-24 20:58  0%       ` Nithin Kumar D
@ 2020-05-24 23:33  0%       ` Thomas Monjalon
  1 sibling, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-24 23:33 UTC (permalink / raw)
  To: Nithin Dabilpuram
  Cc: Dumitrescu, Cristian, dev, Nithin Dabilpuram, Yigit, Ferruh,
	Richardson, Bruce, bluca, Singh, Jasvinder, arybchenko, Kinsella,
	Ray, nhorman, ktraynor, david.marchand, Mcnamara, John,
	Kovacevic, Marko, dev, jerinj, kkanas, Jerin Jacob

> > > From: Nithin Dabilpuram <ndabilpuram@marvell.com>
> > >
> > > Based on the discussion in mail thread, it is concluded that
> > > all traffic manager API's (rte_tm.h) need to be marked experimental
> > > till few more releases to support further improvements to spec.
> > >
> > > https://mails.dpdk.org/archives/dev/2020-April/164970.html
> > >
> > > Adding deprication notice for the same in advance.
> > >
> > > Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
> > > ---
> > > +* traffic manager: All traffic manager API's in ``rte_tm.h`` were mistakenly
> > > made
> > > +  abi stable in the v19.11 release. The TM maintainer and other contributor's
> > > have
> > > +  agreed to keep the TM API's as experimental in expectation of additional
> > > spec
> > > +  improvements. Therefore, all API's in ``rte_tm.h`` will be marked back as
> > > +  experimental in v20.11 DPDK release. For more details, please see `the
> > > thread
> > > +  <https://mails.dpdk.org/archives/dev/2020-April/164970.html>`_.
> >
> > Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
> Acked-by: Jerin Jacob <jerinj@marvell.com>
Acked-by: Ray Kinsella <mdr@ashroe.eu>

Applied, thanks



^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3] doc: plan splitting the ethdev ops struct
  @ 2020-05-24 23:18  0%   ` Thomas Monjalon
  2020-05-25  9:11  0%     ` Andrew Rybchenko
  2020-05-25 10:24  0%   ` David Marchand
  1 sibling, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-24 23:18 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Neil Horman, John McNamara, Marko Kovacevic, dev,
	Jerin Jacob Kollanukkaran, David Marchand, Andrew Rybchenko, mdr,
	olivier.matz

04/03/2020 10:57, Ferruh Yigit:
> For the ABI compatibility it is better to hide internal data structures
> from the application as much as possible. But because of some inline
> functions 'struct eth_dev_ops' can't be hidden completely.
> 
> Plan is to split the 'struct eth_dev_ops' into two as ones used by
> inline functions and ones not used, and hide the second part that not
> used by inline functions completely to the application.
> 
> Because of ABI break the work will be done in 20.11
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> +* ethdev: Split the ``struct eth_dev_ops`` struct to hide it as much as possible
> +  will be done in 20.11.
> +  Currently the ``struct eth_dev_ops`` struct is accessible by the application
> +  because some inline functions, like ``rte_eth_tx_descriptor_status()``,
> +  access the struct directly.
> +  The struct will be separate in two, the ops used by inline functions will be moved
> +  next to Rx/Tx burst functions, rest of the ``struct eth_dev_ops`` struct will be
> +  moved to header file for drivers to hide it from applications.

Acked-by: Thomas Monjalon <thomas@monjalon.net>



^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v2] doc: deprication notice to mark tm spec as experimental
  2020-05-21 10:49  0%     ` Jerin Jacob
@ 2020-05-24 20:58  0%       ` Nithin Kumar D
  2020-05-24 23:33  0%       ` Thomas Monjalon
  1 sibling, 0 replies; 200+ results
From: Nithin Kumar D @ 2020-05-24 20:58 UTC (permalink / raw)
  To: Jerin Jacob
  Cc: Dumitrescu, Cristian, Yigit, Ferruh, Richardson, Bruce, thomas,
	bluca, Singh, Jasvinder, arybchenko, Kinsella, Ray, nhorman,
	ktraynor, david.marchand, Mcnamara, John, Kovacevic, Marko, dev,
	jerinj, kkanas, Nithin Dabilpuram

Hi Thomas,

Can this be merged as it was discussed and agreed long back.

--
Nithin

On Thu, May 21, 2020, 16:19 Jerin Jacob <jerinjacobk@gmail.com> wrote:

> On Tue, May 5, 2020 at 2:25 PM Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: Nithin Dabilpuram <nithind1988@gmail.com>
> > > Sent: Tuesday, May 5, 2020 9:08 AM
> > > To: Yigit, Ferruh <ferruh.yigit@intel.com>; Richardson, Bruce
> > > <bruce.richardson@intel.com>; Dumitrescu, Cristian
> > > <cristian.dumitrescu@intel.com>; thomas@monjalon.net;
> > > bluca@debian.org; Singh, Jasvinder <jasvinder.singh@intel.com>;
> > > arybchenko@solarflare.com; Kinsella, Ray <ray.kinsella@intel.com>;
> > > nhorman@tuxdriver.com; ktraynor@redhat.com;
> > > david.marchand@redhat.com; Mcnamara, John
> > > <john.mcnamara@intel.com>; Kovacevic, Marko
> > > <marko.kovacevic@intel.com>
> > > Cc: dev@dpdk.org; jerinj@marvell.com; kkanas@marvell.com; Nithin
> > > Dabilpuram <ndabilpuram@marvell.com>
> > > Subject: [PATCH v2] doc: deprication notice to mark tm spec as
> experimental
> > >
> > > From: Nithin Dabilpuram <ndabilpuram@marvell.com>
> > >
> > > Based on the discussion in mail thread, it is concluded that
> > > all traffic manager API's (rte_tm.h) need to be marked experimental
> > > till few more releases to support further improvements to spec.
> > >
> > > https://mails.dpdk.org/archives/dev/2020-April/164970.html
> > >
> > > Adding deprication notice for the same in advance.
> > >
> > > Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
> > > ---
> > >  doc/guides/rel_notes/deprecation.rst | 7 +++++++
> > >  1 file changed, 7 insertions(+)
> > >
> > > diff --git a/doc/guides/rel_notes/deprecation.rst
> > > b/doc/guides/rel_notes/deprecation.rst
> > > index 1339f54..2c76f36 100644
> > > --- a/doc/guides/rel_notes/deprecation.rst
> > > +++ b/doc/guides/rel_notes/deprecation.rst
> > > @@ -118,3 +118,10 @@ Deprecation Notices
> > >    Python 2 support will be completely removed in 20.11.
> > >    In 20.08, explicit deprecation warnings will be displayed when
> running
> > >    scripts with Python 2.
> > > +
> > > +* traffic manager: All traffic manager API's in ``rte_tm.h`` were
> mistakenly
> > > made
> > > +  abi stable in the v19.11 release. The TM maintainer and other
> contributor's
> > > have
> > > +  agreed to keep the TM API's as experimental in expectation of
> additional
> > > spec
> > > +  improvements. Therefore, all API's in ``rte_tm.h`` will be marked
> back as
> > > +  experimental in v20.11 DPDK release. For more details, please see
> `the
> > > thread
> > > +  <https://mails.dpdk.org/archives/dev/2020-April/164970.html>`_.
> > > --
> > > 2.8.4
> >
> > Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
> Acked-by: Jerin Jacob <jerinj@marvell.com>
>
>
> >
>

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v4] devtools: remove old ABI validation script
  @ 2020-05-24 20:34 39% ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-24 20:34 UTC (permalink / raw)
  To: dev
  Cc: david.marchand, Neil Horman, Ray Kinsella, John McNamara,
	Marko Kovacevic

From: Neil Horman <nhorman@tuxdriver.com>

Since we've moved away from our initial validate-abi.sh script,
in favor of check-abi.sh, which uses libabigail,
remove the old script from the tree, and update the docs accordingly.

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
No progress was done during a month after discussions about
the usage example.

This v4 fixes punctuation and replaces the usage example based on make
with a link to the recommendation in doc/guides/contributing/patches.rst.

Applied quickly for 20.05.
---
 MAINTAINERS                                |   1 -
 devtools/validate-abi.sh                   | 251 ---------------------
 doc/guides/contributing/abi_versioning.rst |  43 +---
 doc/guides/contributing/patches.rst        |   2 +
 4 files changed, 11 insertions(+), 286 deletions(-)
 delete mode 100755 devtools/validate-abi.sh

diff --git a/MAINTAINERS b/MAINTAINERS
index 1616951d7f..d2b286701d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -150,7 +150,6 @@ F: devtools/gen-abi.sh
 F: devtools/libabigail.abignore
 F: devtools/update-abi.sh
 F: devtools/update_version_map_abi.py
-F: devtools/validate-abi.sh
 F: buildtools/check-symbols.sh
 F: buildtools/map-list-symbol.sh
 F: drivers/*/*/*.map
diff --git a/devtools/validate-abi.sh b/devtools/validate-abi.sh
deleted file mode 100755
index f64e19d38f..0000000000
--- a/devtools/validate-abi.sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2015 Neil Horman. All rights reserved.
-# Copyright(c) 2017 6WIND S.A.
-# All rights reserved
-
-set -e
-
-abicheck=abi-compliance-checker
-abidump=abi-dumper
-default_dst=abi-check
-default_target=x86_64-native-linuxapp-gcc
-
-# trap on error
-err_report() {
-    echo "$0: error at line $1"
-}
-trap 'err_report $LINENO' ERR
-
-print_usage () {
-	cat <<- END_OF_HELP
-	$(basename $0) [options] <rev1> <rev2>
-
-	This script compares the ABI of 2 git revisions of the current
-	workspace. The output is a html report and a compilation log.
-
-	The objective is to make sure that applications built against
-	DSOs from the first revision can still run when executed using
-	the DSOs built from the second revision.
-
-	<rev1> and <rev2> are git commit id or tags.
-
-	Options:
-	  -h		show this help
-	  -j <num>	enable parallel compilation with <num> threads
-	  -v		show compilation logs on the console
-	  -d <dir>	change working directory (default is ${default_dst})
-	  -t <target>	the dpdk target to use (default is ${default_target})
-	  -f		overwrite existing files in destination directory
-
-	The script returns 0 on success, or the value of last failing
-	call of ${abicheck} (incompatible abi or the tool has run with errors).
-	The errors returned by ${abidump} are ignored.
-
-	END_OF_HELP
-}
-
-# log in the file, and on stdout if verbose
-# $1: level string
-# $2: string to be logged
-log() {
-	echo "$1: $2"
-	if [ "${verbose}" != "true" ]; then
-		echo "$1: $2" >&3
-	fi
-}
-
-# launch a command and log it, taking care of surrounding spaces with quotes
-cmd() {
-	local i s whitespace ret
-	s=""
-	whitespace="[[:space:]]"
-	for i in "$@"; do
-		if [[ $i =~ $whitespace ]]; then
-			i=\"$i\"
-		fi
-		if [ -z "$s" ]; then
-			s="$i"
-		else
-			s="$s $i"
-		fi
-	done
-
-	ret=0
-	log "CMD" "$s"
-	"$@" || ret=$?
-	if [ "$ret" != "0" ]; then
-		log "CMD" "previous command returned $ret"
-	fi
-
-	return $ret
-}
-
-# redirect or copy stderr/stdout to a file
-# the syntax is unfamiliar, but it makes the rest of the
-# code easier to read, avoiding the use of pipes
-set_log_file() {
-	# save original stdout and stderr in fd 3 and 4
-	exec 3>&1
-	exec 4>&2
-	# create a new fd 5 that send to a file
-	exec 5> >(cat > $1)
-	# send stdout and stderr to fd 5
-	if [ "${verbose}" = "true" ]; then
-		exec 1> >(tee /dev/fd/5 >&3)
-		exec 2> >(tee /dev/fd/5 >&4)
-	else
-		exec 1>&5
-		exec 2>&5
-	fi
-}
-
-# Make sure we configure SHARED libraries
-# Also turn off IGB and KNI as those require kernel headers to build
-fixup_config() {
-	local conf=config/defconfig_$target
-	cmd sed -i -e"$ a\CONFIG_RTE_BUILD_SHARED_LIB=y" $conf
-	cmd sed -i -e"$ a\CONFIG_RTE_NEXT_ABI=n" $conf
-	cmd sed -i -e"$ a\CONFIG_RTE_EAL_IGB_UIO=n" $conf
-	cmd sed -i -e"$ a\CONFIG_RTE_LIBRTE_KNI=n" $conf
-	cmd sed -i -e"$ a\CONFIG_RTE_KNI_KMOD=n" $conf
-}
-
-# build dpdk for the given tag and dump abi
-# $1: hash of the revision
-gen_abi() {
-	local i
-
-	cmd git clone ${dpdkroot} ${dst}/${1}
-	cmd cd ${dst}/${1}
-
-	log "INFO" "Checking out version ${1} of the dpdk"
-	# Move to the old version of the tree
-	cmd git checkout ${1}
-
-	fixup_config
-
-	# Now configure the build
-	log "INFO" "Configuring DPDK ${1}"
-	cmd make config T=$target O=$target
-
-	# Checking abi compliance relies on using the dwarf information in
-	# the shared objects. Build with -g to include them.
-	log "INFO" "Building DPDK ${1}. This might take a moment"
-	cmd make -j$parallel O=$target V=1 EXTRA_CFLAGS="-g -Og -Wno-error" \
-	    EXTRA_LDFLAGS="-g" || log "INFO" "The build failed"
-
-	# Move to the lib directory
-	cmd cd ${PWD}/$target/lib
-	log "INFO" "Collecting ABI information for ${1}"
-	for i in *.so; do
-		[ -e "$i" ] || break
-		cmd $abidump ${i} -o $dst/${1}/${i}.dump -lver ${1} || true
-		# hack to ignore empty SymbolsInfo section (no public ABI)
-		if grep -q "'SymbolInfo' => {}," $dst/${1}/${i}.dump \
-				2> /dev/null; then
-			log "INFO" "${i} has no public ABI, remove dump file"
-			cmd rm -f $dst/${1}/${i}.dump
-		fi
-	done
-}
-
-verbose=false
-parallel=1
-dst=${default_dst}
-target=${default_target}
-force=0
-while getopts j:vd:t:fh ARG ; do
-	case $ARG in
-		j ) parallel=$OPTARG ;;
-		v ) verbose=true ;;
-		d ) dst=$OPTARG ;;
-		t ) target=$OPTARG ;;
-		f ) force=1 ;;
-		h ) print_usage ; exit 0 ;;
-		? ) print_usage ; exit 1 ;;
-	esac
-done
-shift $(($OPTIND - 1))
-
-if [ $# != 2 ]; then
-	print_usage
-	exit 1
-fi
-
-tag1=$1
-tag2=$2
-
-# convert path to absolute
-case "${dst}" in
-	/*) ;;
-	*) dst=${PWD}/${dst} ;;
-esac
-dpdkroot=$(readlink -f $(dirname $0)/..)
-
-if [ -e "${dst}" -a "$force" = 0 ]; then
-	echo "The ${dst} directory is not empty. Remove it, use another"
-	echo "one (-d <dir>), or force overriding (-f)"
-	exit 1
-fi
-
-rm -rf ${dst}
-mkdir -p ${dst}
-set_log_file ${dst}/abi-check.log
-log "INFO" "Logs available in ${dst}/abi-check.log"
-
-command -v ${abicheck} || log "INFO" "Can't find ${abicheck} utility"
-command -v ${abidump} || log "INFO" "Can't find ${abidump} utility"
-
-hash1=$(git show -s --format=%h "$tag1" -- 2> /dev/null | tail -1)
-hash2=$(git show -s --format=%h "$tag2" -- 2> /dev/null | tail -1)
-
-# Make hashes available in output for non-local reference
-tag1="$tag1 ($hash1)"
-tag2="$tag2 ($hash2)"
-
-if [ "$hash1" = "$hash2" ]; then
-	log "ERROR" "$tag1 and $tag2 are the same revisions"
-	exit 1
-fi
-
-cmd mkdir -p ${dst}
-
-# dump abi for each revision
-gen_abi ${hash1}
-gen_abi ${hash2}
-
-# compare the abi dumps
-cmd cd ${dst}
-ret=0
-list=""
-for i in ${hash2}/*.dump; do
-	name=`basename $i`
-	libname=${name%.dump}
-
-	if [ ! -f ${hash1}/$name ]; then
-		log "INFO" "$NAME does not exist in $tag1. skipping..."
-		continue
-	fi
-
-	local_ret=0
-	cmd $abicheck -l $libname \
-	    -old ${hash1}/$name -new ${hash2}/$name || local_ret=$?
-	if [ $local_ret != 0 ]; then
-		log "NOTICE" "$abicheck returned $local_ret"
-		ret=$local_ret
-		list="$list $libname"
-	fi
-done
-
-if [ $ret != 0 ]; then
-	log "NOTICE" "ABI may be incompatible, check reports/logs for details."
-	log "NOTICE" "Incompatible list: $list"
-else
-	log "NOTICE" "No error detected, ABI is compatible."
-fi
-
-log "INFO" "Logs are in ${dst}/abi-check.log"
-log "INFO" "HTML reports are in ${dst}/compat_reports directory"
-
-exit $ret
diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index f4a9273afc..e96fde340f 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -682,41 +682,16 @@ Running the ABI Validator
 -------------------------
 
 The ``devtools`` directory in the DPDK source tree contains a utility program,
-``validate-abi.sh``, for validating the DPDK ABI based on the Linux `ABI
-Compliance Checker
-<http://ispras.linuxbase.org/index.php/ABI_compliance_checker>`_.
+``check-abi.sh``, for validating the DPDK ABI based on the libabigail
+`abidiff utility <https://sourceware.org/libabigail/manual/abidiff.html>`_.
 
-This has a dependency on the ``abi-compliance-checker`` and ``and abi-dumper``
-utilities which can be installed via a package manager. For example::
+The syntax of the ``check-abi.sh`` utility is::
 
-   sudo yum install abi-compliance-checker
-   sudo yum install abi-dumper
+   devtools/check-abi.sh <refdir> <newdir>
 
-The syntax of the ``validate-abi.sh`` utility is::
+Where <refdir> specifies the directory housing the reference build of DPDK,
+and <newdir> specifies the DPDK build directory to check the ABI of.
 
-   ./devtools/validate-abi.sh <REV1> <REV2>
-
-Where ``REV1`` and ``REV2`` are valid gitrevisions(7)
-https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html
-on the local repo.
-
-For example::
-
-   # Check between the previous and latest commit:
-   ./devtools/validate-abi.sh HEAD~1 HEAD
-
-   # Check on a specific compilation target:
-   ./devtools/validate-abi.sh -t x86_64-native-linux-gcc HEAD~1 HEAD
-
-   # Check between two tags:
-   ./devtools/validate-abi.sh v2.0.0 v2.1.0
-
-   # Check between git master and local topic-branch "vhost-hacking":
-   ./devtools/validate-abi.sh master vhost-hacking
-
-After the validation script completes (it can take a while since it need to
-compile both tags) it will create compatibility reports in the
-``./abi-check/compat_report`` directory. Listed incompatibilities can be found
-as follows::
-
-  grep -lr Incompatible abi-check/compat_reports/
+The ABI compatibility is automatically verified when using a build script
+from ``devtools``, if the variable ``DPDK_ABI_REF_VERSION`` is set with a tag,
+as described in :ref:`ABI check recommendations<integrated_abi_check>`.
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index 59442824a1..e6a934846e 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -513,6 +513,8 @@ in a single subfolder called "__builds" created in the current directory.
 Setting ``DPDK_BUILD_TEST_DIR`` to an absolute directory path e.g. ``/tmp`` is also supported.
 
 
+.. _integrated_abi_check:
+
 Checking ABI compatibility
 --------------------------
 
-- 
2.26.2


^ permalink raw reply	[relevance 39%]

* [dpdk-dev] [PATCH v2] devtools: remove useless files from ABI reference
  @ 2020-05-24 17:43 13% ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-24 17:43 UTC (permalink / raw)
  To: dev; +Cc: david.marchand, bruce.richardson

When building an ABI reference with meson, some static libraries
are built and linked in apps. They are useless and take a lot of space.
Those binaries, and other useless files (examples and doc files)
in the share/ directory, are removed after being installed.

In order to save time when building the ABI reference,
the examples (which are not installed anyway) are not compiled.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
v2: find static libraries anywhere it tries hiding from being swept
---
 devtools/test-meson-builds.sh | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index 18b874fac5..de569a486f 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -140,10 +140,15 @@ build () # <directory> <target compiler> <meson options>
 			fi
 
 			rm -rf $abirefdir/build
-			config $abirefdir/src $abirefdir/build $*
+			config $abirefdir/src $abirefdir/build -Dexamples= $*
 			compile $abirefdir/build
 			install_target $abirefdir/build $abirefdir/$targetdir
 			$srcdir/devtools/gen-abi.sh $abirefdir/$targetdir
+
+			# save disk space by removing static libs and apps
+			find $abirefdir/$targetdir/usr/local -name '*.a' -delete
+			rm -rf $abirefdir/$targetdir/usr/local/bin
+			rm -rf $abirefdir/$targetdir/usr/local/share
 		fi
 
 		install_target $builds_dir/$targetdir \
-- 
2.26.2


^ permalink raw reply	[relevance 13%]

* Re: [dpdk-dev] [PATCH v1] doc: update release notes for 20.05
  2020-05-22 14:06  4% [dpdk-dev] [PATCH v1] doc: update release notes for 20.05 John McNamara
@ 2020-05-22 15:17  0% ` Kevin Traynor
  0 siblings, 0 replies; 200+ results
From: Kevin Traynor @ 2020-05-22 15:17 UTC (permalink / raw)
  To: John McNamara, dev; +Cc: thomas

On 22/05/2020 15:06, John McNamara wrote:
> Fix grammar, spelling and formatting of DPDK 20.05 release notes.
> 
> Signed-off-by: John McNamara <john.mcnamara@intel.com>
> ---
>  doc/guides/rel_notes/release_20_05.rst | 264 +++++++++++++++------------------
>  1 file changed, 116 insertions(+), 148 deletions(-)
> 
> diff --git a/doc/guides/rel_notes/release_20_05.rst b/doc/guides/rel_notes/release_20_05.rst
> index 8470690..d10a1f4 100644
> --- a/doc/guides/rel_notes/release_20_05.rst
> +++ b/doc/guides/rel_notes/release_20_05.rst
> @@ -56,38 +56,38 @@ New Features
>       Also, make sure to start the actual text at the margin.
>       =========================================================
>  
> -* **Added Trace Library and Tracepoints**
> +* **Added Trace Library and Tracepoints.**
>  
> -  A native implementation of ``common trace format(CTF)`` based trace library
> -  has been added to provide the ability to add tracepoints in
> -  application/library to get runtime trace/debug information for control and
> +  A native implementation of "common trace format" (CTF) based trace library

Not sure if the "" are intentional?

> +  has been added to provide the ability to add tracepoints in an
> +  application/library to get runtime trace/debug information for control, and
>    fast APIs with minimum impact on fast path performance.
>    Typical trace overhead is ~20 cycles and instrumentation overhead is 1 cycle.
>    Added tracepoints in ``EAL``, ``ethdev``, ``cryptodev``, ``eventdev`` and
>    ``mempool`` libraries for important functions.
>  
> -* **Added APIs for RCU defer queue.**
> +* **Added APIs for RCU defer queues.**
>  
> -  Added APIs to create and delete defer queue. Additional APIs are provided
> +  Added APIs to create and delete defer queues. Additional APIs are provided
>    to enqueue a deleted resource and reclaim the resource in the future.
> -  These APIs help the application use lock-free data structures with
> +  These APIs help an application use lock-free data structures with
>    less effort.
>  
>  * **Added new API for rte_ring.**
>  
> -  * New synchronization modes for rte_ring.
> +  * Introduced new synchronization modes for rte_ring.
>  
> -  Introduced new optional MT synchronization modes for rte_ring:
> -  Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
> -  With these mode selected, rte_ring shows significant improvements for
> -  average enqueue/dequeue times on overcommitted systems.
> +    Introduced new optional MT synchronization modes for ``rte_ring``:
> +    Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
> +    With these modes selected, ``rte_ring`` shows significant improvements for
> +    average enqueue/dequeue times on overcommitted systems.
>  
> -  * Added peek style API for rte_ring.
> +  * Added peek style API for ``rte_ring``.
>  
> -  For rings with producer/consumer in RTE_RING_SYNC_ST, RTE_RING_SYNC_MT_HTS
> -  mode, provide an ability to split enqueue/dequeue operation into two phases
> -  (enqueue/dequeue start; enqueue/dequeue finish). That allows user to inspect
> -  objects in the ring without removing them from it (aka MT safe peek).
> +    For rings with producer/consumer in ``RTE_RING_SYNC_ST``, ``RTE_RING_SYNC_MT_HTS``
> +    mode, provide the ability to split enqueue/dequeue operation into two phases
> +    (enqueue/dequeue start and enqueue/dequeue finish). This allows the user to inspect
> +    objects in the ring without removing them (aka MT safe peek).
>  
>  * **Added flow aging support.**
>  
> @@ -100,14 +100,16 @@ New Features
>    * Added new query: ``rte_flow_get_aged_flows`` to get the aged-out flows
>      contexts from the port.
>  
> -* **ethdev: Added a new value to link speed for 200Gbps**
> +* **ethdev: Added a new value to link speed for 200Gbps.**
>  
> -* **Updated Amazon ena driver.**
> +  Added a new ethdev value to for link speeds of 200Gbps.
>  
> -  Updated ena PMD with new features and improvements, including:
> +* **Updated the Amazon ena driver.**
> +
> +  Updated the ena PMD with new features and improvements, including:
>  
>    * Added support for large LLQ (Low-latency queue) headers.
> -  * Added Tx drops as new extended driver statistic.
> +  * Added Tx drops as a new extended driver statistic.
>    * Added support for accelerated LLQ mode.
>    * Handling of the 0 length descriptors on the Rx path.
>  
> @@ -115,14 +117,14 @@ New Features
>  
>    Updated Hisilicon hns3 driver with new features and improvements, including:
>  
> -  * Added support for TSO
> -  * Added support for configuring promiscuous and allmulticast mode for VF
> +  * Added support for TSO.
> +  * Added support for configuring promiscuous and allmulticast mode for VF.
>  
>  * **Updated Intel i40e driver.**
>  
>    Updated i40e PMD with new features and improvements, including:
>  
> -  * Enable MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
> +  * Enabled MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
>    * Added support for RSS using L3/L4 source/destination only.
>    * Added support for setting hash function in rte flow.
>  
> @@ -139,14 +141,14 @@ New Features
>    Updated the Intel ice driver with new features and improvements, including:
>  
>    * Added support for DCF (Device Config Function) feature.
> -  * Added switch filter support for intel DCF.
> +  * Added switch filter support for Intel DCF.
>  
>  * **Updated Marvell OCTEON TX2 ethdev driver.**
>  
> -  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support with
> -  below features.
> +  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support,
> +  including:
>  
> -  * Hierarchial Scheduling with DWRR and SP.
> +  * Hierarchical Scheduling with DWRR and SP.
>    * Single rate - Two color, Two rate - Three color shaping.
>  
>  * **Updated Mellanox mlx5 driver.**
> @@ -158,52 +160,28 @@ New Features
>    * Added support for configuring Hairpin queue data buffer size.
>    * Added support for jumbo frame size (9K MTU) in Multi-Packet RQ mode.
>    * Removed flow rules caching for memory saving and compliance with ethdev API.
> -  * Optimized the memory consumption of flow.
> -  * Added support for flow aging based on hardware counter.
> -  * Added support for flow pattern with wildcard VLAN item (without VID value).
> -  * Updated support for matching on GTP header, added match on GTP flags.
> -
> -* **Added Chacha20-Poly1305 algorithm to Cryptodev API.**
> -
> -  Chacha20-Poly1305 AEAD algorithm can now be supported in Cryptodev.
> -
> -* **Updated the AESNI MB crypto PMD.**
> -
> -  * Added support for intel-ipsec-mb version 0.54.
> -  * Updated the AESNI MB PMD with AES-256 DOCSIS algorithm.
> -  * Added support for synchronous Crypto burst API.
> -
> -* **Updated the AESNI GCM crypto PMD.**
> -
> -  * Added support for intel-ipsec-mb version 0.54.
> -
> -* **Updated the ZUC crypto PMD.**
> -
> -  * Added support for intel-ipsec-mb version 0.54.
> -  * Updated the PMD to support Multi-buffer ZUC-EIA3,
> -    improving performance significantly, when using
> -    intel-ipsec-mb version 0.54
> -
> -* **Updated the SNOW3G crypto PMD.**
> -
> -  * Added support for intel-ipsec-mb version 0.54.
> +  * Optimized the memory consumption of flows.
> +  * Added support for flow aging based on hardware counters.
> +  * Added support for flow pattern with wildcard VLAN items (without VID value).
> +  * Updated support for matching on GTP headers, added match on GTP flags.
>  
> -* **Updated the KASUMI crypto PMD.**
> +* **Added additional algorithms to the Cryptodev API.**
>  
> -  * Added support for intel-ipsec-mb version 0.54.
> +  Added additional algorithms and updated support to the Cryptodev PMD and
> +  APIs, including:
>  
> -* **Added a new driver for Intel Foxville I225 devices.**
> +  * Added support for intel-ipsec-mb version 0.54 to the following PMDs: AESNI
> +    MB, AESNI GCM, ZUC, KASUMI, SNOW 3G.
>  
> -  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
> -  :doc:`../nics/igc` NIC guide for more details on this new driver.
> +  * Added support for Chacha20-Poly1305 AEAD algorithm.
>  
> -* **Updated Broadcom bnxt driver.**
> +  * Updated the ZUC crypto PMD to support Multi-buffer ZUC-EIA3, improving
> +    performance significantly, when using intel-ipsec-mb version 0.54
>  
> -  Updated Broadcom bnxt driver with new features and improvements, including:
> +  * AESNI MB crypto PMD:
>  
> -  * Added support for host based flow table management
> -  * Added flow counters to extended stats
> -  * Added PCI function stats to extended stats
> +    * Updated the AESNI MB PMD with AES-256 DOCSIS algorithm.
> +    * Added support for synchronous Crypto burst API.
>  
>  * **Added handling of mixed crypto algorithms in QAT PMD for GEN2.**
>  
> @@ -212,7 +190,7 @@ New Features
>    when running on GEN2 QAT hardware with particular firmware versions
>    (GEN3 support was added in DPDK 20.02).
>  
> -* **Added plain SHA-1,224,256,384,512 support to QAT PMD.**
> +* **Added plain SHA-1, 224, 256, 384, 512 support to QAT PMD.**
>  
>    Added support for plain SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 hashes
>    to QAT PMD.
> @@ -220,26 +198,40 @@ New Features
>  * **Added AES-GCM/GMAC J0 support to QAT PMD.**
>  
>    Added support for AES-GCM/GMAC J0 to Intel QuickAssist Technology PMD. User can
> -  use this feature by passing zero length IV in appropriate xform. For more
> -  info please refer to rte_crypto_sym.h J0 comments.
> +  use this feature by passing a zero length IV in the appropriate xform. For more
> +  info refer to the doxygen comments in ``rte_crypto_sym.h`` for ``J0``.
>  
>  * **Updated the QAT PMD for AES-256 DOCSIS.**
>  
> -  Added AES-256 DOCSIS algorithm support to QAT PMD.
> +  Added AES-256 DOCSIS algorithm support to the QAT PMD.
>  
> -* **Added QAT intermediate buffer too small handling in QAT compression PMD.**
> +* **Added QAT intermediate undersized buffer handling in QAT compression PMD.**
>  
> -  Added a special way of buffer handling when internal QAT intermediate buffer
> -  is too small for Huffman dynamic compression operation. Instead of falling
> +  Added special buffer handling when the internal QAT intermediate buffer is
> +  too small for the Huffman dynamic compression operation. Instead of falling
>    back to fixed compression, the operation is now split into multiple smaller
> -  dynamic compression requests (possible to execute on QAT) and their results
> -  are then combined and copied into the output buffer. This is not possible if
> -  any checksum calculation was requested - in such case the code falls back to
> -  fixed compression as before.
> +  dynamic compression requests (which are possible to execute on QAT) and
> +  their results are then combined and copied into the output buffer. This is
> +  not possible if any checksum calculation was requested - in such cases the
> +  code falls back to fixed compression as before.
> +
> +* **Added a new driver for Intel Foxville I225 devices.**
> +
> +  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
> +  :doc:`../nics/igc` NIC guide for more details on this new driver.
> +
> +* **Updated Broadcom bnxt driver.**
> +
> +  Updated the Broadcom bnxt driver with new features and improvements, including:
> +
> +  * Added support for host based flow table management.
> +  * Added flow counters to extended stats.
> +  * Added PCI function stats to extended stats.
>  
>  * **Updated the turbo_sw bbdev PMD.**
>  
> -  Supported large size code blocks which does not fit in one mbuf segment.
> +  Added support for large size code blocks which do not fit in one mbuf
> +  segment.
>  
>  * **Added Intel FPGA_5GNR_FEC bbdev PMD.**
>  
> @@ -255,31 +247,32 @@ New Features
>      accurate load balancing.
>    * Improved behavior on high-core count systems.
>    * Reduced latency in low-load situations.
> -  * Extended DSW xstats with migration- and load-related statistics.
> +  * Extended DSW xstats with migration and load-related statistics.
> +
> +* **Updated ipsec-secgw sample application.**
>  
> -* **Updated ipsec-secgw sample application with following features.**
> +  Updated ``ipsec-secgw`` sample application with following features:
>  
> -  * Updated ipsec-secgw application to add event based packet processing.
> -    The worker thread(s) would receive events and submit them back to the
> -    event device after the processing. This way, multicore scaling and HW
> -    assisted scheduling is achieved by making use of the event device
> -    capabilities. The event mode currently supports only inline IPsec
> -    protocol offload.
> +  * Updated the application to add event based packet processing. The worker
> +    thread(s) would receive events and submit them back to the event device
> +    after the processing. This way, multicore scaling and HW assisted
> +    scheduling is achieved by making use of the event device capabilities. The
> +    event mode currently only supports inline IPsec protocol offload.
>  
> -  * Updated ipsec-secgw application to support key sizes for AES-192-CBC,
> -    AES-192-GCM, AES-256-GCM algorithms.
> +  * Updated the application to support key sizes for AES-192-CBC, AES-192-GCM,
> +    AES-256-GCM algorithms.
>  
> -  * Added IPsec inbound load-distribution support for ipsec-secgw application
> -    using NIC load distribution feature(Flow Director).
> +  * Added IPsec inbound load-distribution support for the application using
> +    NIC load distribution feature(Flow Director).
>  
>  * **Updated Telemetry Library.**
>  
> -  The updated Telemetry library has many improvements on the original version
> -  to make it more accessible and scalable:
> +  The updated Telemetry library has been significantly in relation to the
> +  original version to make it more accessible and scalable:
>  
> -  * It enables DPDK libraries and applications provide their own specific
> -    telemetry information, rather than being limited to what could be reported
> -    through the metrics library.
> +  * It now enables DPDK libraries and applications to provide their own
> +    specific telemetry information, rather than being limited to what could be
> +    reported through the metrics library.
>  
>    * It is no longer dependent on the external Jansson library, which allows
>      Telemetry be enabled by default.
> @@ -287,57 +280,47 @@ New Features
>    * The socket handling has been simplified making it easier for clients to
>      connect and retrieve information.
>  
> -* **Added rte_graph library.**
> +* **Added the rte_graph library.**
>  
> -  Graph architecture abstracts the data processing functions as a ``node`` and
> -  ``links`` them together to create a complex ``graph`` to enable reusable/modular
> -  data processing functions. The graph library provides API to enable graph
> -  framework operations such as create, lookup, dump and destroy on graph and node
> -  operations such as clone, edge update, and edge shrink, etc.
> -  The API also allows to create the stats cluster to monitor per graph and per node stats.
> +  The Graph architecture abstracts the data processing functions as a ``node``
> +  and ``links`` them together to create a complex ``graph`` to enable
> +  reusable/modular data processing functions. The graph library provides APIs
> +  to enable graph framework operations such as create, lookup, dump and
> +  destroy on graph and node operations such as clone, edge update, and edge
> +  shrink, etc.  The API also allows the creation of a stats cluster to monitor
> +  per graph and per node statistics.
>  
> -* **Added rte_node library which consists of a set of packet processing nodes.**
> +* **Added the rte_node library.**
>  
> -  The rte_node library that consists of nodes used by rte_graph library. Each
> -  node performs a specific packet processing function based on application
> -  configuration. The following nodes are added:
> +  Added the ``rte_node`` library that consists of nodes used by ``rte_graph``
> +  library. Each node performs a specific packet processing function based on
> +  the application configuration. The following nodes are added:
>  
> -  * Null node: Skeleton node that defines the general structure of a node.
> -  * Ethernet device node: Consists of ethernet Rx/Tx nodes as well as ethernet
> +  * Null node: A skeleton node that defines the general structure of a node.
> +  * Ethernet device node: Consists of Ethernet Rx/Tx nodes as well as Ethernet
>      control APIs.
> -  * IPv4 lookup node: Consists of ipv4 extract and lpm lookup node. Routes can
> -    be configured by the application through ``rte_node_ip4_route_add`` function.
> -  * IPv4 rewrite node: Consists of ipv4 and ethernet header rewrite functionality
> -    that can be configured through ``rte_node_ip4_rewrite_add`` function.
> +  * IPv4 lookup node: Consists of IPv4 extract and LPM lookup node. Routes can
> +    be configured by the application through the ``rte_node_ip4_route_add``
> +    function.
> +  * IPv4 rewrite node: Consists of IPv4 and Ethernet header rewrite
> +    functionality that can be configured through the
> +    ``rte_node_ip4_rewrite_add`` function.
>    * Packet drop node: Frees the packets received to their respective mempool.
>  
>  * **Added new l3fwd-graph sample application.**
>  
> -  Added an example application ``l3fwd-graph``. It demonstrates the usage of graph
> -  library and node library for packet processing. In addition to the library usage
> -  demonstration, this application can use for performance comparison with existing
> -  ``l3fwd`` (The static code without any nodes) with the modular ``l3fwd-graph``
> -  approach.
> +  Added an example application ``l3fwd-graph``. This demonstrates the usage of
> +  graph library and node library for packet processing. In addition to the
> +  library usage demonstration, this application can be used for performance
> +  comparison with existing ``l3fwd`` (The static code without any nodes) with
> +  the modular ``l3fwd-graph`` approach.
>  
> -* **Updated testpmd application.**
> +* **Updated the testpmd application.**
>  
>    * Added a new cmdline option ``--rx-mq-mode`` which can be used to test PMD's
>      behaviour on handling Rx mq mode.
>  

No need for the sub-bullet here

>  
> -Removed Items
> --------------
> -
> -.. This section should contain removed items in this release. Sample format:
> -
> -   * Add a short 1-2 sentence description of the removed item
> -     in the past tense.
> -
> -   This section is a comment. Do not overwrite or remove it.
> -   Also, make sure to start the actual text at the margin.
> -   =========================================================
> -
> -
>  API Changes
>  -----------
>  
> @@ -354,7 +337,7 @@ API Changes
>     =========================================================
>  
>  * mempool: The API of ``rte_mempool_populate_iova()`` and
> -  ``rte_mempool_populate_virt()`` changed to return 0 instead of -EINVAL
> +  ``rte_mempool_populate_virt()`` changed to return 0 instead of ``-EINVAL``
>    when there is not enough room to store one object.
>  
>  
> @@ -376,21 +359,6 @@ ABI Changes
>  * No ABI change that would break compatibility with DPDK 20.02 and 19.11.
>  
>  
> -Known Issues
> -------------
> -
> -.. This section should contain new known issues in this release. Sample format:
> -
> -   * **Add title in present tense with full stop.**
> -
> -     Add a short 1-2 sentence description of the known issue
> -     in the present tense. Add information on any known workarounds.
> -
> -   This section is a comment. Do not overwrite or remove it.
> -   Also, make sure to start the actual text at the margin.
> -   =========================================================
> -
> -
>  Tested Platforms
>  ----------------
>  
> 

I just sent a patch to note gcc 10 support.

Aside from minor comments above, LGTM.
Acked-by: Kevin Traynor <ktraynor@redhat.com>


^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v1] doc: update release notes for 20.05
@ 2020-05-22 14:06  4% John McNamara
  2020-05-22 15:17  0% ` Kevin Traynor
  0 siblings, 1 reply; 200+ results
From: John McNamara @ 2020-05-22 14:06 UTC (permalink / raw)
  To: dev; +Cc: thomas, John McNamara

Fix grammar, spelling and formatting of DPDK 20.05 release notes.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
---
 doc/guides/rel_notes/release_20_05.rst | 264 +++++++++++++++------------------
 1 file changed, 116 insertions(+), 148 deletions(-)

diff --git a/doc/guides/rel_notes/release_20_05.rst b/doc/guides/rel_notes/release_20_05.rst
index 8470690..d10a1f4 100644
--- a/doc/guides/rel_notes/release_20_05.rst
+++ b/doc/guides/rel_notes/release_20_05.rst
@@ -56,38 +56,38 @@ New Features
      Also, make sure to start the actual text at the margin.
      =========================================================
 
-* **Added Trace Library and Tracepoints**
+* **Added Trace Library and Tracepoints.**
 
-  A native implementation of ``common trace format(CTF)`` based trace library
-  has been added to provide the ability to add tracepoints in
-  application/library to get runtime trace/debug information for control and
+  A native implementation of "common trace format" (CTF) based trace library
+  has been added to provide the ability to add tracepoints in an
+  application/library to get runtime trace/debug information for control, and
   fast APIs with minimum impact on fast path performance.
   Typical trace overhead is ~20 cycles and instrumentation overhead is 1 cycle.
   Added tracepoints in ``EAL``, ``ethdev``, ``cryptodev``, ``eventdev`` and
   ``mempool`` libraries for important functions.
 
-* **Added APIs for RCU defer queue.**
+* **Added APIs for RCU defer queues.**
 
-  Added APIs to create and delete defer queue. Additional APIs are provided
+  Added APIs to create and delete defer queues. Additional APIs are provided
   to enqueue a deleted resource and reclaim the resource in the future.
-  These APIs help the application use lock-free data structures with
+  These APIs help an application use lock-free data structures with
   less effort.
 
 * **Added new API for rte_ring.**
 
-  * New synchronization modes for rte_ring.
+  * Introduced new synchronization modes for rte_ring.
 
-  Introduced new optional MT synchronization modes for rte_ring:
-  Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
-  With these mode selected, rte_ring shows significant improvements for
-  average enqueue/dequeue times on overcommitted systems.
+    Introduced new optional MT synchronization modes for ``rte_ring``:
+    Relaxed Tail Sync (RTS) mode and Head/Tail Sync (HTS) mode.
+    With these modes selected, ``rte_ring`` shows significant improvements for
+    average enqueue/dequeue times on overcommitted systems.
 
-  * Added peek style API for rte_ring.
+  * Added peek style API for ``rte_ring``.
 
-  For rings with producer/consumer in RTE_RING_SYNC_ST, RTE_RING_SYNC_MT_HTS
-  mode, provide an ability to split enqueue/dequeue operation into two phases
-  (enqueue/dequeue start; enqueue/dequeue finish). That allows user to inspect
-  objects in the ring without removing them from it (aka MT safe peek).
+    For rings with producer/consumer in ``RTE_RING_SYNC_ST``, ``RTE_RING_SYNC_MT_HTS``
+    mode, provide the ability to split enqueue/dequeue operation into two phases
+    (enqueue/dequeue start and enqueue/dequeue finish). This allows the user to inspect
+    objects in the ring without removing them (aka MT safe peek).
 
 * **Added flow aging support.**
 
@@ -100,14 +100,16 @@ New Features
   * Added new query: ``rte_flow_get_aged_flows`` to get the aged-out flows
     contexts from the port.
 
-* **ethdev: Added a new value to link speed for 200Gbps**
+* **ethdev: Added a new value to link speed for 200Gbps.**
 
-* **Updated Amazon ena driver.**
+  Added a new ethdev value to for link speeds of 200Gbps.
 
-  Updated ena PMD with new features and improvements, including:
+* **Updated the Amazon ena driver.**
+
+  Updated the ena PMD with new features and improvements, including:
 
   * Added support for large LLQ (Low-latency queue) headers.
-  * Added Tx drops as new extended driver statistic.
+  * Added Tx drops as a new extended driver statistic.
   * Added support for accelerated LLQ mode.
   * Handling of the 0 length descriptors on the Rx path.
 
@@ -115,14 +117,14 @@ New Features
 
   Updated Hisilicon hns3 driver with new features and improvements, including:
 
-  * Added support for TSO
-  * Added support for configuring promiscuous and allmulticast mode for VF
+  * Added support for TSO.
+  * Added support for configuring promiscuous and allmulticast mode for VF.
 
 * **Updated Intel i40e driver.**
 
   Updated i40e PMD with new features and improvements, including:
 
-  * Enable MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
+  * Enabled MAC address as FDIR input set for ipv4-other, ipv4-udp and ipv4-tcp.
   * Added support for RSS using L3/L4 source/destination only.
   * Added support for setting hash function in rte flow.
 
@@ -139,14 +141,14 @@ New Features
   Updated the Intel ice driver with new features and improvements, including:
 
   * Added support for DCF (Device Config Function) feature.
-  * Added switch filter support for intel DCF.
+  * Added switch filter support for Intel DCF.
 
 * **Updated Marvell OCTEON TX2 ethdev driver.**
 
-  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support with
-  below features.
+  Updated Marvell OCTEON TX2 ethdev driver with traffic manager support,
+  including:
 
-  * Hierarchial Scheduling with DWRR and SP.
+  * Hierarchical Scheduling with DWRR and SP.
   * Single rate - Two color, Two rate - Three color shaping.
 
 * **Updated Mellanox mlx5 driver.**
@@ -158,52 +160,28 @@ New Features
   * Added support for configuring Hairpin queue data buffer size.
   * Added support for jumbo frame size (9K MTU) in Multi-Packet RQ mode.
   * Removed flow rules caching for memory saving and compliance with ethdev API.
-  * Optimized the memory consumption of flow.
-  * Added support for flow aging based on hardware counter.
-  * Added support for flow pattern with wildcard VLAN item (without VID value).
-  * Updated support for matching on GTP header, added match on GTP flags.
-
-* **Added Chacha20-Poly1305 algorithm to Cryptodev API.**
-
-  Chacha20-Poly1305 AEAD algorithm can now be supported in Cryptodev.
-
-* **Updated the AESNI MB crypto PMD.**
-
-  * Added support for intel-ipsec-mb version 0.54.
-  * Updated the AESNI MB PMD with AES-256 DOCSIS algorithm.
-  * Added support for synchronous Crypto burst API.
-
-* **Updated the AESNI GCM crypto PMD.**
-
-  * Added support for intel-ipsec-mb version 0.54.
-
-* **Updated the ZUC crypto PMD.**
-
-  * Added support for intel-ipsec-mb version 0.54.
-  * Updated the PMD to support Multi-buffer ZUC-EIA3,
-    improving performance significantly, when using
-    intel-ipsec-mb version 0.54
-
-* **Updated the SNOW3G crypto PMD.**
-
-  * Added support for intel-ipsec-mb version 0.54.
+  * Optimized the memory consumption of flows.
+  * Added support for flow aging based on hardware counters.
+  * Added support for flow pattern with wildcard VLAN items (without VID value).
+  * Updated support for matching on GTP headers, added match on GTP flags.
 
-* **Updated the KASUMI crypto PMD.**
+* **Added additional algorithms to the Cryptodev API.**
 
-  * Added support for intel-ipsec-mb version 0.54.
+  Added additional algorithms and updated support to the Cryptodev PMD and
+  APIs, including:
 
-* **Added a new driver for Intel Foxville I225 devices.**
+  * Added support for intel-ipsec-mb version 0.54 to the following PMDs: AESNI
+    MB, AESNI GCM, ZUC, KASUMI, SNOW 3G.
 
-  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
-  :doc:`../nics/igc` NIC guide for more details on this new driver.
+  * Added support for Chacha20-Poly1305 AEAD algorithm.
 
-* **Updated Broadcom bnxt driver.**
+  * Updated the ZUC crypto PMD to support Multi-buffer ZUC-EIA3, improving
+    performance significantly, when using intel-ipsec-mb version 0.54
 
-  Updated Broadcom bnxt driver with new features and improvements, including:
+  * AESNI MB crypto PMD:
 
-  * Added support for host based flow table management
-  * Added flow counters to extended stats
-  * Added PCI function stats to extended stats
+    * Updated the AESNI MB PMD with AES-256 DOCSIS algorithm.
+    * Added support for synchronous Crypto burst API.
 
 * **Added handling of mixed crypto algorithms in QAT PMD for GEN2.**
 
@@ -212,7 +190,7 @@ New Features
   when running on GEN2 QAT hardware with particular firmware versions
   (GEN3 support was added in DPDK 20.02).
 
-* **Added plain SHA-1,224,256,384,512 support to QAT PMD.**
+* **Added plain SHA-1, 224, 256, 384, 512 support to QAT PMD.**
 
   Added support for plain SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 hashes
   to QAT PMD.
@@ -220,26 +198,40 @@ New Features
 * **Added AES-GCM/GMAC J0 support to QAT PMD.**
 
   Added support for AES-GCM/GMAC J0 to Intel QuickAssist Technology PMD. User can
-  use this feature by passing zero length IV in appropriate xform. For more
-  info please refer to rte_crypto_sym.h J0 comments.
+  use this feature by passing a zero length IV in the appropriate xform. For more
+  info refer to the doxygen comments in ``rte_crypto_sym.h`` for ``J0``.
 
 * **Updated the QAT PMD for AES-256 DOCSIS.**
 
-  Added AES-256 DOCSIS algorithm support to QAT PMD.
+  Added AES-256 DOCSIS algorithm support to the QAT PMD.
 
-* **Added QAT intermediate buffer too small handling in QAT compression PMD.**
+* **Added QAT intermediate undersized buffer handling in QAT compression PMD.**
 
-  Added a special way of buffer handling when internal QAT intermediate buffer
-  is too small for Huffman dynamic compression operation. Instead of falling
+  Added special buffer handling when the internal QAT intermediate buffer is
+  too small for the Huffman dynamic compression operation. Instead of falling
   back to fixed compression, the operation is now split into multiple smaller
-  dynamic compression requests (possible to execute on QAT) and their results
-  are then combined and copied into the output buffer. This is not possible if
-  any checksum calculation was requested - in such case the code falls back to
-  fixed compression as before.
+  dynamic compression requests (which are possible to execute on QAT) and
+  their results are then combined and copied into the output buffer. This is
+  not possible if any checksum calculation was requested - in such cases the
+  code falls back to fixed compression as before.
+
+* **Added a new driver for Intel Foxville I225 devices.**
+
+  Added the new ``igc`` net driver for Intel Foxville I225 devices. See the
+  :doc:`../nics/igc` NIC guide for more details on this new driver.
+
+* **Updated Broadcom bnxt driver.**
+
+  Updated the Broadcom bnxt driver with new features and improvements, including:
+
+  * Added support for host based flow table management.
+  * Added flow counters to extended stats.
+  * Added PCI function stats to extended stats.
 
 * **Updated the turbo_sw bbdev PMD.**
 
-  Supported large size code blocks which does not fit in one mbuf segment.
+  Added support for large size code blocks which do not fit in one mbuf
+  segment.
 
 * **Added Intel FPGA_5GNR_FEC bbdev PMD.**
 
@@ -255,31 +247,32 @@ New Features
     accurate load balancing.
   * Improved behavior on high-core count systems.
   * Reduced latency in low-load situations.
-  * Extended DSW xstats with migration- and load-related statistics.
+  * Extended DSW xstats with migration and load-related statistics.
+
+* **Updated ipsec-secgw sample application.**
 
-* **Updated ipsec-secgw sample application with following features.**
+  Updated ``ipsec-secgw`` sample application with following features:
 
-  * Updated ipsec-secgw application to add event based packet processing.
-    The worker thread(s) would receive events and submit them back to the
-    event device after the processing. This way, multicore scaling and HW
-    assisted scheduling is achieved by making use of the event device
-    capabilities. The event mode currently supports only inline IPsec
-    protocol offload.
+  * Updated the application to add event based packet processing. The worker
+    thread(s) would receive events and submit them back to the event device
+    after the processing. This way, multicore scaling and HW assisted
+    scheduling is achieved by making use of the event device capabilities. The
+    event mode currently only supports inline IPsec protocol offload.
 
-  * Updated ipsec-secgw application to support key sizes for AES-192-CBC,
-    AES-192-GCM, AES-256-GCM algorithms.
+  * Updated the application to support key sizes for AES-192-CBC, AES-192-GCM,
+    AES-256-GCM algorithms.
 
-  * Added IPsec inbound load-distribution support for ipsec-secgw application
-    using NIC load distribution feature(Flow Director).
+  * Added IPsec inbound load-distribution support for the application using
+    NIC load distribution feature(Flow Director).
 
 * **Updated Telemetry Library.**
 
-  The updated Telemetry library has many improvements on the original version
-  to make it more accessible and scalable:
+  The updated Telemetry library has been significantly in relation to the
+  original version to make it more accessible and scalable:
 
-  * It enables DPDK libraries and applications provide their own specific
-    telemetry information, rather than being limited to what could be reported
-    through the metrics library.
+  * It now enables DPDK libraries and applications to provide their own
+    specific telemetry information, rather than being limited to what could be
+    reported through the metrics library.
 
   * It is no longer dependent on the external Jansson library, which allows
     Telemetry be enabled by default.
@@ -287,57 +280,47 @@ New Features
   * The socket handling has been simplified making it easier for clients to
     connect and retrieve information.
 
-* **Added rte_graph library.**
+* **Added the rte_graph library.**
 
-  Graph architecture abstracts the data processing functions as a ``node`` and
-  ``links`` them together to create a complex ``graph`` to enable reusable/modular
-  data processing functions. The graph library provides API to enable graph
-  framework operations such as create, lookup, dump and destroy on graph and node
-  operations such as clone, edge update, and edge shrink, etc.
-  The API also allows to create the stats cluster to monitor per graph and per node stats.
+  The Graph architecture abstracts the data processing functions as a ``node``
+  and ``links`` them together to create a complex ``graph`` to enable
+  reusable/modular data processing functions. The graph library provides APIs
+  to enable graph framework operations such as create, lookup, dump and
+  destroy on graph and node operations such as clone, edge update, and edge
+  shrink, etc.  The API also allows the creation of a stats cluster to monitor
+  per graph and per node statistics.
 
-* **Added rte_node library which consists of a set of packet processing nodes.**
+* **Added the rte_node library.**
 
-  The rte_node library that consists of nodes used by rte_graph library. Each
-  node performs a specific packet processing function based on application
-  configuration. The following nodes are added:
+  Added the ``rte_node`` library that consists of nodes used by ``rte_graph``
+  library. Each node performs a specific packet processing function based on
+  the application configuration. The following nodes are added:
 
-  * Null node: Skeleton node that defines the general structure of a node.
-  * Ethernet device node: Consists of ethernet Rx/Tx nodes as well as ethernet
+  * Null node: A skeleton node that defines the general structure of a node.
+  * Ethernet device node: Consists of Ethernet Rx/Tx nodes as well as Ethernet
     control APIs.
-  * IPv4 lookup node: Consists of ipv4 extract and lpm lookup node. Routes can
-    be configured by the application through ``rte_node_ip4_route_add`` function.
-  * IPv4 rewrite node: Consists of ipv4 and ethernet header rewrite functionality
-    that can be configured through ``rte_node_ip4_rewrite_add`` function.
+  * IPv4 lookup node: Consists of IPv4 extract and LPM lookup node. Routes can
+    be configured by the application through the ``rte_node_ip4_route_add``
+    function.
+  * IPv4 rewrite node: Consists of IPv4 and Ethernet header rewrite
+    functionality that can be configured through the
+    ``rte_node_ip4_rewrite_add`` function.
   * Packet drop node: Frees the packets received to their respective mempool.
 
 * **Added new l3fwd-graph sample application.**
 
-  Added an example application ``l3fwd-graph``. It demonstrates the usage of graph
-  library and node library for packet processing. In addition to the library usage
-  demonstration, this application can use for performance comparison with existing
-  ``l3fwd`` (The static code without any nodes) with the modular ``l3fwd-graph``
-  approach.
+  Added an example application ``l3fwd-graph``. This demonstrates the usage of
+  graph library and node library for packet processing. In addition to the
+  library usage demonstration, this application can be used for performance
+  comparison with existing ``l3fwd`` (The static code without any nodes) with
+  the modular ``l3fwd-graph`` approach.
 
-* **Updated testpmd application.**
+* **Updated the testpmd application.**
 
   * Added a new cmdline option ``--rx-mq-mode`` which can be used to test PMD's
     behaviour on handling Rx mq mode.
 
 
-Removed Items
--------------
-
-.. This section should contain removed items in this release. Sample format:
-
-   * Add a short 1-2 sentence description of the removed item
-     in the past tense.
-
-   This section is a comment. Do not overwrite or remove it.
-   Also, make sure to start the actual text at the margin.
-   =========================================================
-
-
 API Changes
 -----------
 
@@ -354,7 +337,7 @@ API Changes
    =========================================================
 
 * mempool: The API of ``rte_mempool_populate_iova()`` and
-  ``rte_mempool_populate_virt()`` changed to return 0 instead of -EINVAL
+  ``rte_mempool_populate_virt()`` changed to return 0 instead of ``-EINVAL``
   when there is not enough room to store one object.
 
 
@@ -376,21 +359,6 @@ ABI Changes
 * No ABI change that would break compatibility with DPDK 20.02 and 19.11.
 
 
-Known Issues
-------------
-
-.. This section should contain new known issues in this release. Sample format:
-
-   * **Add title in present tense with full stop.**
-
-     Add a short 1-2 sentence description of the known issue
-     in the present tense. Add information on any known workarounds.
-
-   This section is a comment. Do not overwrite or remove it.
-   Also, make sure to start the actual text at the margin.
-   =========================================================
-
-
 Tested Platforms
 ----------------
 
-- 
2.7.5


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH 20.08 8/9] devtools: support python3 only
  @ 2020-05-22 13:23  4% ` Louise Kilheeney
  2020-05-27  6:15  0%   ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Louise Kilheeney @ 2020-05-22 13:23 UTC (permalink / raw)
  To: dev; +Cc: Louise Kilheeney, Neil Horman, Ray Kinsella

Changed script to explicitly use python3 only.

Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Ray Kinsella <mdr@ashroe.eu>

Signed-off-by: Louise Kilheeney <louise.kilheeney@intel.com>
---
 devtools/update_version_map_abi.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
index 616412a1c..58aa368f9 100755
--- a/devtools/update_version_map_abi.py
+++ b/devtools/update_version_map_abi.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2019 Intel Corporation
 
@@ -9,7 +9,6 @@
 from the devtools/update-abi.sh utility.
 """
 
-from __future__ import print_function
 import argparse
 import sys
 import re
-- 
2.17.1


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH 2/3] drivers: drop workaround for internal libraries
  2020-05-22  6:58  4% [dpdk-dev] [PATCH 0/3] Experimental/internal libraries cleanup David Marchand
  2020-05-22  6:58 17% ` [dpdk-dev] [PATCH 1/3] build: remove special versioning for non stable libraries David Marchand
@ 2020-05-22  6:58  3% ` David Marchand
    2 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-22  6:58 UTC (permalink / raw)
  To: dev
  Cc: thomas, techboard, Ray Kinsella, Neil Horman, Hemant Agrawal,
	Sachin Saxena, Jerin Jacob, Nithin Dabilpuram, Akhil Goyal

Now that all libraries have a single version, we can drop the empty
stable blocks that had been added when moving symbols from stable to
internal ABI.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/bus/dpaa/rte_bus_dpaa_version.map                   | 6 ++----
 drivers/bus/fslmc/rte_bus_fslmc_version.map                 | 6 ++----
 drivers/common/dpaax/rte_common_dpaax_version.map           | 6 ++----
 drivers/common/octeontx2/rte_common_octeontx2_version.map   | 6 ++----
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map      | 6 ++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map        | 6 ++----
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map           | 6 ++----
 drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map | 6 ++----
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map                 | 6 ++----
 9 files changed, 18 insertions(+), 36 deletions(-)

diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index 46d42f7d64..491c507119 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,7 +1,3 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
@@ -90,4 +86,6 @@ INTERNAL {
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
+
+	local: *;
 };
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index 69e7dc6ad9..0a9947a454 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,7 +1,3 @@
-DPDK_20.0 {
-	local: *;
-};
-
 EXPERIMENTAL {
 	global:
 
@@ -111,4 +107,6 @@ INTERNAL {
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
 	rte_global_active_dqs_list;
+
+	local: *;
 };
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index 49c775c072..ee1ca6801c 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,7 +1,3 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
@@ -23,4 +19,6 @@ INTERNAL {
 	of_n_addr_cells;
 	of_translate_address;
 	rta_sec_era;
+
+	local: *;
 };
diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
index d26bd71172..9a9969613b 100644
--- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
+++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
@@ -1,7 +1,3 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
@@ -42,4 +38,6 @@ INTERNAL {
 	otx2_sso_pf_func_get;
 	otx2_sso_pf_func_set;
 	otx2_unregister_irq;
+
+	local: *;
 };
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 3d863aff4d..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,10 +1,8 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
 	dpaa2_sec_eventq_detach;
+
+	local: *;
 };
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 023e120516..731ea593ad 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,10 +1,8 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
+
+	local: *;
 };
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 89d7cf4957..142547ee38 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,10 +1,8 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
 	rte_dpaa_memsegs;
+
+	local: *;
 };
diff --git a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
index 8691efdfd8..e6887ceb8f 100644
--- a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
+++ b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
@@ -1,10 +1,8 @@
-DPDK_20.0 {
-	local: *;
-};
-
 INTERNAL {
 	global:
 
 	otx2_npa_lf_fini;
 	otx2_npa_lf_init;
+
+	local: *;
 };
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index b633fdc2a8..c3a457d2b9 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,7 +1,3 @@
-DPDK_20.0 {
-	local: *;
-};
-
 EXPERIMENTAL {
 	global:
 
@@ -15,4 +11,6 @@ INTERNAL {
 
 	dpaa2_eth_eventq_attach;
 	dpaa2_eth_eventq_detach;
+
+	local: *;
 };
-- 
2.23.0


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH 1/3] build: remove special versioning for non stable libraries
  2020-05-22  6:58  4% [dpdk-dev] [PATCH 0/3] Experimental/internal libraries cleanup David Marchand
@ 2020-05-22  6:58 17% ` David Marchand
  2020-05-22  6:58  3% ` [dpdk-dev] [PATCH 2/3] drivers: drop workaround for internal libraries David Marchand
    2 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-22  6:58 UTC (permalink / raw)
  To: dev; +Cc: thomas, techboard, Ray Kinsella, Neil Horman

Having a special versioning for experimental/internal libraries put a
additional maintenance cost while this status is already announced in
MAINTAINERS and the library headers/documentation.
Following discussions and vote at 05/20 TB meeting [1], use a single
versioning for all libraries in DPDK.

Note: for the ABI check, an exception [2] had been added when tweaking
this special versioning [3].
Prefer explicit libabigail rules (which will be dropped in 20.11).

1: https://mails.dpdk.org/archives/dev/2020-May/168450.html
2: https://git.dpdk.org/dpdk/commit/?id=23d7ad5db41c
3: https://git.dpdk.org/dpdk/commit/?id=ec2b8cd7ed69

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 buildtools/meson.build       |  3 ---
 config/meson.build           | 16 ++++++----------
 devtools/check-abi.sh        |  5 -----
 devtools/libabigail.abignore | 26 ++++++++++++++++++++++++--
 drivers/meson.build          | 13 +------------
 lib/meson.build              | 13 +------------
 mk/rte.lib.mk                |  5 -----
 7 files changed, 32 insertions(+), 49 deletions(-)

diff --git a/buildtools/meson.build b/buildtools/meson.build
index d5f8291beb..79703b6f93 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -18,6 +18,3 @@ else
 endif
 map_to_def_cmd = py3 + files('map_to_def.py')
 sphinx_wrapper = py3 + files('call-sphinx-build.py')
-
-# stable ABI always starts with "DPDK_"
-is_stable_cmd = [find_program('grep', 'findstr'), '^DPDK_']
diff --git a/config/meson.build b/config/meson.build
index 43ab113106..35975f1030 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -25,18 +25,14 @@ major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
 abi_version = run_command(find_program('cat', 'more'),
 	abi_version_file).stdout().strip()
 
-# Regular libraries have the abi_version as the filename extension
+# Libraries have the abi_version as the filename extension
 # and have the soname be all but the final part of the abi_version.
-# Experimental libraries have soname with '0.major'
-# and the filename suffix as 0.majorminor versions,
-# e.g. v20.1 => librte_stable.so.20.1, librte_experimental.so.0.201
-#    sonames => librte_stable.so.20, librte_experimental.so.0.20
-# e.g. v20.0.1 => librte_stable.so.20.0.1, librte_experimental.so.0.2001
-#      sonames => librte_stable.so.20.0, librte_experimental.so.0.200
+# e.g. v20.1 => librte_foo.so.20.1
+#    sonames => librte_foo.so.20
+# e.g. v20.0.1 => librte_foo.so.20.0.1
+#      sonames => librte_foo.so.20.0
 abi_va = abi_version.split('.')
-stable_so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[1]
-experimental_abi_version = '0.' + abi_va[0] + abi_va[1] + '.' + abi_va[2]
-experimental_so_version = experimental_abi_version
+so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[1]
 
 # extract all version information into the build configuration
 dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
diff --git a/devtools/check-abi.sh b/devtools/check-abi.sh
index dd9120e69e..e17fedbd9f 100755
--- a/devtools/check-abi.sh
+++ b/devtools/check-abi.sh
@@ -44,11 +44,6 @@ for dump in $(find $refdir -name "*.dump"); do
 		echo "Skipped glue library $name."
 		continue
 	fi
-	# skip experimental libraries, with a sover starting with 0.
-	if grep -qE "\<soname='[^']*\.so\.0\.[^']*'" $dump; then
-		echo "Skipped experimental library $name."
-		continue
-	fi
 	dump2=$(find $newdir -name $name)
 	if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then
 		echo "Error: can't find $name in $newdir"
diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index becbf842a5..02b290b08f 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -50,9 +50,10 @@
         name = rte_crypto_aead_algorithm_strings
 
 ;;;;;;;;;;;;;;;;;;;;;;
-; Temporary exceptions for new __rte_internal marking till DPDK 20.11
+; Temporary exceptions for new __rte_internal marking and experimental
+; libraries soname changes till DPDK 20.11
 ;;;;;;;;;;;;;;;;;;;;;;
-; Ignore moving OCTEONTX2 stable functions to INTERNAL tag
+; Ignore moving OCTEONTX2 stable functions to INTERNAL
 [suppress_file]
 	file_name_regexp = ^librte_common_octeontx2\.
 [suppress_file]
@@ -77,3 +78,24 @@
         name = rte_dpaa2_mbuf_alloc_bulk
 [suppress_function]
         name_regexp = ^dpaa2?_.*tach$
+; Ignore soname changes for experimental libraries
+[suppress_file]
+	file_name_regexp = ^librte_bbdev\.
+[suppress_file]
+	file_name_regexp = ^librte_bpf\.
+[suppress_file]
+	file_name_regexp = ^librte_compressdev\.
+[suppress_file]
+	file_name_regexp = ^librte_fib\.
+[suppress_file]
+	file_name_regexp = ^librte_flow_classify\.
+[suppress_file]
+	file_name_regexp = ^librte_ipsec\.
+[suppress_file]
+	file_name_regexp = ^librte_rcu\.
+[suppress_file]
+	file_name_regexp = ^librte_rib\.
+[suppress_file]
+	file_name_regexp = ^librte_telemetry\.
+[suppress_file]
+	file_name_regexp = ^librte_stack\.
diff --git a/drivers/meson.build b/drivers/meson.build
index cfb6a833c9..4e5713bb27 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -128,17 +128,6 @@ foreach class:dpdk_driver_classes
 					meson.current_source_dir(),
 					drv_path, lib_name)
 
-			is_stable = run_command(is_stable_cmd,
-				files(version_map)).returncode() == 0
-
-			if is_stable
-				lib_version = abi_version
-				so_version = stable_so_version
-			else
-				lib_version = experimental_abi_version
-				so_version = experimental_so_version
-			endif
-
 			# now build the static driver
 			static_lib = static_library(lib_name,
 				sources,
@@ -183,7 +172,7 @@ foreach class:dpdk_driver_classes
 				c_args: cflags,
 				link_args: lk_args,
 				link_depends: lk_deps,
-				version: lib_version,
+				version: abi_version,
 				soversion: so_version,
 				install: true,
 				install_dir: driver_install_path)
diff --git a/lib/meson.build b/lib/meson.build
index d190d84eff..13b330396c 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -110,17 +110,6 @@ foreach l:libraries
 			version_map = '@0@/@1@/rte_@2@_version.map'.format(
 					meson.current_source_dir(), dir_name, name)
 
-			is_stable = run_command(is_stable_cmd,
-					files(version_map)).returncode() == 0
-
-			if is_stable
-				lib_version = abi_version
-				so_version = stable_so_version
-			else
-				lib_version = experimental_abi_version
-				so_version = experimental_so_version
-			endif
-
 			# first build static lib
 			static_lib = static_library(libname,
 					sources,
@@ -179,7 +168,7 @@ foreach l:libraries
 					include_directories: includes,
 					link_args: lk_args,
 					link_depends: lk_deps,
-					version: lib_version,
+					version: abi_version,
 					soversion: so_version,
 					install: true)
 			shared_dep = declare_dependency(link_with: shared_lib,
diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
index 682b590dba..229ae16814 100644
--- a/mk/rte.lib.mk
+++ b/mk/rte.lib.mk
@@ -13,11 +13,6 @@ VPATH += $(SRCDIR)
 
 LIBABIVER ?= $(shell cat $(RTE_SRCDIR)/ABI_VERSION)
 SOVER := $(basename $(LIBABIVER))
-ifeq ($(shell grep -s "^DPDK_" $(SRCDIR)/$(EXPORT_MAP)),)
-# EXPERIMENTAL ABI is versioned as 0.major+minor, e.g. 0.201 for 20.1 ABI
-LIBABIVER := 0.$(shell echo $(LIBABIVER) | awk 'BEGIN { FS="." }; { print $$1$$2"."$$3 }')
-SOVER := $(LIBABIVER)
-endif
 
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
 SONAME := $(patsubst %.a,%.so.$(SOVER),$(LIB))
-- 
2.23.0


^ permalink raw reply	[relevance 17%]

* [dpdk-dev] [PATCH 0/3] Experimental/internal libraries cleanup
@ 2020-05-22  6:58  4% David Marchand
  2020-05-22  6:58 17% ` [dpdk-dev] [PATCH 1/3] build: remove special versioning for non stable libraries David Marchand
                   ` (2 more replies)
  0 siblings, 3 replies; 200+ results
From: David Marchand @ 2020-05-22  6:58 UTC (permalink / raw)
  To: dev; +Cc: thomas, techboard

Following discussions on the mailing list and the last TB meeting, here
is a series that drops the special versioning for non stable libraries.

Two notes:

- RIB/FIB library is not referenced in the API doxygen index, is this
  intentional?
- I inspected MAINTAINERS: librte_gro, librte_member and librte_rawdev are
  announced as experimental while their functions are part of the 20
  stable ABI (in .map files + no __rte_experimental marking).
  I won't touch this for 20.05 but their fate will have to be discussed.

-- 
David Marchand

David Marchand (3):
  build: remove special versioning for non stable libraries
  drivers: drop workaround for internal libraries
  lib: remind experimental status in library headers

 buildtools/meson.build                        |  3 ---
 config/meson.build                            | 16 +++++-------
 devtools/check-abi.sh                         |  5 ----
 devtools/libabigail.abignore                  | 26 +++++++++++++++++--
 drivers/bus/dpaa/rte_bus_dpaa_version.map     |  6 ++---
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  6 ++---
 .../common/dpaax/rte_common_dpaax_version.map |  6 ++---
 .../rte_common_octeontx2_version.map          |  6 ++---
 .../dpaa2_sec/rte_pmd_dpaa2_sec_version.map   |  6 ++---
 .../dpaa_sec/rte_pmd_dpaa_sec_version.map     |  6 ++---
 .../mempool/dpaa/rte_mempool_dpaa_version.map |  6 ++---
 .../rte_mempool_octeontx2_version.map         |  6 ++---
 drivers/meson.build                           | 13 +---------
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map   |  6 ++---
 lib/librte_bbdev/rte_bbdev.h                  |  3 ++-
 lib/librte_bpf/rte_bpf.h                      |  6 ++++-
 lib/librte_compressdev/rte_compressdev.h      |  6 ++++-
 lib/librte_fib/rte_fib.h                      |  7 +++++
 lib/librte_fib/rte_fib6.h                     |  7 +++++
 lib/librte_flow_classify/rte_flow_classify.h  |  6 +++--
 lib/librte_ipsec/rte_ipsec.h                  |  6 ++++-
 lib/librte_rcu/rte_rcu_qsbr.h                 |  7 ++++-
 lib/librte_rib/rte_rib.h                      |  7 +++++
 lib/librte_rib/rte_rib6.h                     |  7 +++++
 lib/librte_stack/rte_stack.h                  |  7 +++--
 lib/librte_telemetry/rte_telemetry.h          | 10 ++++---
 lib/meson.build                               | 13 +---------
 mk/rte.lib.mk                                 |  5 ----
 28 files changed, 116 insertions(+), 98 deletions(-)

-- 
2.23.0


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH 0/4] fix build with GCC 10
  2020-05-20 16:45  0% ` Kevin Traynor
@ 2020-05-21 13:39  0%   ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-21 13:39 UTC (permalink / raw)
  To: Kevin Traynor; +Cc: dev, david.marchand

20/05/2020 18:45, Kevin Traynor:
> On 20/05/2020 14:58, Thomas Monjalon wrote:
> > These are supposed to be the last patches to support GCC 10.
> > 
> > Thomas Monjalon (4):
> >   net/mvpp2: fix build with gcc 10
> >   examples/vm_power: fix build with -fno-common
> >   examples/vm_power: drop Unix path limit redefinition
> >   devtools: allow warnings in ABI reference build
> > 
> >  devtools/test-build.sh                      | 6 ++----
> >  devtools/test-meson-builds.sh               | 3 +--
> >  drivers/net/mvpp2/mrvl_flow.c               | 4 ++--
> >  examples/vm_power_manager/channel_manager.c | 3 ++-
> >  examples/vm_power_manager/channel_manager.h | 9 ++-------
> >  examples/vm_power_manager/power_manager.c   | 1 -
> >  6 files changed, 9 insertions(+), 17 deletions(-)
> > 
> For series:
> Acked-by: Kevin Traynor <ktraynor@redhat.com>

Applied



^ permalink raw reply	[relevance 0%]

* [dpdk-dev] DPDK-20.05 RC3 day2 quick report
@ 2020-05-21 11:24  3% Peng, Yuan
  0 siblings, 0 replies; 200+ results
From: Peng, Yuan @ 2020-05-21 11:24 UTC (permalink / raw)
  To: dev

DPDK-20.05 RC3 day2 quick report

  *   Totally create ~400+ new test cases for DPDK20.05 new features.
  *   Totally 10203 cases, execution percentage is about 99%, pass rate is about 97%, 5 new issues are found till now, including a high level issue.
  *   Checked build and compile, found 1 new issue, now fixed and verified.
  *   Checked Basic NIC PMD(i40e, ixgbe, ice) PF & VF regression, new found 3 PF issue.
  *   Checked virtio regression test, no new bug is found.
  *   Checked cryptodev and compressdev regression, no new issus found so far.
  *   Checked NIC performance, no new issue found so far.
  *   Checked ABI test, no new issue found so far.
  *   Checked 20.05 new features: 1 new issue found so far.

Thank you.
Yuan.


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] DPDK Release Status Meeting 21/05/2020
  2020-05-21 11:20  3% [dpdk-dev] DPDK Release Status Meeting 21/05/2020 Ferruh Yigit
@ 2020-05-21 11:24  0% ` Ferruh Yigit
  0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-21 11:24 UTC (permalink / raw)
  To: dpdk-dev; +Cc: Thomas Monjalon, Ajit Khaparde

On 5/21/2020 12:20 PM, Ferruh Yigit wrote:
> Minutes 21 May 2020
> -------------------
> 
> Agenda:
> * Release Dates
> * -rc3 status
> * Subtrees
> * Opens
> 
> Participants:
> * Arm
> * Debian/Microsoft
> * Intel
> * Marvell
> * Mellanox
> * NXP
> * Red Hat
> 
> 
> Release Dates
> -------------
> 
> * v20.05 dates:
>   * -rc3 is released on Tuesday, 19 May
>     * https://mails.dpdk.org/archives/dev/2020-May/168313.html
>   * -rc4 pushed to		*Sunday 24 May 2020*
>   * Release pushed to		*Tuesday 26 May 2020*
> 
> * v20.08 proposal dates *updated*, please comment:
>   * Proposal/V1:		Friday, 12 June 2020
>   * -rc1:			Wednesday, 8 July 2020
>   * -rc2:			Monday, 20 July 2020
>   * Release:			Tuesday, 4 August 2020
> 
>   * Please send roadmap for the release
> 
> 
> -rc3 status
> -----------
> 
> * Intel testing %80 percent done, can be completed tomorrow
>   * Only a PMD issue and a few medium priority defects found
>   * Overall looks good
> 
> 
> Subtrees
> --------
> 
> * main
>   * Some gcc10 fixes will be merged
>     * gcc10 may be causing ABI compatibility issues
>   * Started to work on release notes, John will support
>     * Good to have tested HW information from all vendors
> 
> * next-net
>   * Only a few fixes for -rc4
>   * Vendor sub-trees has patches, will pull from them today
> 
> * next-crypto
>   * No update
> 
> * next-eventdev
>   * No update
> 
> * next-virtio
>   * No update
> 
> * next-net-intel
>   * Some fixes in sub-tree already
> 
> * LTS
> 
>   * A set of security releases done
>     * 19.11.2: https://mails.dpdk.org/archives/dev/2020-May/168103.html
>     * 18.11.8: https://mails.dpdk.org/archives/dev/2020-May/168110.html
>     * 20.02.1: https://mails.dpdk.org/archives/dev/2020-May/168102.html
> 
> 
> Opens
> -----
> 
> * Fuzz testing can be used capture some security issues in advance.
>   * This can be done in the CI.
>   * Luca shared oss-fuzz as reference:
>     * https://oss-fuzz.com/
>     * https://github.com/google/oss-fuzz
> 
> 
> 
> 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 Thursdays at 8:30 UTC. If you wish to attend just
> send an email to "John McNamara <john.mcnamara@intel.com>" for the invite.
> 


We forget to mention but Ajit send the "DPDK bugs against 20.05" offline, let me
put the list here:


https://bugs.dpdk.org/show_bug.cgi?id=475
https://bugs.dpdk.org/show_bug.cgi?id=474
https://bugs.dpdk.org/show_bug.cgi?id=473
https://bugs.dpdk.org/show_bug.cgi?id=472
https://bugs.dpdk.org/show_bug.cgi?id=470
https://bugs.dpdk.org/show_bug.cgi?id=465 (Duplicate of 471)
https://bugs.dpdk.org/show_bug.cgi?id=481

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] DPDK Release Status Meeting 21/05/2020
@ 2020-05-21 11:20  3% Ferruh Yigit
  2020-05-21 11:24  0% ` Ferruh Yigit
  0 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2020-05-21 11:20 UTC (permalink / raw)
  To: dpdk-dev; +Cc: Thomas Monjalon

Minutes 21 May 2020
-------------------

Agenda:
* Release Dates
* -rc3 status
* Subtrees
* Opens

Participants:
* Arm
* Debian/Microsoft
* Intel
* Marvell
* Mellanox
* NXP
* Red Hat


Release Dates
-------------

* v20.05 dates:
  * -rc3 is released on Tuesday, 19 May
    * https://mails.dpdk.org/archives/dev/2020-May/168313.html
  * -rc4 pushed to		*Sunday 24 May 2020*
  * Release pushed to		*Tuesday 26 May 2020*

* v20.08 proposal dates *updated*, please comment:
  * Proposal/V1:		Friday, 12 June 2020
  * -rc1:			Wednesday, 8 July 2020
  * -rc2:			Monday, 20 July 2020
  * Release:			Tuesday, 4 August 2020

  * Please send roadmap for the release


-rc3 status
-----------

* Intel testing %80 percent done, can be completed tomorrow
  * Only a PMD issue and a few medium priority defects found
  * Overall looks good


Subtrees
--------

* main
  * Some gcc10 fixes will be merged
    * gcc10 may be causing ABI compatibility issues
  * Started to work on release notes, John will support
    * Good to have tested HW information from all vendors

* next-net
  * Only a few fixes for -rc4
  * Vendor sub-trees has patches, will pull from them today

* next-crypto
  * No update

* next-eventdev
  * No update

* next-virtio
  * No update

* next-net-intel
  * Some fixes in sub-tree already

* LTS

  * A set of security releases done
    * 19.11.2: https://mails.dpdk.org/archives/dev/2020-May/168103.html
    * 18.11.8: https://mails.dpdk.org/archives/dev/2020-May/168110.html
    * 20.02.1: https://mails.dpdk.org/archives/dev/2020-May/168102.html


Opens
-----

* Fuzz testing can be used capture some security issues in advance.
  * This can be done in the CI.
  * Luca shared oss-fuzz as reference:
    * https://oss-fuzz.com/
    * https://github.com/google/oss-fuzz



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 Thursdays at 8:30 UTC. If you wish to attend just
send an email to "John McNamara <john.mcnamara@intel.com>" for the invite.

^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v2] doc: deprication notice to mark tm spec as experimental
  @ 2020-05-21 10:49  0%     ` Jerin Jacob
  2020-05-24 20:58  0%       ` Nithin Kumar D
  2020-05-24 23:33  0%       ` Thomas Monjalon
  0 siblings, 2 replies; 200+ results
From: Jerin Jacob @ 2020-05-21 10:49 UTC (permalink / raw)
  To: Dumitrescu, Cristian
  Cc: Nithin Dabilpuram, Yigit, Ferruh, Richardson, Bruce, thomas,
	bluca, Singh, Jasvinder, arybchenko, Kinsella, Ray, nhorman,
	ktraynor, david.marchand, Mcnamara, John, Kovacevic, Marko, dev,
	jerinj, kkanas, Nithin Dabilpuram

On Tue, May 5, 2020 at 2:25 PM Dumitrescu, Cristian
<cristian.dumitrescu@intel.com> wrote:
>
>
>
> > -----Original Message-----
> > From: Nithin Dabilpuram <nithind1988@gmail.com>
> > Sent: Tuesday, May 5, 2020 9:08 AM
> > To: Yigit, Ferruh <ferruh.yigit@intel.com>; Richardson, Bruce
> > <bruce.richardson@intel.com>; Dumitrescu, Cristian
> > <cristian.dumitrescu@intel.com>; thomas@monjalon.net;
> > bluca@debian.org; Singh, Jasvinder <jasvinder.singh@intel.com>;
> > arybchenko@solarflare.com; Kinsella, Ray <ray.kinsella@intel.com>;
> > nhorman@tuxdriver.com; ktraynor@redhat.com;
> > david.marchand@redhat.com; Mcnamara, John
> > <john.mcnamara@intel.com>; Kovacevic, Marko
> > <marko.kovacevic@intel.com>
> > Cc: dev@dpdk.org; jerinj@marvell.com; kkanas@marvell.com; Nithin
> > Dabilpuram <ndabilpuram@marvell.com>
> > Subject: [PATCH v2] doc: deprication notice to mark tm spec as experimental
> >
> > From: Nithin Dabilpuram <ndabilpuram@marvell.com>
> >
> > Based on the discussion in mail thread, it is concluded that
> > all traffic manager API's (rte_tm.h) need to be marked experimental
> > till few more releases to support further improvements to spec.
> >
> > https://mails.dpdk.org/archives/dev/2020-April/164970.html
> >
> > Adding deprication notice for the same in advance.
> >
> > Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
> > ---
> >  doc/guides/rel_notes/deprecation.rst | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/doc/guides/rel_notes/deprecation.rst
> > b/doc/guides/rel_notes/deprecation.rst
> > index 1339f54..2c76f36 100644
> > --- a/doc/guides/rel_notes/deprecation.rst
> > +++ b/doc/guides/rel_notes/deprecation.rst
> > @@ -118,3 +118,10 @@ Deprecation Notices
> >    Python 2 support will be completely removed in 20.11.
> >    In 20.08, explicit deprecation warnings will be displayed when running
> >    scripts with Python 2.
> > +
> > +* traffic manager: All traffic manager API's in ``rte_tm.h`` were mistakenly
> > made
> > +  abi stable in the v19.11 release. The TM maintainer and other contributor's
> > have
> > +  agreed to keep the TM API's as experimental in expectation of additional
> > spec
> > +  improvements. Therefore, all API's in ``rte_tm.h`` will be marked back as
> > +  experimental in v20.11 DPDK release. For more details, please see `the
> > thread
> > +  <https://mails.dpdk.org/archives/dev/2020-April/164970.html>`_.
> > --
> > 2.8.4
>
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Acked-by: Jerin Jacob <jerinj@marvell.com>


>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH 0/4] fix build with GCC 10
  2020-05-20 13:58  3% [dpdk-dev] [PATCH 0/4] fix build with GCC 10 Thomas Monjalon
  2020-05-20 13:58 14% ` [dpdk-dev] [PATCH 4/4] devtools: allow warnings in ABI reference build Thomas Monjalon
  2020-05-20 14:52  0% ` [dpdk-dev] [PATCH 0/4] fix build with GCC 10 David Marchand
@ 2020-05-20 16:45  0% ` Kevin Traynor
  2020-05-21 13:39  0%   ` Thomas Monjalon
  2 siblings, 1 reply; 200+ results
From: Kevin Traynor @ 2020-05-20 16:45 UTC (permalink / raw)
  To: Thomas Monjalon, dev; +Cc: david.marchand

On 20/05/2020 14:58, Thomas Monjalon wrote:
> These are supposed to be the last patches to support GCC 10.
> 
> Thomas Monjalon (4):
>   net/mvpp2: fix build with gcc 10
>   examples/vm_power: fix build with -fno-common
>   examples/vm_power: drop Unix path limit redefinition
>   devtools: allow warnings in ABI reference build
> 
>  devtools/test-build.sh                      | 6 ++----
>  devtools/test-meson-builds.sh               | 3 +--
>  drivers/net/mvpp2/mrvl_flow.c               | 4 ++--
>  examples/vm_power_manager/channel_manager.c | 3 ++-
>  examples/vm_power_manager/channel_manager.h | 9 ++-------
>  examples/vm_power_manager/power_manager.c   | 1 -
>  6 files changed, 9 insertions(+), 17 deletions(-)
> 
For series:
Acked-by: Kevin Traynor <ktraynor@redhat.com>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH 0/4] fix build with GCC 10
  2020-05-20 13:58  3% [dpdk-dev] [PATCH 0/4] fix build with GCC 10 Thomas Monjalon
  2020-05-20 13:58 14% ` [dpdk-dev] [PATCH 4/4] devtools: allow warnings in ABI reference build Thomas Monjalon
@ 2020-05-20 14:52  0% ` David Marchand
  2020-05-20 16:45  0% ` Kevin Traynor
  2 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-20 14:52 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev

On Wed, May 20, 2020 at 3:58 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> These are supposed to be the last patches to support GCC 10.
>
> Thomas Monjalon (4):
>   net/mvpp2: fix build with gcc 10
>   examples/vm_power: fix build with -fno-common
>   examples/vm_power: drop Unix path limit redefinition
>   devtools: allow warnings in ABI reference build
>
>  devtools/test-build.sh                      | 6 ++----
>  devtools/test-meson-builds.sh               | 3 +--
>  drivers/net/mvpp2/mrvl_flow.c               | 4 ++--
>  examples/vm_power_manager/channel_manager.c | 3 ++-
>  examples/vm_power_manager/channel_manager.h | 9 ++-------
>  examples/vm_power_manager/power_manager.c   | 1 -
>  6 files changed, 9 insertions(+), 17 deletions(-)

For the series,
Acked-by: David Marchand <david.marchand@redhat.com>


-- 
David Marchand


^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH 4/4] devtools: allow warnings in ABI reference build
  2020-05-20 13:58  3% [dpdk-dev] [PATCH 0/4] fix build with GCC 10 Thomas Monjalon
@ 2020-05-20 13:58 14% ` Thomas Monjalon
  2020-05-20 14:52  0% ` [dpdk-dev] [PATCH 0/4] fix build with GCC 10 David Marchand
  2020-05-20 16:45  0% ` Kevin Traynor
  2 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-20 13:58 UTC (permalink / raw)
  To: dev; +Cc: david.marchand

There is no point in forcing warning-free compilation when building
an ABI reference. It is only preventing from compiling ABI reference
of old releases with recent compilers.

Note: DPDK 20.02 is built (with warnings) by GCC 10 if using -fcommon.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 devtools/test-build.sh        | 6 ++----
 devtools/test-meson-builds.sh | 3 +--
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/devtools/test-build.sh b/devtools/test-build.sh
index 6e53f86fc8..f013656024 100755
--- a/devtools/test-build.sh
+++ b/devtools/test-build.sh
@@ -68,8 +68,6 @@ J=$DPDK_MAKE_JOBS
 builds_dir=${DPDK_BUILD_TEST_DIR:-.}
 short=false
 unset verbose
-# for ABI checks, we need debuginfo
-test_cflags="-Wfatal-errors -g"
 while getopts hj:sv ARG ; do
 	case $ARG in
 		j ) J=$OPTARG ;;
@@ -248,7 +246,7 @@ for conf in $configs ; do
 	config $dir $target $options
 
 	echo "================== Build $conf"
-	${MAKE} -j$J EXTRA_CFLAGS="$test_cflags $DPDK_DEP_CFLAGS" \
+	${MAKE} -j$J EXTRA_CFLAGS="-Wfatal-errors -g $DPDK_DEP_CFLAGS" \
 		EXTRA_LDFLAGS="$DPDK_DEP_LDFLAGS" $verbose O=$dir
 	! $short || break
 	export RTE_TARGET=$target
@@ -282,7 +280,7 @@ for conf in $configs ; do
 			echo -n "================== Build $conf "
 			echo "($DPDK_ABI_REF_VERSION)"
 			${MAKE} -j$J \
-				EXTRA_CFLAGS="$test_cflags $DPDK_DEP_CFLAGS" \
+				EXTRA_CFLAGS="-Wno-error -g $DPDK_DEP_CFLAGS" \
 				EXTRA_LDFLAGS="$DPDK_DEP_LDFLAGS" $verbose \
 				O=$abirefdir/build
 			export RTE_TARGET=$target
diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index e8df017596..18b874fac5 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -74,7 +74,6 @@ config () # <dir> <builddir> <meson options>
 		return
 	fi
 	options=
-	options="$options --werror"
 	if echo $* | grep -qw -- '--default-library=shared' ; then
 		options="$options -Dexamples=all"
 	else
@@ -127,7 +126,7 @@ build () # <directory> <target compiler> <meson options>
 	# skip build if compiler not available
 	command -v ${CC##* } >/dev/null 2>&1 || return 0
 	load_env $targetcc || return 0
-	config $srcdir $builds_dir/$targetdir $*
+	config $srcdir $builds_dir/$targetdir --werror $*
 	compile $builds_dir/$targetdir
 	if [ -n "$DPDK_ABI_REF_VERSION" ]; then
 		abirefdir=${DPDK_ABI_REF_DIR:-reference}/$DPDK_ABI_REF_VERSION
-- 
2.26.2


^ permalink raw reply	[relevance 14%]

* [dpdk-dev] [PATCH 0/4] fix build with GCC 10
@ 2020-05-20 13:58  3% Thomas Monjalon
  2020-05-20 13:58 14% ` [dpdk-dev] [PATCH 4/4] devtools: allow warnings in ABI reference build Thomas Monjalon
                   ` (2 more replies)
  0 siblings, 3 replies; 200+ results
From: Thomas Monjalon @ 2020-05-20 13:58 UTC (permalink / raw)
  To: dev; +Cc: david.marchand

These are supposed to be the last patches to support GCC 10.

Thomas Monjalon (4):
  net/mvpp2: fix build with gcc 10
  examples/vm_power: fix build with -fno-common
  examples/vm_power: drop Unix path limit redefinition
  devtools: allow warnings in ABI reference build

 devtools/test-build.sh                      | 6 ++----
 devtools/test-meson-builds.sh               | 3 +--
 drivers/net/mvpp2/mrvl_flow.c               | 4 ++--
 examples/vm_power_manager/channel_manager.c | 3 ++-
 examples/vm_power_manager/channel_manager.h | 9 ++-------
 examples/vm_power_manager/power_manager.c   | 1 -
 6 files changed, 9 insertions(+), 17 deletions(-)

-- 
2.26.2


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v1 1/2] devtools: add internal ABI version check
  2020-05-19 15:35  4% ` [dpdk-dev] [PATCH v1 1/2] devtools: add internal ABI version check David Marchand
@ 2020-05-19 16:54  4%   ` David Marchand
  0 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-19 16:54 UTC (permalink / raw)
  To: Haiyue Wang
  Cc: dev, Thomas Monjalon, Bruce Richardson, Burakov, Anatoly,
	Neil Horman, Ray Kinsella

On Tue, May 19, 2020 at 5:35 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Thu, Apr 30, 2020 at 7:54 AM Haiyue Wang <haiyue.wang@intel.com> wrote:
> >
> > INTERNAL is new introduced version, update the shell script that checks
> > whether built libraries are versioned with expected ABI (current ABI,
> > current ABI + 1, EXPERIMENTAL, or INTERNAL).
> >
> > Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
> Acked-by: David Marchand <david.marchand@redhat.com>

Series applied, thanks.


-- 
David Marchand


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v1 1/2] devtools: add internal ABI version check
    @ 2020-05-19 15:35  4% ` David Marchand
  2020-05-19 16:54  4%   ` David Marchand
  1 sibling, 1 reply; 200+ results
From: David Marchand @ 2020-05-19 15:35 UTC (permalink / raw)
  To: Haiyue Wang
  Cc: dev, Thomas Monjalon, Bruce Richardson, Burakov, Anatoly,
	Neil Horman, Ray Kinsella

On Thu, Apr 30, 2020 at 7:54 AM Haiyue Wang <haiyue.wang@intel.com> wrote:
>
> INTERNAL is new introduced version, update the shell script that checks
> whether built libraries are versioned with expected ABI (current ABI,
> current ABI + 1, EXPERIMENTAL, or INTERNAL).
>
> Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
> ---
>  devtools/check-abi-version.sh | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/devtools/check-abi-version.sh b/devtools/check-abi-version.sh
> index 9a3d13546..f0cca42a9 100755
> --- a/devtools/check-abi-version.sh
> +++ b/devtools/check-abi-version.sh
> @@ -4,7 +4,7 @@
>
>  # Check whether library symbols have correct
>  # version (provided ABI number or provided ABI
> -# number + 1 or EXPERIMENTAL).
> +# number + 1 or EXPERIMENTAL or INTERNAL).
>  # Args:
>  #   $1: path of the library .so file
>  #   $2: ABI major version number to check
> @@ -12,7 +12,7 @@
>
>  if [ -z "$1" ]; then
>      echo "Script checks whether library symbols have"
> -    echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL)"
> +    echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL/INTERNAL)"
>      echo "Usage:"
>      echo "  $0 SO_FILE_PATH [ABI_VER]"
>      exit 1
> @@ -41,11 +41,11 @@ for SYM in $(echo "${OBJ_DUMP_OUTPUT}" | awk '{print $(NF-1) "-" $NF}')
>  do
>      version=$(echo $SYM | cut -d'-' -f 1)
>      symbol=$(echo $SYM | cut -d'-' -f 2)
> -    case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL")
> +    case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL"|"INTERNAL")
>          ;;
>      (*)
>          echo "Warning: symbol $symbol ($version) should be annotated " \
> -             "as ABI version $ABIVER / $NEXT_ABIVER, or EXPERIMENTAL."
> +             "as ABI version $ABIVER / $NEXT_ABIVER, EXPERIMENTAL, or INTERNAL."
>          ret=1
>      ;;
>      esac
> --
> 2.26.2
>

LGTM + tested current master before and after the patch.

Acked-by: David Marchand <david.marchand@redhat.com>

-- 
David Marchand


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v1 2/2] devtools: updating internal symbols ABI version
  @ 2020-05-19 15:10  9%   ` David Marchand
  0 siblings, 0 replies; 200+ results
From: David Marchand @ 2020-05-19 15:10 UTC (permalink / raw)
  To: Haiyue Wang, Ray Kinsella
  Cc: dev, Thomas Monjalon, Bruce Richardson, Burakov, Anatoly, Neil Horman

On Thu, Apr 30, 2020 at 7:54 AM Haiyue Wang <haiyue.wang@intel.com> wrote:
>
> INTERNAL is new introduced version, update the script that automatically
> leaving internal section exactly as it is.
>
> Signed-off-by: Haiyue Wang <haiyue.wang@intel.com>
> ---
>  devtools/update_version_map_abi.py | 37 +++++++++++++++++++++++++++---
>  1 file changed, 34 insertions(+), 3 deletions(-)
>
> diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
> index 616412a1c..e2104e61e 100755
> --- a/devtools/update_version_map_abi.py
> +++ b/devtools/update_version_map_abi.py
> @@ -50,7 +50,10 @@ def __parse_map_file(f_in):
>      stable_lines = set()
>      # copy experimental section as is
>      experimental_lines = []
> +    # copy internal section as is
> +    internal_lines = []
>      in_experimental = False
> +    in_internal = False
>      has_stable = False
>
>      # gather all functions
> @@ -63,6 +66,7 @@ def __parse_map_file(f_in):
>          if match:
>              # whatever section this was, it's not active any more
>              in_experimental = False
> +            in_internal = False
>              continue
>
>          # if we're in the middle of experimental section, we need to copy
> @@ -71,6 +75,12 @@ def __parse_map_file(f_in):
>              experimental_lines += [line]
>              continue
>
> +        # if we're in the middle of internal section, we need to copy
> +        # the section verbatim, so just add the line
> +        if in_internal:
> +            internal_lines += [line]
> +            continue
> +
>          # skip empty lines
>          if not line:
>              continue
> @@ -81,7 +91,9 @@ def __parse_map_file(f_in):
>              cur_section = match.group("version")
>              # is it experimental?
>              in_experimental = cur_section == "EXPERIMENTAL"
> -            if not in_experimental:
> +            # is it internal?
> +            in_internal = cur_section == "INTERNAL"
> +            if not in_experimental and not in_internal:
>                  has_stable = True
>              continue
>
> @@ -90,7 +102,7 @@ def __parse_map_file(f_in):
>          if match:
>              stable_lines.add(match.group("func"))
>
> -    return has_stable, stable_lines, experimental_lines
> +    return has_stable, stable_lines, experimental_lines, internal_lines
>
>
>  def __generate_stable_abi(f_out, abi_version, lines):
> @@ -132,6 +144,20 @@ def __generate_experimental_abi(f_out, lines):
>      # end section
>      print("};", file=f_out)
>
> +def __generate_internal_abi(f_out, lines):
> +    # start internal section
> +    print("INTERNAL {", file=f_out)
> +
> +    # print all internal lines as they were
> +    for line in lines:
> +        # don't print empty whitespace
> +        if not line:
> +            print("", file=f_out)
> +        else:
> +            print("\t{}".format(line), file=f_out)
> +
> +    # end section
> +    print("};", file=f_out)
>
>  def __main():
>      arg_parser = argparse.ArgumentParser(
> @@ -158,7 +184,7 @@ def __main():
>          sys.exit(1)
>
>      with open(parsed.map_file) as f_in:
> -        has_stable, stable_lines, experimental_lines = __parse_map_file(f_in)
> +        has_stable, stable_lines, experimental_lines, internal_lines = __parse_map_file(f_in)
>
>      with open(parsed.map_file, 'w') as f_out:
>          need_newline = has_stable and experimental_lines
> @@ -169,6 +195,11 @@ def __main():
>              print(file=f_out)
>          if experimental_lines:
>              __generate_experimental_abi(f_out, experimental_lines)
> +        if internal_lines:
> +            if has_stable or experimental_lines:
> +              # separate sections with a newline
> +              print(file=f_out)
> +            __generate_internal_abi(f_out, internal_lines)
>
>
>  if __name__ == "__main__":
> --
> 2.26.2
>

LGTM.
Acked-by: David Marchand <david.marchand@redhat.com>


One comment, trying to update to ABI 21, the script refuses and
expects a 21.X format:
$ ./devtools/update-abi.sh 21
ABI version must be formatted as MAJOR.MINOR version

And passing 21.0 then generates DPDK_21.0 blocks which I understand
are incorrect.
$ git diff drivers/common/iavf/rte_common_iavf_version.map
diff --git a/drivers/common/iavf/rte_common_iavf_version.map
b/drivers/common/iavf/rte_common_iavf_version.map
index 92ceac108d..9a1ef076aa 100644
--- a/drivers/common/iavf/rte_common_iavf_version.map
+++ b/drivers/common/iavf/rte_common_iavf_version.map
@@ -1,11 +1,11 @@
-DPDK_21 {
+DPDK_21.0 {
        global:


-- 
David Marchand


^ permalink raw reply	[relevance 9%]

* Re: [dpdk-dev] [PATCH v6] meter: provide experimental alias of API for old apps
  2020-05-19 13:26  0%     ` Dumitrescu, Cristian
@ 2020-05-19 14:24  0%       ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-19 14:24 UTC (permalink / raw)
  To: Yigit, Ferruh, Dumitrescu, Cristian
  Cc: Ray Kinsella, Neil Horman, Eelco Chaudron, dev, David Marchand,
	stable, Luca Boccassi, Richardson, Bruce, Stokes, Ian,
	Andrzej Ostruszka, techboard

19/05/2020 15:26, Dumitrescu, Cristian:
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> > 
> > On v20.02 some meter APIs have been matured and symbols moved from
> > EXPERIMENTAL to DPDK_20.0.1 block.
> > 
> > This can break the applications that were using these mentioned APIs on
> > v19.11. Although there is no modification on the APIs and the action is
> > positive and matures the APIs, the affect can be negative to
> > applications.
> > 
> > This patch provides aliasing by duplicating the existing and versioned
> > symbols as experimental.
> > 
> > Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> > aliasing done between EXPERIMENTAL and DPDK_21.
> > 
> > With DPDK_21 ABI (DPDK v20.11) all aliasing will be removed and only
> > stable version of the APIs will remain.
> > 
> > Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM
> > API")
> > Cc: stable@dpdk.org
> > 
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> 
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
> 
> Thanks, Ferruh and Ray!
> 
> I am OK to let this is temporarily until release 20.11.

Applied, thanks



> Regarding the API breakage larger problem,
> this method only fixes the case of experimental APIs transitioning
> to non-experimental status with no modifications,

Yes

> but it does not handle the following possible cases:
> 
> 	1. Experimental APIs transitioning to non-experimental status with some modifications.

If there is a modification, it should mature as experimental first.

> 	2. Experimental APIs being removed.

No guarantee that an experimental API remains forever.

> 	3. Non-experimental APIs transitioning to deprecated status.

I don't think we need to deprecate experimental API.
We can change or remove them freely at any time.

> We need a clear procedure & timing for all these cases
> to avoid similar situations in the future.
> Likely a good topic for techboard discussion.

We can ask if there are different opinions.
I think the experimental status is quite clear: no guarantee.



^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v6] meter: provide experimental alias of API for old apps
  2020-05-19 12:16 10%   ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
  2020-05-19 13:26  0%     ` Dumitrescu, Cristian
@ 2020-05-19 14:22  0%     ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 14:22 UTC (permalink / raw)
  To: Ferruh Yigit, Cristian Dumitrescu, Neil Horman, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Bruce Richardson, Ian Stokes, Andrzej Ostruszka



On 19/05/2020 13:16, Ferruh Yigit wrote:
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
> 
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
> 
> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
> 
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
> 
> With DPDK_21 ABI (DPDK v20.11) all aliasing will be removed and only
> stable version of the APIs will remain.
> 
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> Cc: cristian.dumitrescu@intel.com
> 
> v2:
> * Commit log updated
> 
> v3:
> * added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
> 
> v4:
> * update script name in commit log, remove empty line
> 
> v5:
> * Patch has only meter library changes
> * Aliasing moved into rte_meter_compat.c
> 
> v6:
> * Move aliasing back to rte_meter.c
> * Rename static function to have '__' prefix
> * Add comment to alias code
> ---
>  lib/librte_meter/meson.build           |  1 +
>  lib/librte_meter/rte_meter.c           | 73 ++++++++++++++++++++++++--
>  lib/librte_meter/rte_meter_version.map |  8 +++
>  3 files changed, 79 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
> index 646fd4d43f..fce0368437 100644
> --- a/lib/librte_meter/meson.build
> +++ b/lib/librte_meter/meson.build
> @@ -3,3 +3,4 @@
>  
>  sources = files('rte_meter.c')
>  headers = files('rte_meter.h')
> +use_function_versioning = true
> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
> index da01429a8b..149cf58bdd 100644
> --- a/lib/librte_meter/rte_meter.c
> +++ b/lib/librte_meter/rte_meter.c
> @@ -9,6 +9,7 @@
>  #include <rte_common.h>
>  #include <rte_log.h>
>  #include <rte_cycles.h>
> +#include <rte_function_versioning.h>
>  
>  #include "rte_meter.h"
>  
> @@ -119,8 +120,15 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
>  	return 0;
>  }
>  
> -int
> -rte_meter_trtcm_rfc4115_profile_config(
> +/*
> + *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_profile_config'
> + *  to support both EXPERIMENTAL and DPDK_21 versions
> + *  This versioning will be removed on next ABI version (v20.11)
> + *  and '__rte_meter_trtcm_rfc4115_profile_config' will be restrored back to
> + *  'rte_meter_trtcm_rfc4115_profile_config' without versioning.
> + */
> +static int
> +__rte_meter_trtcm_rfc4115_profile_config(
>  	struct rte_meter_trtcm_rfc4115_profile *p,
>  	struct rte_meter_trtcm_rfc4115_params *params)
>  {
> @@ -145,7 +153,42 @@ rte_meter_trtcm_rfc4115_profile_config(
>  }
>  
>  int
> -rte_meter_trtcm_rfc4115_config(
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
> +		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
> +
> +/*
> + *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_config'
> + *  to support both EXPERIMENTAL and DPDK_21 versions
> + *  This versioning will be removed on next ABI version (v20.11)
> + *  and '__rte_meter_trtcm_rfc4115_config' will be restrored back to
> + *  'rte_meter_trtcm_rfc4115_config' without versioning.
> + */
> +static int
> +__rte_meter_trtcm_rfc4115_config(
>  	struct rte_meter_trtcm_rfc4115 *m,
>  	struct rte_meter_trtcm_rfc4115_profile *p)
>  {
> @@ -160,3 +203,27 @@ rte_meter_trtcm_rfc4115_config(
>  
>  	return 0;
>  }
> +
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return __rte_meter_trtcm_rfc4115_config(m, p);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
> +		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return __rte_meter_trtcm_rfc4115_config(m, p);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
> diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
> index 2c7dadbcac..b493bcebe9 100644
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
>  	rte_meter_trtcm_rfc4115_color_blind_check;
>  	rte_meter_trtcm_rfc4115_config;
>  	rte_meter_trtcm_rfc4115_profile_config;
> +
>  } DPDK_20.0;
> +
> +EXPERIMENTAL {
> +       global:
> +
> +	rte_meter_trtcm_rfc4115_config;
> +	rte_meter_trtcm_rfc4115_profile_config;
> +};
> 
Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-18 17:18  4%         ` Thomas Monjalon
  2020-05-18 17:34  4%           ` Ferruh Yigit
@ 2020-05-19 14:14  4%           ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 14:14 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Ferruh Yigit, Luca Boccassi, David Marchand,
	Bruce Richardson, Ian Stokes, Eelco Chaudron, Andrzej Ostruszka,
	Kevin Traynor, John McNamara, Marko Kovacevic,
	Cristian Dumitrescu, Neil Horman



On 18/05/2020 18:18, Thomas Monjalon wrote:
> 16/05/2020 13:53, Neil Horman:
>> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>
>>> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
>>> DPDK_20.0.1 block.
>>>
>>> This had the affect of breaking the applications that were using these
>>> APIs on v19.11. Although there is no modification of the APIs and the
>>> action is positive and matures the APIs, the affect can be negative to
>>> applications.
>>>
>>> When a maintainer is promoting an API to become part of the next major
>>> ABI version by removing the experimental tag. The maintainer may
>>> choose to offer an alias to the experimental tag, to prevent these
>>> breakages in future.
>>>
>>> The following changes are made to enabling aliasing:
>>>
>>> Updated to the abi policy and abi versioning documents.
>>>
>>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>>
>>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
>>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
>>> .experimental section (__rte_experimental tag is missing).
>>> Updated tool in a way it won't complain if the symbol in the
>>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
>>>
>> Acked-by: Neil Horman <nhorman@tuxdriver.com>
> 
> Applied with few typos fixed, thanks.
> 
> 
> 

Thanks Thomas. 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-18 18:32  4%               ` Ferruh Yigit
@ 2020-05-19 14:13  4%                 ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 14:13 UTC (permalink / raw)
  To: Ferruh Yigit, Thomas Monjalon
  Cc: dev, Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu, Neil Horman



On 18/05/2020 19:32, Ferruh Yigit wrote:
> On 5/18/2020 6:51 PM, Thomas Monjalon wrote:
>> 18/05/2020 19:34, Ferruh Yigit:
>>> On 5/18/2020 6:18 PM, Thomas Monjalon wrote:
>>>> 16/05/2020 13:53, Neil Horman:
>>>>> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
>>>>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>>>>
>>>>>> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
>>>>>> DPDK_20.0.1 block.
>>>>>>
>>>>>> This had the affect of breaking the applications that were using these
>>>>>> APIs on v19.11. Although there is no modification of the APIs and the
>>>>>> action is positive and matures the APIs, the affect can be negative to
>>>>>> applications.
>>>>>>
>>>>>> When a maintainer is promoting an API to become part of the next major
>>>>>> ABI version by removing the experimental tag. The maintainer may
>>>>>> choose to offer an alias to the experimental tag, to prevent these
>>>>>> breakages in future.
>>>>>>
>>>>>> The following changes are made to enabling aliasing:
>>>>>>
>>>>>> Updated to the abi policy and abi versioning documents.
>>>>>>
>>>>>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>>>>>
>>>>>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
>>>>>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
>>>>>> .experimental section (__rte_experimental tag is missing).
>>>>>> Updated tool in a way it won't complain if the symbol in the
>>>>>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>>>>>
>>>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>>>>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
>>>>>>
>>>>> Acked-by: Neil Horman <nhorman@tuxdriver.com>
>>>>
>>>> Applied with few typos fixed, thanks.
>>>>
>>>
>>> Is a new version of the meter library required?
>>
>> I think yes, Cristian is asking for some changes.
>>
> 
> done: https://patches.dpdk.org/patch/70399/
> 

Thanks Ferruh.

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v6] meter: provide experimental alias of API for old apps
  2020-05-19 12:16 10%   ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
@ 2020-05-19 13:26  0%     ` Dumitrescu, Cristian
  2020-05-19 14:24  0%       ` Thomas Monjalon
  2020-05-19 14:22  0%     ` Ray Kinsella
  1 sibling, 1 reply; 200+ results
From: Dumitrescu, Cristian @ 2020-05-19 13:26 UTC (permalink / raw)
  To: Yigit, Ferruh, Ray Kinsella, Neil Horman, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka, techboard



> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Tuesday, May 19, 2020 1:16 PM
> To: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Ray Kinsella
> <mdr@ashroe.eu>; Neil Horman <nhorman@tuxdriver.com>; Eelco
> Chaudron <echaudro@redhat.com>
> Cc: dev@dpdk.org; Yigit, Ferruh <ferruh.yigit@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>; David Marchand <david.marchand@redhat.com>;
> stable@dpdk.org; Luca Boccassi <bluca@debian.org>; Richardson, Bruce
> <bruce.richardson@intel.com>; Stokes, Ian <ian.stokes@intel.com>; Andrzej
> Ostruszka <amo@semihalf.com>
> Subject: [PATCH v6] meter: provide experimental alias of API for old apps
> 
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
> 
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
> 
> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
> 
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
> 
> With DPDK_21 ABI (DPDK v20.11) all aliasing will be removed and only
> stable version of the APIs will remain.
> 
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM
> API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> Cc: cristian.dumitrescu@intel.com
> 
> v2:
> * Commit log updated
> 
> v3:
> * added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
> 
> v4:
> * update script name in commit log, remove empty line
> 
> v5:
> * Patch has only meter library changes
> * Aliasing moved into rte_meter_compat.c
> 
> v6:
> * Move aliasing back to rte_meter.c
> * Rename static function to have '__' prefix
> * Add comment to alias code
> ---
>  lib/librte_meter/meson.build           |  1 +
>  lib/librte_meter/rte_meter.c           | 73 ++++++++++++++++++++++++--
>  lib/librte_meter/rte_meter_version.map |  8 +++
>  3 files changed, 79 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
> index 646fd4d43f..fce0368437 100644
> --- a/lib/librte_meter/meson.build
> +++ b/lib/librte_meter/meson.build
> @@ -3,3 +3,4 @@
> 
>  sources = files('rte_meter.c')
>  headers = files('rte_meter.h')
> +use_function_versioning = true
> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
> index da01429a8b..149cf58bdd 100644
> --- a/lib/librte_meter/rte_meter.c
> +++ b/lib/librte_meter/rte_meter.c
> @@ -9,6 +9,7 @@
>  #include <rte_common.h>
>  #include <rte_log.h>
>  #include <rte_cycles.h>
> +#include <rte_function_versioning.h>
> 
>  #include "rte_meter.h"
> 
> @@ -119,8 +120,15 @@ rte_meter_trtcm_config(struct rte_meter_trtcm
> *m,
>  	return 0;
>  }
> 
> -int
> -rte_meter_trtcm_rfc4115_profile_config(
> +/*
> + *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_profile_config'
> + *  to support both EXPERIMENTAL and DPDK_21 versions
> + *  This versioning will be removed on next ABI version (v20.11)
> + *  and '__rte_meter_trtcm_rfc4115_profile_config' will be restrored back
> to
> + *  'rte_meter_trtcm_rfc4115_profile_config' without versioning.
> + */
> +static int
> +__rte_meter_trtcm_rfc4115_profile_config(
>  	struct rte_meter_trtcm_rfc4115_profile *p,
>  	struct rte_meter_trtcm_rfc4115_params *params)
>  {
> @@ -145,7 +153,42 @@ rte_meter_trtcm_rfc4115_profile_config(
>  }
> 
>  int
> -rte_meter_trtcm_rfc4115_config(
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct
> rte_meter_trtcm_rfc4115_profile *p,
> +		struct rte_meter_trtcm_rfc4115_params *params),
> rte_meter_trtcm_rfc4115_profile_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_conf
> ig, _e);
> +
> +/*
> + *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_config'
> + *  to support both EXPERIMENTAL and DPDK_21 versions
> + *  This versioning will be removed on next ABI version (v20.11)
> + *  and '__rte_meter_trtcm_rfc4115_config' will be restrored back to
> + *  'rte_meter_trtcm_rfc4115_config' without versioning.
> + */
> +static int
> +__rte_meter_trtcm_rfc4115_config(
>  	struct rte_meter_trtcm_rfc4115 *m,
>  	struct rte_meter_trtcm_rfc4115_profile *p)
>  {
> @@ -160,3 +203,27 @@ rte_meter_trtcm_rfc4115_config(
> 
>  	return 0;
>  }
> +
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return __rte_meter_trtcm_rfc4115_config(m, p);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct
> rte_meter_trtcm_rfc4115 *m,
> +		 struct rte_meter_trtcm_rfc4115_profile *p),
> rte_meter_trtcm_rfc4115_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return __rte_meter_trtcm_rfc4115_config(m, p);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
> diff --git a/lib/librte_meter/rte_meter_version.map
> b/lib/librte_meter/rte_meter_version.map
> index 2c7dadbcac..b493bcebe9 100644
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
>  	rte_meter_trtcm_rfc4115_color_blind_check;
>  	rte_meter_trtcm_rfc4115_config;
>  	rte_meter_trtcm_rfc4115_profile_config;
> +
>  } DPDK_20.0;
> +
> +EXPERIMENTAL {
> +       global:
> +
> +	rte_meter_trtcm_rfc4115_config;
> +	rte_meter_trtcm_rfc4115_profile_config;
> +};
> --
> 2.25.4

Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Thanks, Ferruh and Ray!

I am OK to let this is temporarily until release 20.11.

Regarding the API breakage larger problem,  this method only fixes the case of experimental APIs transitioning to non-experimental status with no modifications, but it does not handle the following possible cases:

	1. Experimental APIs transitioning to non-experimental status with some modifications.
	2. Experimental APIs being removed.
	3. Non-experimental APIs transitioning to deprecated status.

We need a clear procedure & timing for all these cases to avoid similar situations in the future. Likely a good topic for techboard discussion.

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v6] meter: provide experimental alias of API for old apps
                       ` (4 preceding siblings ...)
  2020-05-18 18:30  2%   ` [dpdk-dev] [PATCH v5] " Ferruh Yigit
@ 2020-05-19 12:16 10%   ` Ferruh Yigit
  2020-05-19 13:26  0%     ` Dumitrescu, Cristian
  2020-05-19 14:22  0%     ` Ray Kinsella
  5 siblings, 2 replies; 200+ results
From: Ferruh Yigit @ 2020-05-19 12:16 UTC (permalink / raw)
  To: Cristian Dumitrescu, Ray Kinsella, Neil Horman, Eelco Chaudron
  Cc: dev, Ferruh Yigit, Thomas Monjalon, David Marchand, stable,
	Luca Boccassi, Bruce Richardson, Ian Stokes, Andrzej Ostruszka

On v20.02 some meter APIs have been matured and symbols moved from
EXPERIMENTAL to DPDK_20.0.1 block.

This can break the applications that were using these mentioned APIs on
v19.11. Although there is no modification on the APIs and the action is
positive and matures the APIs, the affect can be negative to
applications.

This patch provides aliasing by duplicating the existing and versioned
symbols as experimental.

Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
aliasing done between EXPERIMENTAL and DPDK_21.

With DPDK_21 ABI (DPDK v20.11) all aliasing will be removed and only
stable version of the APIs will remain.

Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>
Cc: cristian.dumitrescu@intel.com

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro

v4:
* update script name in commit log, remove empty line

v5:
* Patch has only meter library changes
* Aliasing moved into rte_meter_compat.c

v6:
* Move aliasing back to rte_meter.c
* Rename static function to have '__' prefix
* Add comment to alias code
---
 lib/librte_meter/meson.build           |  1 +
 lib/librte_meter/rte_meter.c           | 73 ++++++++++++++++++++++++--
 lib/librte_meter/rte_meter_version.map |  8 +++
 3 files changed, 79 insertions(+), 3 deletions(-)

diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
index 646fd4d43f..fce0368437 100644
--- a/lib/librte_meter/meson.build
+++ b/lib/librte_meter/meson.build
@@ -3,3 +3,4 @@
 
 sources = files('rte_meter.c')
 headers = files('rte_meter.h')
+use_function_versioning = true
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index da01429a8b..149cf58bdd 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -9,6 +9,7 @@
 #include <rte_common.h>
 #include <rte_log.h>
 #include <rte_cycles.h>
+#include <rte_function_versioning.h>
 
 #include "rte_meter.h"
 
@@ -119,8 +120,15 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 	return 0;
 }
 
-int
-rte_meter_trtcm_rfc4115_profile_config(
+/*
+ *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_profile_config'
+ *  to support both EXPERIMENTAL and DPDK_21 versions
+ *  This versioning will be removed on next ABI version (v20.11)
+ *  and '__rte_meter_trtcm_rfc4115_profile_config' will be restrored back to
+ *  'rte_meter_trtcm_rfc4115_profile_config' without versioning.
+ */
+static int
+__rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
 {
@@ -145,7 +153,42 @@ rte_meter_trtcm_rfc4115_profile_config(
 }
 
 int
-rte_meter_trtcm_rfc4115_config(
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
+		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
+
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return __rte_meter_trtcm_rfc4115_profile_config(p, params);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
+
+/*
+ *  ABI aliasing done for 'rte_meter_trtcm_rfc4115_config'
+ *  to support both EXPERIMENTAL and DPDK_21 versions
+ *  This versioning will be removed on next ABI version (v20.11)
+ *  and '__rte_meter_trtcm_rfc4115_config' will be restrored back to
+ *  'rte_meter_trtcm_rfc4115_config' without versioning.
+ */
+static int
+__rte_meter_trtcm_rfc4115_config(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
 {
@@ -160,3 +203,27 @@ rte_meter_trtcm_rfc4115_config(
 
 	return 0;
 }
+
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return __rte_meter_trtcm_rfc4115_config(m, p);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
+		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
+
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return __rte_meter_trtcm_rfc4115_config(m, p);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
index 2c7dadbcac..b493bcebe9 100644
--- a/lib/librte_meter/rte_meter_version.map
+++ b/lib/librte_meter/rte_meter_version.map
@@ -20,4 +20,12 @@ DPDK_21 {
 	rte_meter_trtcm_rfc4115_color_blind_check;
 	rte_meter_trtcm_rfc4115_config;
 	rte_meter_trtcm_rfc4115_profile_config;
+
 } DPDK_20.0;
+
+EXPERIMENTAL {
+       global:
+
+	rte_meter_trtcm_rfc4115_config;
+	rte_meter_trtcm_rfc4115_profile_config;
+};
-- 
2.25.4


^ permalink raw reply	[relevance 10%]

* Re: [dpdk-dev] [PATCH v8 05/13] net/dpaa: move internal symbols into INTERNAL section
  2020-05-19 11:39  0%             ` Hemant Agrawal
@ 2020-05-19 11:41  0%               ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 11:41 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 19/05/2020 12:39, Hemant Agrawal wrote:
> Hi Ray,
> 
>> On 15/05/2020 10:47, Hemant Agrawal wrote:
>>> This patch moves the internal symbols to INTERNAL sections so that any
>>> change in them is not reported as ABI breakage.
>>>
>>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
>>> ---
>>>  devtools/libabigail.abignore              | 2 ++
>>>  drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
>>>  drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
>>>  3 files changed, 11 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/devtools/libabigail.abignore
>>> b/devtools/libabigail.abignore index 42f9469221..7b6358c394 100644
>>> --- a/devtools/libabigail.abignore
>>> +++ b/devtools/libabigail.abignore
>>> @@ -63,3 +63,5 @@
>>>  	name_regexp = ^rte_dpaa_bpid_info
>>>  [suppress_variable]
>>>  	name_regexp = ^rte_dpaa2_bpid_info
>>> +[suppress_function]
>>> +        name_regexp = ^dpaa
>>
>> This rule ends up being very general
>> Could we do something more specific like ...
>>
>> ^dpaa_\.attach
> 
> [Hemant]  I am not sure, how much time I have to check and test again before David closes RC3
> - while I am working on experimenting these.
> These are not serious issues. dpaa is always internal for the libraries. No symbol with starting with dpaa name is exposed to libraries.
> This change will anyway go away in 20.11. 
>

if dpaa is always general - I can live with a general rule.

> 
>>
>> it should catch
>>
>> dpaa_eth_eventq_attach;
>> dpaa_eth_eventq_detach;
>> dpaa2_eth_eventq_attach;
>> dpaa2_eth_eventq_detach;
>>
>> which is I think, what you are after.
>>
>>> diff --git a/drivers/net/dpaa/dpaa_ethdev.h
>>> b/drivers/net/dpaa/dpaa_ethdev.h index af9fc2105d..7393a9df05 100644
>>> --- a/drivers/net/dpaa/dpaa_ethdev.h
>>> +++ b/drivers/net/dpaa/dpaa_ethdev.h
>>> @@ -160,12 +160,14 @@ struct dpaa_if_stats {
>>>  	uint64_t tund;		/**<Tx Undersized */
>>>  };
>>>
>>> +__rte_internal
>>>  int
>>>  dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
>>>  		int eth_rx_queue_id,
>>>  		u16 ch_id,
>>>  		const struct rte_event_eth_rx_adapter_queue_conf
>> *queue_conf);
>>>
>>> +__rte_internal
>>>  int
>>>  dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
>>>  			   int eth_rx_queue_id);
>>> diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map
>>> b/drivers/net/dpaa/rte_pmd_dpaa_version.map
>>> index f403a1526d..774aa0de45 100644
>>> --- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
>>> +++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
>>> @@ -1,9 +1,14 @@
>>>  DPDK_20.0 {
>>>  	global:
>>>
>>> -	dpaa_eth_eventq_attach;
>>> -	dpaa_eth_eventq_detach;
>>>  	rte_pmd_dpaa_set_tx_loopback;
>>>
>>>  	local: *;
>>>  };
>>> +
>>> +INTERNAL {
>>> +	global:
>>> +
>>> +	dpaa_eth_eventq_attach;
>>> +	dpaa_eth_eventq_detach;
>>> +};
>>>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 05/13] net/dpaa: move internal symbols into INTERNAL section
  2020-05-19 11:14  0%           ` Ray Kinsella
@ 2020-05-19 11:39  0%             ` Hemant Agrawal
  2020-05-19 11:41  0%               ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-19 11:39 UTC (permalink / raw)
  To: Ray Kinsella, dev, david.marchand

Hi Ray,

> On 15/05/2020 10:47, Hemant Agrawal wrote:
> > This patch moves the internal symbols to INTERNAL sections so that any
> > change in them is not reported as ABI breakage.
> >
> > Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> > ---
> >  devtools/libabigail.abignore              | 2 ++
> >  drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
> >  drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
> >  3 files changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/devtools/libabigail.abignore
> > b/devtools/libabigail.abignore index 42f9469221..7b6358c394 100644
> > --- a/devtools/libabigail.abignore
> > +++ b/devtools/libabigail.abignore
> > @@ -63,3 +63,5 @@
> >  	name_regexp = ^rte_dpaa_bpid_info
> >  [suppress_variable]
> >  	name_regexp = ^rte_dpaa2_bpid_info
> > +[suppress_function]
> > +        name_regexp = ^dpaa
> 
> This rule ends up being very general
> Could we do something more specific like ...
> 
> ^dpaa_\.attach

[Hemant]  I am not sure, how much time I have to check and test again before David closes RC3
- while I am working on experimenting these.
These are not serious issues. dpaa is always internal for the libraries. No symbol with starting with dpaa name is exposed to libraries.
This change will anyway go away in 20.11. 


> 
> it should catch
> 
> dpaa_eth_eventq_attach;
> dpaa_eth_eventq_detach;
> dpaa2_eth_eventq_attach;
> dpaa2_eth_eventq_detach;
> 
> which is I think, what you are after.
> 
> > diff --git a/drivers/net/dpaa/dpaa_ethdev.h
> > b/drivers/net/dpaa/dpaa_ethdev.h index af9fc2105d..7393a9df05 100644
> > --- a/drivers/net/dpaa/dpaa_ethdev.h
> > +++ b/drivers/net/dpaa/dpaa_ethdev.h
> > @@ -160,12 +160,14 @@ struct dpaa_if_stats {
> >  	uint64_t tund;		/**<Tx Undersized */
> >  };
> >
> > +__rte_internal
> >  int
> >  dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
> >  		int eth_rx_queue_id,
> >  		u16 ch_id,
> >  		const struct rte_event_eth_rx_adapter_queue_conf
> *queue_conf);
> >
> > +__rte_internal
> >  int
> >  dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
> >  			   int eth_rx_queue_id);
> > diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map
> > b/drivers/net/dpaa/rte_pmd_dpaa_version.map
> > index f403a1526d..774aa0de45 100644
> > --- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
> > +++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
> > @@ -1,9 +1,14 @@
> >  DPDK_20.0 {
> >  	global:
> >
> > -	dpaa_eth_eventq_attach;
> > -	dpaa_eth_eventq_detach;
> >  	rte_pmd_dpaa_set_tx_loopback;
> >
> >  	local: *;
> >  };
> > +
> > +INTERNAL {
> > +	global:
> > +
> > +	dpaa_eth_eventq_attach;
> > +	dpaa_eth_eventq_detach;
> > +};
> >

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: move internal symbols into INTERNAL section
  2020-05-19 11:16  0%             ` Hemant Agrawal
@ 2020-05-19 11:30  0%               ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 11:30 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 19/05/2020 12:16, Hemant Agrawal wrote:
>  
>> On 15/05/2020 10:47, Hemant Agrawal wrote:
>>> This patch moves the internal symbols to INTERNAL sections so that any
>>> change in them is not reported as ABI breakage.
>>>
>>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
>>> ---
>>>  devtools/libabigail.abignore                        | 8 ++++++++
>>>  drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 6 ++++--
>>>  drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
>>>  drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
>>>  4 files changed, 20 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/devtools/libabigail.abignore
>>> b/devtools/libabigail.abignore index ab34302d0c..42f9469221 100644
>>> --- a/devtools/libabigail.abignore
>>> +++ b/devtools/libabigail.abignore
>>> @@ -55,3 +55,11 @@
>>>  	file_name_regexp = ^librte_bus_fslmc\.
>>>  [suppress_file]
>>>  	file_name_regexp = ^librte_bus_dpaa\.
>>> +[suppress_function]
>>> +	name = rte_dpaa2_mbuf_alloc_bulk
>>> +[suppress_variable]
>>> +	name_regexp = ^rte_dpaa_memsegs
>>> +[suppress_variable]
>>> +	name_regexp = ^rte_dpaa_bpid_info
>>> +[suppress_variable]
>>> +	name_regexp = ^rte_dpaa2_bpid_info
>>
>> Is there a specific reason you are using name_regexp here.
>> There is only a single variable involved in each case - would "name" not work
>> equally as well?
> 
> [Hemant]  I remember getting some errors in case of variables. But now name is also working ok.
> So, yes, name will also work in this case.
> If I need to do a next version of this series, I will improve it. Is that ok for you?

yes - that is perfect, I will give one more look over then. 

> 
> 
>>
>>> diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
>>> b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
>>> index 9eebaf7ffd..89d7cf4957 100644
>>> --- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
>>> +++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
>>> @@ -1,8 +1,10 @@
>>>  DPDK_20.0 {
>>> +	local: *;
>>> +};
>>> +
>>> +INTERNAL {
>>>  	global:
>>>
>>>  	rte_dpaa_bpid_info;
>>>  	rte_dpaa_memsegs;
>>> -
>>> -	local: *;
>>>  };
>>> diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
>>> b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
>>> index fa0f2280d5..53fa1552d1 100644
>>> --- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
>>> +++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
>>> @@ -61,6 +61,7 @@ struct dpaa2_bp_info {
>>>
>>>  extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
>>>
>>> +__rte_internal
>>>  int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
>>>  		       void **obj_table, unsigned int count);
>>>
>>> diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
>>> b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
>>> index cd4bc88273..686b024624 100644
>>> --- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
>>> +++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
>>> @@ -1,10 +1,15 @@
>>>  DPDK_20.0 {
>>>  	global:
>>>
>>> -	rte_dpaa2_bpid_info;
>>> -	rte_dpaa2_mbuf_alloc_bulk;
>>>  	rte_dpaa2_mbuf_from_buf_addr;
>>>  	rte_dpaa2_mbuf_pool_bpid;
>>>
>>>  	local: *;
>>>  };
>>> +
>>> +INTERNAL {
>>> +	global:
>>> +
>>> +	rte_dpaa2_bpid_info;
>>> +	rte_dpaa2_mbuf_alloc_bulk;
>>> +};
>>>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 07/13] crypto: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 07/13] crypto: " Hemant Agrawal
@ 2020-05-19 11:17  0%           ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 11:17 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
>  drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 6 ++++--
>  drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
>  drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 6 ++++--
>  4 files changed, 15 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
> index c779d5d837..675cbbb81d 100644
> --- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
> +++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
> @@ -6,12 +6,13 @@
>  #ifndef _DPAA2_SEC_EVENT_H_
>  #define _DPAA2_SEC_EVENT_H_
>  
> -int
> -dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
> +__rte_internal
> +int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
>  		int qp_id,
>  		struct dpaa2_dpcon_dev *dpcon,
>  		const struct rte_event *event);
>  
> +__rte_internal
>  int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
>  		int qp_id);
>  
> diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
> index 5952d645fd..3d863aff4d 100644
> --- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
> +++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
> @@ -1,8 +1,10 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {
>  	global:
>  
>  	dpaa2_sec_eventq_attach;
>  	dpaa2_sec_eventq_detach;
> -
> -	local: *;
>  };
> diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
> index 8d1a018096..0b09fa8f75 100644
> --- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
> +++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
> @@ -6,14 +6,14 @@
>  #ifndef _DPAA_SEC_EVENT_H_
>  #define _DPAA_SEC_EVENT_H_
>  
> -int
> -dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
> +__rte_internal
> +int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
>  		int qp_id,
>  		uint16_t ch_id,
>  		const struct rte_event *event);
>  
> -int
> -dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
> +__rte_internal
> +int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
>  		int qp_id);
>  
>  #endif /* _DPAA_SEC_EVENT_H_ */
> diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
> index 8580fa13db..023e120516 100644
> --- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
> +++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
> @@ -1,8 +1,10 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {
>  	global:
>  
>  	dpaa_sec_eventq_attach;
>  	dpaa_sec_eventq_detach;
> -
> -	local: *;
>  };
> 

As comments on [PATCH v8 05/13]

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: move internal symbols into INTERNAL section
  2020-05-19 11:03  0%           ` Ray Kinsella
@ 2020-05-19 11:16  0%             ` Hemant Agrawal
  2020-05-19 11:30  0%               ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-19 11:16 UTC (permalink / raw)
  To: Ray Kinsella, dev, david.marchand

 
> On 15/05/2020 10:47, Hemant Agrawal wrote:
> > This patch moves the internal symbols to INTERNAL sections so that any
> > change in them is not reported as ABI breakage.
> >
> > Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> > ---
> >  devtools/libabigail.abignore                        | 8 ++++++++
> >  drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 6 ++++--
> >  drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
> >  drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
> >  4 files changed, 20 insertions(+), 4 deletions(-)
> >
> > diff --git a/devtools/libabigail.abignore
> > b/devtools/libabigail.abignore index ab34302d0c..42f9469221 100644
> > --- a/devtools/libabigail.abignore
> > +++ b/devtools/libabigail.abignore
> > @@ -55,3 +55,11 @@
> >  	file_name_regexp = ^librte_bus_fslmc\.
> >  [suppress_file]
> >  	file_name_regexp = ^librte_bus_dpaa\.
> > +[suppress_function]
> > +	name = rte_dpaa2_mbuf_alloc_bulk
> > +[suppress_variable]
> > +	name_regexp = ^rte_dpaa_memsegs
> > +[suppress_variable]
> > +	name_regexp = ^rte_dpaa_bpid_info
> > +[suppress_variable]
> > +	name_regexp = ^rte_dpaa2_bpid_info
> 
> Is there a specific reason you are using name_regexp here.
> There is only a single variable involved in each case - would "name" not work
> equally as well?

[Hemant]  I remember getting some errors in case of variables. But now name is also working ok.
So, yes, name will also work in this case.
If I need to do a next version of this series, I will improve it. Is that ok for you?


> 
> > diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> > b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> > index 9eebaf7ffd..89d7cf4957 100644
> > --- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> > +++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> > @@ -1,8 +1,10 @@
> >  DPDK_20.0 {
> > +	local: *;
> > +};
> > +
> > +INTERNAL {
> >  	global:
> >
> >  	rte_dpaa_bpid_info;
> >  	rte_dpaa_memsegs;
> > -
> > -	local: *;
> >  };
> > diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> > b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> > index fa0f2280d5..53fa1552d1 100644
> > --- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> > +++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> > @@ -61,6 +61,7 @@ struct dpaa2_bp_info {
> >
> >  extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
> >
> > +__rte_internal
> >  int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
> >  		       void **obj_table, unsigned int count);
> >
> > diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> > b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> > index cd4bc88273..686b024624 100644
> > --- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> > +++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> > @@ -1,10 +1,15 @@
> >  DPDK_20.0 {
> >  	global:
> >
> > -	rte_dpaa2_bpid_info;
> > -	rte_dpaa2_mbuf_alloc_bulk;
> >  	rte_dpaa2_mbuf_from_buf_addr;
> >  	rte_dpaa2_mbuf_pool_bpid;
> >
> >  	local: *;
> >  };
> > +
> > +INTERNAL {
> > +	global:
> > +
> > +	rte_dpaa2_bpid_info;
> > +	rte_dpaa2_mbuf_alloc_bulk;
> > +};
> >

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 06/13] net/dpaa2: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 06/13] net/dpaa2: " Hemant Agrawal
@ 2020-05-19 11:15  0%           ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 11:15 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  drivers/net/dpaa2/dpaa2_ethdev.h            |  2 ++
>  drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 12 +++++++-----
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
> index 2c49a7f01f..c7fb6539ff 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.h
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.h
> @@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
>  
>  int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
>  
> +__rte_internal
>  int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
>  		int eth_rx_queue_id,
>  		struct dpaa2_dpcon_dev *dpcon,
>  		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
>  
> +__rte_internal
>  int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
>  		int eth_rx_queue_id);
>  
> diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
> index f2bb793319..b633fdc2a8 100644
> --- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
> +++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
> @@ -1,9 +1,4 @@
>  DPDK_20.0 {
> -	global:
> -
> -	dpaa2_eth_eventq_attach;
> -	dpaa2_eth_eventq_detach;
> -
>  	local: *;
>  };
>  
> @@ -14,3 +9,10 @@ EXPERIMENTAL {
>  	rte_pmd_dpaa2_set_custom_hash;
>  	rte_pmd_dpaa2_set_timestamp;
>  };
> +
> +INTERNAL {
> +	global:
> +
> +	dpaa2_eth_eventq_attach;
> +	dpaa2_eth_eventq_detach;
> +};
> 

As comments on [PATCH v8 05/13]

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 05/13] net/dpaa: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 05/13] net/dpaa: " Hemant Agrawal
@ 2020-05-19 11:14  0%           ` Ray Kinsella
  2020-05-19 11:39  0%             ` Hemant Agrawal
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-19 11:14 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore              | 2 ++
>  drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
>  drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
>  3 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index 42f9469221..7b6358c394 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -63,3 +63,5 @@
>  	name_regexp = ^rte_dpaa_bpid_info
>  [suppress_variable]
>  	name_regexp = ^rte_dpaa2_bpid_info
> +[suppress_function]
> +        name_regexp = ^dpaa

This rule ends up being very general 
Could we do something more specific like ... 

^dpaa_\.attach

it should catch

dpaa_eth_eventq_attach;
dpaa_eth_eventq_detach;
dpaa2_eth_eventq_attach;
dpaa2_eth_eventq_detach;

which is I think, what you are after.

> diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
> index af9fc2105d..7393a9df05 100644
> --- a/drivers/net/dpaa/dpaa_ethdev.h
> +++ b/drivers/net/dpaa/dpaa_ethdev.h
> @@ -160,12 +160,14 @@ struct dpaa_if_stats {
>  	uint64_t tund;		/**<Tx Undersized */
>  };
>  
> +__rte_internal
>  int
>  dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
>  		int eth_rx_queue_id,
>  		u16 ch_id,
>  		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
>  
> +__rte_internal
>  int
>  dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
>  			   int eth_rx_queue_id);
> diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
> index f403a1526d..774aa0de45 100644
> --- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
> +++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
> @@ -1,9 +1,14 @@
>  DPDK_20.0 {
>  	global:
>  
> -	dpaa_eth_eventq_attach;
> -	dpaa_eth_eventq_detach;
>  	rte_pmd_dpaa_set_tx_loopback;
>  
>  	local: *;
>  };
> +
> +INTERNAL {
> +	global:
> +
> +	dpaa_eth_eventq_attach;
> +	dpaa_eth_eventq_detach;
> +};
> 

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-19 11:03  0%           ` Ray Kinsella
  2020-05-19 11:16  0%             ` Hemant Agrawal
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-19 11:03 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore                        | 8 ++++++++
>  drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 6 ++++--
>  drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
>  drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
>  4 files changed, 20 insertions(+), 4 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index ab34302d0c..42f9469221 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -55,3 +55,11 @@
>  	file_name_regexp = ^librte_bus_fslmc\.
>  [suppress_file]
>  	file_name_regexp = ^librte_bus_dpaa\.
> +[suppress_function]
> +	name = rte_dpaa2_mbuf_alloc_bulk
> +[suppress_variable]
> +	name_regexp = ^rte_dpaa_memsegs
> +[suppress_variable]
> +	name_regexp = ^rte_dpaa_bpid_info
> +[suppress_variable]
> +	name_regexp = ^rte_dpaa2_bpid_info

Is there a specific reason you are using name_regexp here.
There is only a single variable involved in each case - would "name" not work equally as well?

> diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> index 9eebaf7ffd..89d7cf4957 100644
> --- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> +++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
> @@ -1,8 +1,10 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {
>  	global:
>  
>  	rte_dpaa_bpid_info;
>  	rte_dpaa_memsegs;
> -
> -	local: *;
>  };
> diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> index fa0f2280d5..53fa1552d1 100644
> --- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> +++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
> @@ -61,6 +61,7 @@ struct dpaa2_bp_info {
>  
>  extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
>  
> +__rte_internal
>  int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
>  		       void **obj_table, unsigned int count);
>  
> diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> index cd4bc88273..686b024624 100644
> --- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> +++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
> @@ -1,10 +1,15 @@
>  DPDK_20.0 {
>  	global:
>  
> -	rte_dpaa2_bpid_info;
> -	rte_dpaa2_mbuf_alloc_bulk;
>  	rte_dpaa2_mbuf_from_buf_addr;
>  	rte_dpaa2_mbuf_pool_bpid;
>  
>  	local: *;
>  };
> +
> +INTERNAL {
> +	global:
> +
> +	rte_dpaa2_bpid_info;
> +	rte_dpaa2_mbuf_alloc_bulk;
> +};
> 

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 03/13] bus/dpaa: move internal symbols into INTERNAL section
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-19 10:56  0%           ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 10:56 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> This patch also removes two symbols, which are not
> to be exported.
> rte_dpaa_mem_ptov  - static inline in the headerfile
> fman_ccsr_map_fd - local shared variable.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore              |  2 ++
>  drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
>  drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
>  drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
>  drivers/bus/dpaa/include/fsl_usd.h        |  8 +++++-
>  drivers/bus/dpaa/include/netcfg.h         |  2 ++
>  drivers/bus/dpaa/rte_bus_dpaa_version.map |  8 +++---
>  drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
>  8 files changed, 85 insertions(+), 5 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index 877c6d5be8..ab34302d0c 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -53,3 +53,5 @@
>  	file_name_regexp = ^librte_common_dpaax\.
>  [suppress_file]
>  	file_name_regexp = ^librte_bus_fslmc\.
> +[suppress_file]
> +	file_name_regexp = ^librte_bus_dpaa\.
> diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
> index f9cd972153..82da2fcfe0 100644
> --- a/drivers/bus/dpaa/include/fsl_bman.h
> +++ b/drivers/bus/dpaa/include/fsl_bman.h
> @@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
>   * the structure provided by the caller can be released or reused after the
>   * function returns.
>   */
> +__rte_internal
>  struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
>  
>  /**
>   * bman_free_pool - Deallocates a Buffer Pool object
>   * @pool: the pool object to release
>   */
> +__rte_internal
>  void bman_free_pool(struct bman_pool *pool);
>  
>  /**
> @@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
>   * The returned pointer refers to state within the pool object so must not be
>   * modified and can no longer be read once the pool object is destroyed.
>   */
> +__rte_internal
>  const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
>  
>  /**
> @@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
>   * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
>   *
>   */
> +__rte_internal
>  int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
>  		 u32 flags);
>  
> @@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
>   * The return value will be the number of buffers obtained from the pool, or a
>   * negative error code if a h/w error or pool starvation was encountered.
>   */
> +__rte_internal
>  int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
>  		 u32 flags);
>  
> @@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
>   *
>   * Return the number of the free buffers
>   */
> +__rte_internal
>  u32 bman_query_free_buffers(struct bman_pool *pool);
>  
>  /**
> diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
> index 5705ebfdce..6c87c8db0d 100644
> --- a/drivers/bus/dpaa/include/fsl_fman.h
> +++ b/drivers/bus/dpaa/include/fsl_fman.h
> @@ -7,6 +7,8 @@
>  #ifndef __FSL_FMAN_H
>  #define __FSL_FMAN_H
>  
> +#include <rte_compat.h>
> +
>  #ifdef __cplusplus
>  extern "C" {
>  #endif
> @@ -43,18 +45,23 @@ struct fm_status_t {
>  } __rte_packed;
>  
>  /* Set MAC address for a particular interface */
> +__rte_internal
>  int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
>  
>  /* Remove a MAC address for a particular interface */
> +__rte_internal
>  void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
>  
>  /* Get the FMAN statistics */
> +__rte_internal
>  void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
>  
>  /* Reset the FMAN statistics */
> +__rte_internal
>  void fman_if_stats_reset(struct fman_if *p);
>  
>  /* Get all of the FMAN statistics */
> +__rte_internal
>  void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
>  
>  /* Set ignore pause option for a specific interface */
> @@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
>  void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
>  
>  /* Enable/disable Rx promiscuous mode on specified interface */
> +__rte_internal
>  void fman_if_promiscuous_enable(struct fman_if *p);
> +__rte_internal
>  void fman_if_promiscuous_disable(struct fman_if *p);
>  
>  /* Enable/disable Rx on specific interfaces */
> +__rte_internal
>  void fman_if_enable_rx(struct fman_if *p);
> +__rte_internal
>  void fman_if_disable_rx(struct fman_if *p);
>  
>  /* Enable/disable loopback on specific interfaces */
> +__rte_internal
>  void fman_if_loopback_enable(struct fman_if *p);
> +__rte_internal
>  void fman_if_loopback_disable(struct fman_if *p);
>  
>  /* Set buffer pool on specific interface */
> +__rte_internal
>  void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
>  		    size_t bufsize);
>  
>  /* Get Flow Control threshold parameters on specific interface */
> +__rte_internal
>  int fman_if_get_fc_threshold(struct fman_if *fm_if);
>  
>  /* Enable and Set Flow Control threshold parameters on specific interface */
> +__rte_internal
>  int fman_if_set_fc_threshold(struct fman_if *fm_if,
>  			u32 high_water, u32 low_water, u32 bpid);
>  
>  /* Get Flow Control pause quanta on specific interface */
> +__rte_internal
>  int fman_if_get_fc_quanta(struct fman_if *fm_if);
>  
>  /* Set Flow Control pause quanta on specific interface */
> +__rte_internal
>  int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
>  
>  /* Set default error fqid on specific interface */
> @@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
>  int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
>  
>  /* Set IC transfer params */
> +__rte_internal
>  int fman_if_set_ic_params(struct fman_if *fm_if,
>  			  const struct fman_if_ic_params *icp);
>  
>  /* Get interface fd->offset value */
> +__rte_internal
>  int fman_if_get_fdoff(struct fman_if *fm_if);
>  
>  /* Set interface fd->offset value */
> +__rte_internal
>  void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
>  
>  /* Get interface SG enable status value */
> +__rte_internal
>  int fman_if_get_sg_enable(struct fman_if *fm_if);
>  
>  /* Set interface SG support mode */
> +__rte_internal
>  void fman_if_set_sg(struct fman_if *fm_if, int enable);
>  
>  /* Get interface Max Frame length (MTU) */
>  uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
>  
>  /* Set interface  Max Frame length (MTU) */
> +__rte_internal
>  void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
>  
>  /* Set interface next invoked action for dequeue operation */
>  void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
>  
>  /* discard error packets on rx */
> +__rte_internal
>  void fman_if_discard_rx_errors(struct fman_if *fm_if);
>  
> +__rte_internal
>  void fman_if_set_mcast_filter_table(struct fman_if *p);
>  
> +__rte_internal
>  void fman_if_reset_mcast_filter_table(struct fman_if *p);
>  
>  int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
> diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
> index 1b3342e7e6..4411bb0a79 100644
> --- a/drivers/bus/dpaa/include/fsl_qman.h
> +++ b/drivers/bus/dpaa/include/fsl_qman.h
> @@ -1314,6 +1314,7 @@ struct qman_cgr {
>  #define QMAN_CGR_MODE_FRAME          0x00000001
>  
>  #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
> +__rte_internal
>  void qman_set_fq_lookup_table(void **table);
>  #endif
>  
> @@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
>   */
>  int qman_get_portal_index(void);
>  
> +__rte_internal
>  u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
>  			void **bufs);
>  
> @@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
>   * processed via qman_poll_***() functions). Returns zero for success, or
>   * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
>   */
> +__rte_internal
>  int qman_irqsource_add(u32 bits);
>  
>  /**
> @@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
>   * takes portal (fq specific) as input rather than using the thread affined
>   * portal.
>   */
> +__rte_internal
>  int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
>  
>  /**
> @@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
>   * instead be processed via qman_poll_***() functions. Returns zero for success,
>   * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
>   */
> +__rte_internal
>  int qman_irqsource_remove(u32 bits);
>  
>  /**
> @@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
>   * takes portal (fq specific) as input rather than using the thread affined
>   * portal.
>   */
> +__rte_internal
>  int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
>  
>  /**
> @@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
>   */
>  u16 qman_affine_channel(int cpu);
>  
> +__rte_internal
>  unsigned int qman_portal_poll_rx(unsigned int poll_limit,
>  				 void **bufs, struct qman_portal *q);
>  
> @@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
>   *
>   * This function will issue a volatile dequeue command to the QMAN.
>   */
> +__rte_internal
>  int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
>  
>  /**
> @@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
>   * is issued. It will keep returning NULL until there is no packet available on
>   * the DQRR.
>   */
> +__rte_internal
>  struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
>  
>  /**
> @@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
>   * This will consume the DQRR enrey and make it available for next volatile
>   * dequeue.
>   */
> +__rte_internal
>  void qman_dqrr_consume(struct qman_fq *fq,
>  		       struct qm_dqrr_entry *dq);
>  
> @@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
>   * this function will return -EINVAL, otherwise the return value is >=0 and
>   * represents the number of DQRR entries processed.
>   */
> +__rte_internal
>  int qman_poll_dqrr(unsigned int limit);
>  
>  /**
> @@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
>   * (SDQCR). The requested pools are limited to those the portal has dequeue
>   * access to.
>   */
> +__rte_internal
>  void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
>  
>  /**
> @@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
>   * function must be called from the same CPU as that which processed the DQRR
>   * entry in the first place.
>   */
> +__rte_internal
>  void qman_dca_index(u8 index, int park_request);
>  
>  /**
> @@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
>   * a frame queue object based on that, rather than assuming/requiring that it be
>   * Out of Service.
>   */
> +__rte_internal
>  int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
>  
>  /**
> @@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
>   * qman_fq_fqid - Queries the frame queue ID of a FQ object
>   * @fq: the frame queue object to query
>   */
> +__rte_internal
>  u32 qman_fq_fqid(struct qman_fq *fq);
>  
>  /**
> @@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
>   * This captures the state, as seen by the driver, at the time the function
>   * executes.
>   */
> +__rte_internal
>  void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
>  
>  /**
> @@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
>   * context_a.address fields and will leave the stashing fields provided by the
>   * user alone, otherwise it will zero out the context_a.stashing fields.
>   */
> +__rte_internal
>  int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
>  
>  /**
> @@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
>   * caller should be prepared to accept the callback as the function is called,
>   * not only once it has returned.
>   */
> +__rte_internal
>  int qman_retire_fq(struct qman_fq *fq, u32 *flags);
>  
>  /**
> @@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
>   * The frame queue must be retired and empty, and if any order restoration list
>   * was released as ERNs at the time of retirement, they must all be consumed.
>   */
> +__rte_internal
>  int qman_oos_fq(struct qman_fq *fq);
>  
>  /**
> @@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
>   * @fq: the frame queue object to be queried
>   * @np: storage for the queried FQD fields
>   */
> +__rte_internal
>  int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
>  
>  /**
> @@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
>   * @fq: the frame queue object to be queried
>   * @frm_cnt: number of frames in the queue
>   */
> +__rte_internal
>  int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
>  
>  /**
> @@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
>   * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
>   * "flags" retrieved from qman_fq_state().
>   */
> +__rte_internal
>  int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
>  
>  /**
> @@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
>   * of an already busy hardware resource by throttling many of the to-be-dropped
>   * enqueues "at the source".
>   */
> +__rte_internal
>  int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
>  
> +__rte_internal
>  int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
>  		       int frames_to_send);
>  
> @@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
>   * This API is similar to qman_enqueue_multi(), but it takes fd which needs
>   * to be processed by different frame queues.
>   */
> +__rte_internal
>  int
>  qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
>  		      u32 *flags, int frames_to_send);
> @@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
>   * @fqid: the base FQID of the range to deallocate
>   * @count: the number of FQIDs in the range
>   */
> +__rte_internal
>  int qman_reserve_fqid_range(u32 fqid, unsigned int count);
>  static inline int qman_reserve_fqid(u32 fqid)
>  {
> @@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
>   * than requested (though alignment will be as requested). If @partial is zero,
>   * the return value will either be 'count' or negative.
>   */
> +__rte_internal
>  int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
>  static inline int qman_alloc_pool(u32 *result)
>  {
> @@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
>   * any unspecified parameters) will be used rather than a modify hw hardware
>   * (which only modifies the specified parameters).
>   */
> +__rte_internal
>  int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
>  		    struct qm_mcc_initcgr *opts);
>  
> @@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
>   * is executed. This must be excuted on the same affine portal on which it was
>   * created.
>   */
> +__rte_internal
>  int qman_delete_cgr(struct qman_cgr *cgr);
>  
>  /**
> @@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
>   * unspecified parameters) will be used rather than a modify hw hardware (which
>   * only modifies the specified parameters).
>   */
> +__rte_internal
>  int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
>  		    struct qm_mcc_initcgr *opts);
>  
> @@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
>   * than requested (though alignment will be as requested). If @partial is zero,
>   * the return value will either be 'count' or negative.
>   */
> +__rte_internal
>  int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
>  static inline int qman_alloc_cgrid(u32 *result)
>  {
> @@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
>   * @id: the base CGR ID of the range to deallocate
>   * @count: the number of CGR IDs in the range
>   */
> +__rte_internal
>  void qman_release_cgrid_range(u32 id, unsigned int count);
>  static inline void qman_release_cgrid(u32 id)
>  {
> diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
> index 263d9bb976..dcf35e4adb 100644
> --- a/drivers/bus/dpaa/include/fsl_usd.h
> +++ b/drivers/bus/dpaa/include/fsl_usd.h
> @@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
>  int bman_free_raw_portal(struct dpaa_raw_portal *portal);
>  
>  /* Obtain thread-local UIO file-descriptors */
> +__rte_internal
>  int qman_thread_fd(void);
>  int bman_thread_fd(void);
>  
> @@ -66,10 +67,14 @@ int bman_thread_fd(void);
>   * processing is complete. As such, it is essential to call this before going
>   * into another blocking read/select/poll.
>   */
> +__rte_internal
>  void qman_thread_irq(void);
> +
> +__rte_internal
>  void bman_thread_irq(void);
> +__rte_internal
>  void qman_fq_portal_thread_irq(struct qman_portal *qp);
> -
> +__rte_internal
>  void qman_clear_irq(void);
>  
>  /* Global setup */
> @@ -77,6 +82,7 @@ int qman_global_init(void);
>  int bman_global_init(void);
>  
>  /* Direct portal create and destroy */
> +__rte_internal
>  struct qman_portal *fsl_qman_fq_portal_create(int *fd);
>  int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
>  int fsl_qman_fq_portal_init(struct qman_portal *qp);
> diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
> index bf7bfae8cb..d7d1befd24 100644
> --- a/drivers/bus/dpaa/include/netcfg.h
> +++ b/drivers/bus/dpaa/include/netcfg.h
> @@ -46,11 +46,13 @@ struct netcfg_interface {
>   * cfg_file: FMC config XML file
>   * Returns the configuration information in newly allocated memory.
>   */
> +__rte_internal
>  struct netcfg_info *netcfg_acquire(void);
>  
>  /* cfg_ptr: configuration information pointer.
>   * Frees the resources allocated by the configuration layer.
>   */
> +__rte_internal
>  void netcfg_release(struct netcfg_info *cfg_ptr);
>  
>  #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
> diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
> index e6ca4361e0..53732289d3 100644
> --- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
> +++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
> @@ -1,4 +1,8 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {
>  	global:
>  
>  	bman_acquire;
> @@ -13,7 +17,6 @@ DPDK_20.0 {
>  	dpaa_logtype_pmd;
>  	dpaa_netcfg;
>  	dpaa_svr_family;
> -	fman_ccsr_map_fd;
>  	fman_dealloc_bufs_mask_hi;
>  	fman_dealloc_bufs_mask_lo;
>  	fman_if_add_mac_addr;
> @@ -87,10 +90,7 @@ DPDK_20.0 {
>  	qman_volatile_dequeue;
>  	rte_dpaa_driver_register;
>  	rte_dpaa_driver_unregister;
> -	rte_dpaa_mem_ptov;
>  	rte_dpaa_portal_fq_close;
>  	rte_dpaa_portal_fq_init;
>  	rte_dpaa_portal_init;
> -
> -	local: *;
>  };
> diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
> index 373aca9785..d4aee132ef 100644
> --- a/drivers/bus/dpaa/rte_dpaa_bus.h
> +++ b/drivers/bus/dpaa/rte_dpaa_bus.h
> @@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
>   *   A pointer to a rte_dpaa_driver structure describing the driver
>   *   to be registered.
>   */
> +__rte_internal
>  void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
>  
>  /**
> @@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
>   *	A pointer to a rte_dpaa_driver structure describing the driver
>   *	to be unregistered.
>   */
> +__rte_internal
>  void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
>  
>  /**
> @@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
>   * @return
>   *	0 in case of success, error otherwise
>   */
> +__rte_internal
>  int rte_dpaa_portal_init(void *arg);
>  
> +__rte_internal
>  int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
>  
> +__rte_internal
>  int rte_dpaa_portal_fq_close(struct qman_fq *fq);
>  
>  /**
> 
Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 02/13] bus/fslmc: move internal symbols into INTERNAL section
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-19 10:00  0%           ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19 10:00 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> This patch also removes two symbols, which were not used
> anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore                  |  2 +
>  drivers/bus/fslmc/fslmc_vfio.h                |  5 +++
>  drivers/bus/fslmc/mc/fsl_dpbp.h               |  7 ++++
>  drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
>  drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
>  drivers/bus/fslmc/mc/fsl_dpdmai.h             | 10 +++++
>  drivers/bus/fslmc/mc/fsl_dpio.h               | 11 +++++
>  drivers/bus/fslmc/mc/fsl_dpmng.h              |  4 ++
>  drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  2 +
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
>  drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
>  .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  8 ++++
>  .../fslmc/qbman/include/fsl_qbman_portal.h    | 42 +++++++++++++++++++
>  drivers/bus/fslmc/rte_bus_fslmc_version.map   | 20 ++++-----
>  drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
>  15 files changed, 123 insertions(+), 10 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index b1488d5549..877c6d5be8 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -51,3 +51,5 @@
>  ; Ignore moving DPAAx stable functions to INTERNAL tag
>  [suppress_file]
>  	file_name_regexp = ^librte_common_dpaax\.
> +[suppress_file]
> +	file_name_regexp = ^librte_bus_fslmc\.
> diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
> index c988121294..bc7c6f62d7 100644
> --- a/drivers/bus/fslmc/fslmc_vfio.h
> +++ b/drivers/bus/fslmc/fslmc_vfio.h
> @@ -8,6 +8,7 @@
>  #ifndef _FSLMC_VFIO_H_
>  #define _FSLMC_VFIO_H_
>  
> +#include <rte_compat.h>
>  #include <rte_vfio.h>
>  
>  /* Pathname of FSL-MC devices directory. */
> @@ -41,7 +42,11 @@ typedef struct fslmc_vfio_container {
>  } fslmc_vfio_container;
>  
>  extern char *fslmc_container;
> +
> +__rte_internal
>  int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
> +
> +__rte_internal
>  int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
>  
>  int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
> index 9d405b42c4..0d590a2647 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpbp.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
> @@ -7,6 +7,7 @@
>  #ifndef __FSL_DPBP_H
>  #define __FSL_DPBP_H
>  
> +#include <rte_compat.h>
>  /*
>   * Data Path Buffer Pool API
>   * Contains initialization APIs and runtime control APIs for DPBP
> @@ -14,6 +15,7 @@
>  
>  struct fsl_mc_io;
>  
> +__rte_internal
>  int dpbp_open(struct fsl_mc_io *mc_io,
>  	      uint32_t cmd_flags,
>  	      int dpbp_id,
> @@ -42,10 +44,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint32_t obj_id);
>  
> +__rte_internal
>  int dpbp_enable(struct fsl_mc_io *mc_io,
>  		uint32_t cmd_flags,
>  		uint16_t token);
>  
> +__rte_internal
>  int dpbp_disable(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint16_t token);
> @@ -55,6 +59,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
>  		    uint16_t token,
>  		    int *en);
>  
> +__rte_internal
>  int dpbp_reset(struct fsl_mc_io *mc_io,
>  	       uint32_t cmd_flags,
>  	       uint16_t token);
> @@ -70,6 +75,7 @@ struct dpbp_attr {
>  	uint16_t bpid;
>  };
>  
> +__rte_internal
>  int dpbp_get_attributes(struct fsl_mc_io *mc_io,
>  			uint32_t cmd_flags,
>  			uint16_t token,
> @@ -88,6 +94,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
>  			 uint16_t *major_ver,
>  			 uint16_t *minor_ver);
>  
> +__rte_internal
>  int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
>  			   uint32_t cmd_flags,
>  			   uint16_t token,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
> index a0ee5bfe69..81fd3438aa 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpci.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpci.h
> @@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
>  	int order_preservation_en;
>  };
>  
> +__rte_internal
>  int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
>  		      uint32_t cmd_flags,
>  		      uint16_t token,
> @@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
>  			 uint16_t *major_ver,
>  			 uint16_t *minor_ver);
>  
> +__rte_internal
>  int dpci_set_opr(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint16_t token,
> @@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
>  		 uint8_t options,
>  		 struct opr_cfg *cfg);
>  
> +__rte_internal
>  int dpci_get_opr(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint16_t token,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
> index af81d51195..7caa6c68a1 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpcon.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
> @@ -20,6 +20,7 @@ struct fsl_mc_io;
>   */
>  #define DPCON_INVALID_DPIO_ID		(int)(-1)
>  
> +__rte_internal
>  int dpcon_open(struct fsl_mc_io *mc_io,
>  	       uint32_t cmd_flags,
>  	       int dpcon_id,
> @@ -77,6 +78,7 @@ struct dpcon_attr {
>  	uint8_t num_priorities;
>  };
>  
> +__rte_internal
>  int dpcon_get_attributes(struct fsl_mc_io *mc_io,
>  			 uint32_t cmd_flags,
>  			 uint16_t token,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
> index 40469cc139..19328c00a0 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
> @@ -5,6 +5,8 @@
>  #ifndef __FSL_DPDMAI_H
>  #define __FSL_DPDMAI_H
>  
> +#include <rte_compat.h>
> +
>  struct fsl_mc_io;
>  
>  /* Data Path DMA Interface API
> @@ -23,11 +25,13 @@ struct fsl_mc_io;
>   */
>  #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
>  
> +__rte_internal
>  int dpdmai_open(struct fsl_mc_io *mc_io,
>  		uint32_t cmd_flags,
>  		int dpdmai_id,
>  		uint16_t *token);
>  
> +__rte_internal
>  int dpdmai_close(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint16_t token);
> @@ -54,10 +58,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
>  		   uint32_t cmd_flags,
>  		   uint32_t object_id);
>  
> +__rte_internal
>  int dpdmai_enable(struct fsl_mc_io *mc_io,
>  		  uint32_t cmd_flags,
>  		  uint16_t token);
>  
> +__rte_internal
>  int dpdmai_disable(struct fsl_mc_io *mc_io,
>  		   uint32_t cmd_flags,
>  		   uint16_t token);
> @@ -82,6 +88,7 @@ struct dpdmai_attr {
>  	uint8_t num_of_queues;
>  };
>  
> +__rte_internal
>  int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
>  			  uint32_t cmd_flags,
>  			  uint16_t token,
> @@ -148,6 +155,7 @@ struct dpdmai_rx_queue_cfg {
>  
>  };
>  
> +__rte_internal
>  int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
>  			uint32_t cmd_flags,
>  			uint16_t token,
> @@ -168,6 +176,7 @@ struct dpdmai_rx_queue_attr {
>  	uint32_t fqid;
>  };
>  
> +__rte_internal
>  int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
>  			uint32_t cmd_flags,
>  			uint16_t token,
> @@ -184,6 +193,7 @@ struct dpdmai_tx_queue_attr {
>  	uint32_t fqid;
>  };
>  
> +__rte_internal
>  int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
>  			uint32_t cmd_flags,
>  			uint16_t token,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
> index 3158f53191..c2db76bdf8 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpio.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpio.h
> @@ -7,17 +7,21 @@
>  #ifndef __FSL_DPIO_H
>  #define __FSL_DPIO_H
>  
> +#include <rte_compat.h>
> +
>  /* Data Path I/O Portal API
>   * Contains initialization APIs and runtime control APIs for DPIO
>   */
>  
>  struct fsl_mc_io;
>  
> +__rte_internal
>  int dpio_open(struct fsl_mc_io *mc_io,
>  	      uint32_t cmd_flags,
>  	      int dpio_id,
>  	      uint16_t *token);
>  
> +__rte_internal
>  int dpio_close(struct fsl_mc_io *mc_io,
>  	       uint32_t cmd_flags,
>  	       uint16_t token);
> @@ -57,10 +61,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint32_t object_id);
>  
> +__rte_internal
>  int dpio_enable(struct fsl_mc_io *mc_io,
>  		uint32_t cmd_flags,
>  		uint16_t token);
>  
> +__rte_internal
>  int dpio_disable(struct fsl_mc_io *mc_io,
>  		 uint32_t cmd_flags,
>  		 uint16_t token);
> @@ -70,10 +76,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
>  		    uint16_t token,
>  		    int *en);
>  
> +__rte_internal
>  int dpio_reset(struct fsl_mc_io *mc_io,
>  	       uint32_t cmd_flags,
>  	       uint16_t token);
>  
> +__rte_internal
>  int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
>  				  uint32_t cmd_flags,
>  				  uint16_t token,
> @@ -84,12 +92,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
>  				  uint16_t token,
>  				  uint8_t *sdest);
>  
> +__rte_internal
>  int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
>  				    uint32_t cmd_flags,
>  				    uint16_t token,
>  				    int dpcon_id,
>  				    uint8_t *channel_index);
>  
> +__rte_internal
>  int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
>  				       uint32_t cmd_flags,
>  				       uint16_t token,
> @@ -119,6 +129,7 @@ struct dpio_attr {
>  	uint32_t clk;
>  };
>  
> +__rte_internal
>  int dpio_get_attributes(struct fsl_mc_io *mc_io,
>  			uint32_t cmd_flags,
>  			uint16_t token,
> diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
> index 36c387af27..8764ceaed9 100644
> --- a/drivers/bus/fslmc/mc/fsl_dpmng.h
> +++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
> @@ -7,6 +7,8 @@
>  #ifndef __FSL_DPMNG_H
>  #define __FSL_DPMNG_H
>  
> +#include <rte_compat.h>
> +
>  /*
>   * Management Complex General API
>   * Contains general API for the Management Complex firmware
> @@ -34,6 +36,7 @@ struct mc_version {
>  	uint32_t revision;
>  };
>  
> +__rte_internal
>  int mc_get_version(struct fsl_mc_io *mc_io,
>  		   uint32_t cmd_flags,
>  		   struct mc_version *mc_ver_info);
> @@ -48,6 +51,7 @@ struct mc_soc_version {
>  	uint32_t pvr;
>  };
>  
> +__rte_internal
>  int mc_get_soc_version(struct fsl_mc_io *mc_io,
>  		       uint32_t cmd_flags,
>  		       struct mc_soc_version *mc_platform_info);
> diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
> index ac919610cf..7c0ca6b73a 100644
> --- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
> +++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
> @@ -7,6 +7,7 @@
>  #ifndef __FSL_MC_CMD_H
>  #define __FSL_MC_CMD_H
>  
> +#include <rte_compat.h>
>  #include <rte_byteorder.h>
>  #include <stdint.h>
>  
> @@ -80,6 +81,7 @@ enum mc_cmd_status {
>  
>  #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
>  
> +__rte_internal
>  int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
>  
>  static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
> diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
> index 2829c93806..7c5966241a 100644
> --- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
> +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
> @@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
>  extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
>  
>  /* Affine a DPIO portal to current processing thread */
> +__rte_internal
>  int dpaa2_affine_qbman_swp(void);
>  
>  /* Affine additional DPIO portal to current crypto processing thread */
> +__rte_internal
>  int dpaa2_affine_qbman_ethrx_swp(void);
>  
>  /* allocate memory for FQ - dq storage */
> +__rte_internal
>  int
>  dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
>  
>  /* free memory for FQ- dq storage */
> +__rte_internal
>  void
>  dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
>  
>  /* free the enqueue response descriptors */
> +__rte_internal
>  uint32_t
>  dpaa2_free_eq_descriptors(void);
>  
> diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> index 368fe7c688..33b191f823 100644
> --- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> +++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
> @@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
>  {
>  	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
>  }
> +__rte_internal
>  struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
> +
> +__rte_internal
>  void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
> +
> +__rte_internal
>  int dpaa2_dpbp_supported(void);
>  
> +__rte_internal
>  struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
> +
> +__rte_internal
>  void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
>  
>  #endif
> diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
> index e010b1b6ae..f0c2f9fcb3 100644
> --- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
> +++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
> @@ -1,6 +1,10 @@
>  /* SPDX-License-Identifier: BSD-3-Clause
>   * Copyright (C) 2015 Freescale Semiconductor, Inc.
>   */
> +#ifndef _FSL_QBMAN_DEBUG_H
> +#define _FSL_QBMAN_DEBUG_H
> +
> +#include <rte_compat.h>
>  
>  struct qbman_swp;
>  
> @@ -24,7 +28,11 @@ uint8_t verb;
>  	uint8_t reserved2[29];
>  };
>  
> +__rte_internal
>  int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
>  			 struct qbman_fq_query_np_rslt *r);
> +
> +__rte_internal
>  uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
>  uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
> +#endif
> diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
> index 88f0a99686..f820077d2b 100644
> --- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
> +++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
> @@ -7,6 +7,7 @@
>  #ifndef _FSL_QBMAN_PORTAL_H
>  #define _FSL_QBMAN_PORTAL_H
>  
> +#include <rte_compat.h>
>  #include <fsl_qbman_base.h>
>  
>  #define SVR_LS1080A	0x87030000
> @@ -117,6 +118,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
>   * @p: the given software portal object.
>   * @mask: The value to set in SWP_ISR register.
>   */
> +__rte_internal
>  void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
>  
>  /**
> @@ -286,6 +288,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
>   * rather by specifying the index (from 0 to 15) that has been mapped to the
>   * desired channel.
>   */
> +__rte_internal
>  void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
>  
>  /* ------------------- */
> @@ -325,6 +328,7 @@ enum qbman_pull_type_e {
>   * default/starting state.
>   * @d: the pull dequeue descriptor to be cleared.
>   */
> +__rte_internal
>  void qbman_pull_desc_clear(struct qbman_pull_desc *d);
>  
>  /**
> @@ -340,6 +344,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
>   * the caller provides in 'storage_phys'), and 'stash' controls whether or not
>   * those writes to main-memory express a cache-warming attribute.
>   */
> +__rte_internal
>  void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
>  				 struct qbman_result *storage,
>  				 uint64_t storage_phys,
> @@ -349,6 +354,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
>   * @d: the pull dequeue descriptor to be set.
>   * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
>   */
> +__rte_internal
>  void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
>  				   uint8_t numframes);
>  /**
> @@ -372,6 +378,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
>   * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
>   * @fqid: the frame queue index of the given FQ.
>   */
> +__rte_internal
>  void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
>  
>  /**
> @@ -407,6 +414,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
>   * Return 0 for success, and -EBUSY if the software portal is not ready
>   * to do pull dequeue.
>   */
> +__rte_internal
>  int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
>  
>  /* -------------------------------- */
> @@ -421,12 +429,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
>   * only once, so repeated calls can return a sequence of DQRR entries, without
>   * requiring they be consumed immediately or in any particular order.
>   */
> +__rte_internal
>  const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
>  
>  /**
>   * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
>   * @s: the software portal object.
>   */
> +__rte_internal
>  void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
>  
>  /**
> @@ -435,6 +445,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
>   * @s: the software portal object.
>   * @dq: the DQRR entry to be consumed.
>   */
> +__rte_internal
>  void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
>  
>  /**
> @@ -442,6 +453,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
>   * @s: the software portal object.
>   * @dqrr_index: the DQRR index entry to be consumed.
>   */
> +__rte_internal
>  void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
>  
>  /**
> @@ -450,6 +462,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
>   *
>   * Return dqrr index.
>   */
> +__rte_internal
>  uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
>  
>  /**
> @@ -460,6 +473,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
>   *
>   * Return dqrr entry object.
>   */
> +__rte_internal
>  struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
>  
>  /* ------------------------------------------------- */
> @@ -485,6 +499,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
>   * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
>   * dequeue result.
>   */
> +__rte_internal
>  int qbman_result_has_new_result(struct qbman_swp *s,
>  				struct qbman_result *dq);
>  
> @@ -497,8 +512,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
>   * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
>   * dequeue result.
>   */
> +__rte_internal
>  int qbman_check_command_complete(struct qbman_result *dq);
>  
> +__rte_internal
>  int qbman_check_new_result(struct qbman_result *dq);
>  
>  /* -------------------------------------------------------- */
> @@ -624,6 +641,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
>   *
>   * Return the state field.
>   */
> +__rte_internal
>  uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
>  
>  /**
> @@ -658,6 +676,7 @@ static inline int qbman_result_DQ_is_pull_complete(
>   *
>   * Return seqnum.
>   */
> +__rte_internal
>  uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
>  
>  /**
> @@ -667,6 +686,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
>   *
>   * Return odpid.
>   */
> +__rte_internal
>  uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
>  
>  /**
> @@ -699,6 +719,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
>   *
>   * Return the frame queue context.
>   */
> +__rte_internal
>  uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
>  
>  /**
> @@ -707,6 +728,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
>   *
>   * Return the frame descriptor.
>   */
> +__rte_internal
>  const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
>  
>  /* State-change notifications (FQDAN/CDAN/CSCN/...). */
> @@ -717,6 +739,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
>   *
>   * Return the state in the notifiation.
>   */
> +__rte_internal
>  uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
>  
>  /**
> @@ -850,6 +873,7 @@ struct qbman_eq_response {
>   * default/starting state.
>   * @d: the given enqueue descriptor.
>   */
> +__rte_internal
>  void qbman_eq_desc_clear(struct qbman_eq_desc *d);
>  
>  /* Exactly one of the following descriptor "actions" should be set. (Calling
> @@ -870,6 +894,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
>   * @response_success: 1 = enqueue with response always; 0 = enqueue with
>   * rejections returned on a FQ.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
>  /**
>   * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
> @@ -881,6 +906,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
>   * @incomplete: indiates whether this is the last fragments using the same
>   * sequeue number.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
>  			   uint16_t opr_id, uint16_t seqnum, int incomplete);
>  
> @@ -915,6 +941,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
>   * data structure.) 'stash' controls whether or not the write to main-memory
>   * expresses a cache-warming attribute.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
>  				uint64_t storage_phys,
>  				int stash);
> @@ -929,6 +956,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
>   * result "storage" before issuing an enqueue, and use any non-zero 'token'
>   * value.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
>  
>  /**
> @@ -944,6 +972,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
>   * @d: the enqueue descriptor
>   * @fqid: the id of the frame queue to be enqueued.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
>  
>  /**
> @@ -953,6 +982,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
>   * @qd_bin: the queuing destination bin
>   * @qd_prio: the queuing destination priority.
>   */
> +__rte_internal
>  void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
>  			  uint16_t qd_bin, uint8_t qd_prio);
>  
> @@ -978,6 +1008,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
>   * held-active (order-preserving) FQ, whether the FQ should be parked instead of
>   * being rescheduled.)
>   */
> +__rte_internal
>  void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
>  			   uint8_t dqrr_idx, int park);
>  
> @@ -987,6 +1018,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
>   *
>   * Return the fd pointer.
>   */
> +__rte_internal
>  struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
>  
>  /**
> @@ -997,6 +1029,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
>   * This value is set into the response id before the enqueue command, which,
>   * get overwritten by qbman once the enqueue command is complete.
>   */
> +__rte_internal
>  void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
>  
>  /**
> @@ -1009,6 +1042,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
>   * copied into the enqueue response to determine if the command has been
>   * completed, and response has been updated.
>   */
> +__rte_internal
>  uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
>  
>  /**
> @@ -1017,6 +1051,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
>   *
>   * Return 0 when command is sucessful.
>   */
> +__rte_internal
>  uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
>  
>  /**
> @@ -1043,6 +1078,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
>   *
>   * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
>   */
> +__rte_internal
>  int qbman_swp_enqueue_multiple(struct qbman_swp *s,
>  			       const struct qbman_eq_desc *d,
>  			       const struct qbman_fd *fd,
> @@ -1060,6 +1096,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
>   *
>   * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
>   */
> +__rte_internal
>  int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
>  				  const struct qbman_eq_desc *d,
>  				  struct qbman_fd **fd,
> @@ -1076,6 +1113,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
>   *
>   * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
>   */
> +__rte_internal
>  int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
>  				    const struct qbman_eq_desc *d,
>  				    const struct qbman_fd *fd,
> @@ -1117,12 +1155,14 @@ struct qbman_release_desc {
>   * default/starting state.
>   * @d: the qbman release descriptor.
>   */
> +__rte_internal
>  void qbman_release_desc_clear(struct qbman_release_desc *d);
>  
>  /**
>   * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
>   * @d: the qbman release descriptor.
>   */
> +__rte_internal
>  void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
>  
>  /**
> @@ -1141,6 +1181,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
>   *
>   * Return 0 for success, -EBUSY if the release command ring is not ready.
>   */
> +__rte_internal
>  int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
>  		      const uint64_t *buffers, unsigned int num_buffers);
>  
> @@ -1166,6 +1207,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
>   * Return 0 for success, or negative error code if the acquire command
>   * fails.
>   */
> +__rte_internal
>  int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
>  		      unsigned int num_buffers);
>  
> diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
> index fe45575046..1b7a5a45e9 100644
> --- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
> +++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
> @@ -1,4 +1,14 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +EXPERIMENTAL {
> +	global:
> +
> +	rte_fslmc_vfio_mem_dmamap;
> +};
> +
> +INTERNAL {
>  	global:
>  
>  	dpaa2_affine_qbman_ethrx_swp;
> @@ -11,7 +21,6 @@ DPDK_20.0 {
>  	dpaa2_free_dpbp_dev;
>  	dpaa2_free_dq_storage;
>  	dpaa2_free_eq_descriptors;
> -	dpaa2_get_qbman_swp;
>  	dpaa2_io_portal;
>  	dpaa2_svr_family;
>  	dpaa2_virt_mode;
> @@ -101,15 +110,6 @@ DPDK_20.0 {
>  	rte_fslmc_driver_unregister;
>  	rte_fslmc_get_device_count;
>  	rte_fslmc_object_register;
> -	rte_fslmc_vfio_dmamap;
>  	rte_global_active_dqs_list;
>  	rte_mcp_ptr_list;
> -
> -	local: *;
> -};
> -
> -EXPERIMENTAL {
> -	global:
> -
> -	rte_fslmc_vfio_mem_dmamap;
>  };
> diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
> index 96ba8dc259..5078b48ee1 100644
> --- a/drivers/bus/fslmc/rte_fslmc.h
> +++ b/drivers/bus/fslmc/rte_fslmc.h
> @@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
>   *   A pointer to a rte_dpaa2_driver structure describing the driver
>   *   to be registered.
>   */
> +__rte_internal
>  void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
>  
>  /**
> @@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
>   *   A pointer to a rte_dpaa2_driver structure describing the driver
>   *   to be unregistered.
>   */
> +__rte_internal
>  void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
>  
>  /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
> @@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
>   *   A pointer to a rte_dpaa_object structure describing the mc object
>   *   to be registered.
>   */
> +__rte_internal
>  void rte_fslmc_object_register(struct rte_dpaa2_object *object);
>  
>  /**
> @@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
>   *   >=0 for count; 0 indicates either no device of the said type scanned or
>   *   invalid device type.
>   */
> +__rte_internal
>  uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
>  
>  /** Helper for DPAA2 object registration */
> 

Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-19  6:43  0%           ` Hemant Agrawal
@ 2020-05-19  9:51  0%           ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19  9:51 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand



On 15/05/2020 10:47, Hemant Agrawal wrote:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore                      |  3 +++
>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>  drivers/common/dpaax/rte_common_dpaax_version.map |  6 ++++--
>  4 files changed, 26 insertions(+), 2 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index c9ee73cb3c..b1488d5549 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -48,3 +48,6 @@
>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
>  [suppress_variable]
>          name = rte_crypto_aead_algorithm_strings
> +; Ignore moving DPAAx stable functions to INTERNAL tag
> +[suppress_file]
> +	file_name_regexp = ^librte_common_dpaax\.
> diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
> index 960b421766..38d91a1afe 100644
> --- a/drivers/common/dpaax/dpaa_of.h
> +++ b/drivers/common/dpaax/dpaa_of.h
> @@ -24,6 +24,7 @@
>  #include <limits.h>
>  #include <rte_common.h>
>  #include <dpaa_list.h>
> +#include <rte_compat.h>
>  
>  #ifndef OF_INIT_DEFAULT_PATH
>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
> @@ -102,6 +103,7 @@ struct dt_file {
>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];
>  };
>  
> +__rte_internal
>  const struct device_node *of_find_compatible_node(
>  					const struct device_node *from,
>  					const char *type __rte_unused,
> @@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
>  		dev_node != NULL; \
>  		dev_node = of_find_compatible_node(dev_node, type, compatible))
>  
> +__rte_internal
>  const void *of_get_property(const struct device_node *from, const char *name,
>  			    size_t *lenp) __attribute__((nonnull(2)));
> +__rte_internal
>  bool of_device_is_available(const struct device_node *dev_node);
>  
> +
> +__rte_internal
>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
>  
> +__rte_internal
>  const struct device_node *of_get_parent(const struct device_node *dev_node);
>  
> +__rte_internal
>  const struct device_node *of_get_next_child(const struct device_node *dev_node,
>  					    const struct device_node *prev);
>  
> +__rte_internal
>  const void *of_get_mac_address(const struct device_node *np);
>  
>  #define for_each_child_node(parent, child) \
>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
>  			child = of_get_next_child(parent, child))
>  
> +
> +__rte_internal
>  uint32_t of_n_addr_cells(const struct device_node *dev_node);
>  uint32_t of_n_size_cells(const struct device_node *dev_node);
>  
> +__rte_internal
>  const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
>  			       uint64_t *size, uint32_t *flags);
>  
> +__rte_internal
>  uint64_t of_translate_address(const struct device_node *dev_node,
>  			      const uint32_t *addr) __attribute__((nonnull));
>  
> +__rte_internal
>  bool of_device_is_compatible(const struct device_node *dev_node,
>  			     const char *compatible);
>  
> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
>   * The path should usually be "/proc/device-tree".
>   */
> +__rte_internal
>  int of_init_path(const char *dt_path);
>  
>  /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
> diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
> index fc3b9e7a8f..230fba8ba0 100644
> --- a/drivers/common/dpaax/dpaax_iova_table.h
> +++ b/drivers/common/dpaax/dpaax_iova_table.h
> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
>  #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
>  
>  /* APIs exposed */
> +__rte_internal
>  int dpaax_iova_table_populate(void);
> +__rte_internal
>  void dpaax_iova_table_depopulate(void);
> +__rte_internal
>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
> +__rte_internal
>  void dpaax_iova_table_dump(void);
>  
>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
> diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
> index f72eba761d..14b507ad13 100644
> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
> @@ -1,4 +1,8 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {

you may need to rebase.
rte_common_dpaax_version.map already has an INTERNAL section. 

>  	global:
>  
>  	dpaax_iova_table_depopulate;
> @@ -18,6 +22,4 @@ DPDK_20.0 {
>  	of_init_path;
>  	of_n_addr_cells;
>  	of_translate_address;
> -
> -	local: *;
>  };
> 

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v1] doc: fix typos and errors in abi policy doc
  2020-05-14  6:40  4% ` Ray Kinsella
@ 2020-05-19  9:46  4%   ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-19  9:46 UTC (permalink / raw)
  To: Gaetan Rivet
  Cc: dev, Neil Horman, Mcnamara, John, Marko Kovacevic, Ray Kinsella

14/05/2020 08:40, Ray Kinsella:
> On 13/05/2020 11:43, Gaetan Rivet wrote:
> > Some errors in the document:
> > 
> >   * API instead of ABI once.
> > 
> > Some typos:
> > 
> >   * __rte_depreciated instead of __rte_deprecated.
> >   * missing ```` around value.
> >   * inconsistent reference to major ABI version, most
> >     of the time described without the minor appended, except once.
> > 
> > Verbosity and grammar:
> > 
> >   * Long sentences that would be better cut short.
> >   * Comma abuse.
> >   * 'May' used where 'can' seems more fitting.
> > 
> > I'm not a native speaker though, so grain of salt applies.
> > 
> > Fixes: fdf7471cccb8 ("doc: introduce major ABI versions")
> > Cc: Ray Kinsella <mdr@ashroe.eu>
> > cc: Neil Horman <nhorman@tuxdriver.com>
> > Signed-off-by: Gaetan Rivet <grive@u256.net>
> 
> Acked-by: Ray Kinsella <mdr@ashroe.eu>

Applied, thanks




^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH] doc: fix doc build failure
  2020-05-19  7:36  3% [dpdk-dev] [PATCH] doc: fix doc build failure Raslan Darawsheh
  2020-05-19  7:39  0% ` Ray Kinsella
@ 2020-05-19  8:03  0% ` David Marchand
  1 sibling, 0 replies; 200+ results
From: David Marchand @ 2020-05-19  8:03 UTC (permalink / raw)
  To: Raslan Darawsheh; +Cc: Yigit, Ferruh, dev, Ray Kinsella

On Tue, May 19, 2020 at 9:37 AM Raslan Darawsheh <rasland@mellanox.com> wrote:
>
> doc/guides/contributing/abi_versioning.rst:416:
>  ERROR: Error in "code-block" directive:
> 1 argument(s) required, 0 supplied.
>
> .. code-block::
>
>    use_function_versioning = true
>
> Fixes: 45a4103e680d ("doc: fix default symbol binding in ABI guide")

> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
Acked-by: David Marchand <david.marchand@redhat.com>

Applied, thanks.


-- 
David Marchand


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH] doc: fix doc build failure
  2020-05-19  7:36  3% [dpdk-dev] [PATCH] doc: fix doc build failure Raslan Darawsheh
@ 2020-05-19  7:39  0% ` Ray Kinsella
  2020-05-19  8:03  0% ` David Marchand
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19  7:39 UTC (permalink / raw)
  To: Raslan Darawsheh, ferruh.yigit; +Cc: dev

strange - I didn't get the error, but the changes makes perfect sense. 
Thanks, 

On 19/05/2020 08:36, Raslan Darawsheh wrote:
> doc/guides/contributing/abi_versioning.rst:416:
>  ERROR: Error in "code-block" directive:
> 1 argument(s) required, 0 supplied.
> 
> .. code-block::
> 
>    use_function_versioning = true
> 
> Fixes: 45a4103e680d ("doc: fix default symbol binding in ABI guide")
> Cc: mdr@ashroe.eu
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
> ---
>  doc/guides/contributing/abi_versioning.rst | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
> index ef881877f..f4a9273af 100644
> --- a/doc/guides/contributing/abi_versioning.rst
> +++ b/doc/guides/contributing/abi_versioning.rst
> @@ -413,7 +413,7 @@ Finally, we need to indicate to the :doc:`meson/ninja build system
>  library or driver. In the libraries or driver where we have added symbol
>  versioning, in the ``meson.build`` file we add the following
>  
> -.. code-block::
> +.. code-block:: none
>  
>     use_function_versioning = true
>  
> 

Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH] doc: fix doc build failure
@ 2020-05-19  7:36  3% Raslan Darawsheh
  2020-05-19  7:39  0% ` Ray Kinsella
  2020-05-19  8:03  0% ` David Marchand
  0 siblings, 2 replies; 200+ results
From: Raslan Darawsheh @ 2020-05-19  7:36 UTC (permalink / raw)
  To: ferruh.yigit; +Cc: dev, mdr

doc/guides/contributing/abi_versioning.rst:416:
 ERROR: Error in "code-block" directive:
1 argument(s) required, 0 supplied.

.. code-block::

   use_function_versioning = true

Fixes: 45a4103e680d ("doc: fix default symbol binding in ABI guide")
Cc: mdr@ashroe.eu
Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
---
 doc/guides/contributing/abi_versioning.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index ef881877f..f4a9273af 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -413,7 +413,7 @@ Finally, we need to indicate to the :doc:`meson/ninja build system
 library or driver. In the libraries or driver where we have added symbol
 versioning, in the ``meson.build`` file we add the following
 
-.. code-block::
+.. code-block:: none
 
    use_function_versioning = true
 
-- 
2.26.0


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section
  2020-05-19  6:43  0%           ` Hemant Agrawal
@ 2020-05-19  6:44  0%             ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-19  6:44 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand

Working on it at the moment Hemant.

Ray K

On 19/05/2020 07:43, Hemant Agrawal wrote:
> Hi Ray,
> 	Will you please review and ack this series?.
> 
> Regards,
> Hemant
> 
>> -----Original Message-----
>> From: Hemant Agrawal <hemant.agrawal@nxp.com>
>> Sent: Friday, May 15, 2020 3:18 PM
>> To: dev@dpdk.org; david.marchand@redhat.com; mdr@ashroe.eu
>> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>
>> Subject: [PATCH v8 01/13] common/dpaax: move internal symbols into
>> INTERNAL section
>> Importance: High
>>
>> This patch moves the internal symbols to INTERNAL sections so that any
>> change in them is not reported as ABI breakage.
>>
>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
>> ---
>>  devtools/libabigail.abignore                      |  3 +++
>>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>>  drivers/common/dpaax/rte_common_dpaax_version.map |  6 ++++--
>>  4 files changed, 26 insertions(+), 2 deletions(-)
>>
>> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index
>> c9ee73cb3c..b1488d5549 100644
>> --- a/devtools/libabigail.abignore
>> +++ b/devtools/libabigail.abignore
>> @@ -48,3 +48,6 @@
>>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
>> [suppress_variable]
>>          name = rte_crypto_aead_algorithm_strings
>> +; Ignore moving DPAAx stable functions to INTERNAL tag [suppress_file]
>> +	file_name_regexp = ^librte_common_dpaax\.
>> diff --git a/drivers/common/dpaax/dpaa_of.h
>> b/drivers/common/dpaax/dpaa_of.h index 960b421766..38d91a1afe 100644
>> --- a/drivers/common/dpaax/dpaa_of.h
>> +++ b/drivers/common/dpaax/dpaa_of.h
>> @@ -24,6 +24,7 @@
>>  #include <limits.h>
>>  #include <rte_common.h>
>>  #include <dpaa_list.h>
>> +#include <rte_compat.h>
>>
>>  #ifndef OF_INIT_DEFAULT_PATH
>>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
>> @@ -102,6 +103,7 @@ struct dt_file {
>>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];
>>  };
>>
>> +__rte_internal
>>  const struct device_node *of_find_compatible_node(
>>  					const struct device_node *from,
>>  					const char *type __rte_unused,
>> @@ -113,32 +115,44 @@ const struct device_node
>> *of_find_compatible_node(
>>  		dev_node != NULL; \
>>  		dev_node = of_find_compatible_node(dev_node, type,
>> compatible))
>>
>> +__rte_internal
>>  const void *of_get_property(const struct device_node *from, const char
>> *name,
>>  			    size_t *lenp) __attribute__((nonnull(2)));
>> +__rte_internal
>>  bool of_device_is_available(const struct device_node *dev_node);
>>
>> +
>> +__rte_internal
>>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
>>
>> +__rte_internal
>>  const struct device_node *of_get_parent(const struct device_node
>> *dev_node);
>>
>> +__rte_internal
>>  const struct device_node *of_get_next_child(const struct device_node
>> *dev_node,
>>  					    const struct device_node *prev);
>>
>> +__rte_internal
>>  const void *of_get_mac_address(const struct device_node *np);
>>
>>  #define for_each_child_node(parent, child) \
>>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
>>  			child = of_get_next_child(parent, child))
>>
>> +
>> +__rte_internal
>>  uint32_t of_n_addr_cells(const struct device_node *dev_node);  uint32_t
>> of_n_size_cells(const struct device_node *dev_node);
>>
>> +__rte_internal
>>  const uint32_t *of_get_address(const struct device_node *dev_node, size_t
>> idx,
>>  			       uint64_t *size, uint32_t *flags);
>>
>> +__rte_internal
>>  uint64_t of_translate_address(const struct device_node *dev_node,
>>  			      const uint32_t *addr) __attribute__((nonnull));
>>
>> +__rte_internal
>>  bool of_device_is_compatible(const struct device_node *dev_node,
>>  			     const char *compatible);
>>
>> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct
>> device_node *dev_node,
>>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers,
>> etc.
>>   * The path should usually be "/proc/device-tree".
>>   */
>> +__rte_internal
>>  int of_init_path(const char *dt_path);
>>
>>  /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
>> diff --git a/drivers/common/dpaax/dpaax_iova_table.h
>> b/drivers/common/dpaax/dpaax_iova_table.h
>> index fc3b9e7a8f..230fba8ba0 100644
>> --- a/drivers/common/dpaax/dpaax_iova_table.h
>> +++ b/drivers/common/dpaax/dpaax_iova_table.h
>> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
>> #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
>>
>>  /* APIs exposed */
>> +__rte_internal
>>  int dpaax_iova_table_populate(void);
>> +__rte_internal
>>  void dpaax_iova_table_depopulate(void);
>> +__rte_internal
>>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
>> +__rte_internal
>>  void dpaax_iova_table_dump(void);
>>
>>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
>> diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map
>> b/drivers/common/dpaax/rte_common_dpaax_version.map
>> index f72eba761d..14b507ad13 100644
>> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
>> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
>> @@ -1,4 +1,8 @@
>>  DPDK_20.0 {
>> +	local: *;
>> +};
>> +
>> +INTERNAL {
>>  	global:
>>
>>  	dpaax_iova_table_depopulate;
>> @@ -18,6 +22,4 @@ DPDK_20.0 {
>>  	of_init_path;
>>  	of_n_addr_cells;
>>  	of_translate_address;
>> -
>> -	local: *;
>>  };
>> --
>> 2.17.1
> 

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-19  6:43  0%           ` Hemant Agrawal
  2020-05-19  6:44  0%             ` Ray Kinsella
  2020-05-19  9:51  0%           ` Ray Kinsella
  1 sibling, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-19  6:43 UTC (permalink / raw)
  To: Hemant Agrawal, dev, david.marchand, mdr

Hi Ray,
	Will you please review and ack this series?.

Regards,
Hemant

> -----Original Message-----
> From: Hemant Agrawal <hemant.agrawal@nxp.com>
> Sent: Friday, May 15, 2020 3:18 PM
> To: dev@dpdk.org; david.marchand@redhat.com; mdr@ashroe.eu
> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>
> Subject: [PATCH v8 01/13] common/dpaax: move internal symbols into
> INTERNAL section
> Importance: High
> 
> This patch moves the internal symbols to INTERNAL sections so that any
> change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore                      |  3 +++
>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>  drivers/common/dpaax/rte_common_dpaax_version.map |  6 ++++--
>  4 files changed, 26 insertions(+), 2 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index
> c9ee73cb3c..b1488d5549 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -48,3 +48,6 @@
>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
> [suppress_variable]
>          name = rte_crypto_aead_algorithm_strings
> +; Ignore moving DPAAx stable functions to INTERNAL tag [suppress_file]
> +	file_name_regexp = ^librte_common_dpaax\.
> diff --git a/drivers/common/dpaax/dpaa_of.h
> b/drivers/common/dpaax/dpaa_of.h index 960b421766..38d91a1afe 100644
> --- a/drivers/common/dpaax/dpaa_of.h
> +++ b/drivers/common/dpaax/dpaa_of.h
> @@ -24,6 +24,7 @@
>  #include <limits.h>
>  #include <rte_common.h>
>  #include <dpaa_list.h>
> +#include <rte_compat.h>
> 
>  #ifndef OF_INIT_DEFAULT_PATH
>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
> @@ -102,6 +103,7 @@ struct dt_file {
>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];
>  };
> 
> +__rte_internal
>  const struct device_node *of_find_compatible_node(
>  					const struct device_node *from,
>  					const char *type __rte_unused,
> @@ -113,32 +115,44 @@ const struct device_node
> *of_find_compatible_node(
>  		dev_node != NULL; \
>  		dev_node = of_find_compatible_node(dev_node, type,
> compatible))
> 
> +__rte_internal
>  const void *of_get_property(const struct device_node *from, const char
> *name,
>  			    size_t *lenp) __attribute__((nonnull(2)));
> +__rte_internal
>  bool of_device_is_available(const struct device_node *dev_node);
> 
> +
> +__rte_internal
>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
> 
> +__rte_internal
>  const struct device_node *of_get_parent(const struct device_node
> *dev_node);
> 
> +__rte_internal
>  const struct device_node *of_get_next_child(const struct device_node
> *dev_node,
>  					    const struct device_node *prev);
> 
> +__rte_internal
>  const void *of_get_mac_address(const struct device_node *np);
> 
>  #define for_each_child_node(parent, child) \
>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
>  			child = of_get_next_child(parent, child))
> 
> +
> +__rte_internal
>  uint32_t of_n_addr_cells(const struct device_node *dev_node);  uint32_t
> of_n_size_cells(const struct device_node *dev_node);
> 
> +__rte_internal
>  const uint32_t *of_get_address(const struct device_node *dev_node, size_t
> idx,
>  			       uint64_t *size, uint32_t *flags);
> 
> +__rte_internal
>  uint64_t of_translate_address(const struct device_node *dev_node,
>  			      const uint32_t *addr) __attribute__((nonnull));
> 
> +__rte_internal
>  bool of_device_is_compatible(const struct device_node *dev_node,
>  			     const char *compatible);
> 
> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct
> device_node *dev_node,
>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers,
> etc.
>   * The path should usually be "/proc/device-tree".
>   */
> +__rte_internal
>  int of_init_path(const char *dt_path);
> 
>  /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
> diff --git a/drivers/common/dpaax/dpaax_iova_table.h
> b/drivers/common/dpaax/dpaax_iova_table.h
> index fc3b9e7a8f..230fba8ba0 100644
> --- a/drivers/common/dpaax/dpaax_iova_table.h
> +++ b/drivers/common/dpaax/dpaax_iova_table.h
> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
> #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
> 
>  /* APIs exposed */
> +__rte_internal
>  int dpaax_iova_table_populate(void);
> +__rte_internal
>  void dpaax_iova_table_depopulate(void);
> +__rte_internal
>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
> +__rte_internal
>  void dpaax_iova_table_dump(void);
> 
>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
> diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map
> b/drivers/common/dpaax/rte_common_dpaax_version.map
> index f72eba761d..14b507ad13 100644
> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
> @@ -1,4 +1,8 @@
>  DPDK_20.0 {
> +	local: *;
> +};
> +
> +INTERNAL {
>  	global:
> 
>  	dpaax_iova_table_depopulate;
> @@ -18,6 +22,4 @@ DPDK_20.0 {
>  	of_init_path;
>  	of_n_addr_cells;
>  	of_translate_address;
> -
> -	local: *;
>  };
> --
> 2.17.1


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-18 17:51  4%             ` Thomas Monjalon
@ 2020-05-18 18:32  4%               ` Ferruh Yigit
  2020-05-19 14:13  4%                 ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2020-05-18 18:32 UTC (permalink / raw)
  To: Thomas Monjalon, Ray Kinsella
  Cc: dev, Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu, Neil Horman

On 5/18/2020 6:51 PM, Thomas Monjalon wrote:
> 18/05/2020 19:34, Ferruh Yigit:
>> On 5/18/2020 6:18 PM, Thomas Monjalon wrote:
>>> 16/05/2020 13:53, Neil Horman:
>>>> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
>>>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>>>
>>>>> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
>>>>> DPDK_20.0.1 block.
>>>>>
>>>>> This had the affect of breaking the applications that were using these
>>>>> APIs on v19.11. Although there is no modification of the APIs and the
>>>>> action is positive and matures the APIs, the affect can be negative to
>>>>> applications.
>>>>>
>>>>> When a maintainer is promoting an API to become part of the next major
>>>>> ABI version by removing the experimental tag. The maintainer may
>>>>> choose to offer an alias to the experimental tag, to prevent these
>>>>> breakages in future.
>>>>>
>>>>> The following changes are made to enabling aliasing:
>>>>>
>>>>> Updated to the abi policy and abi versioning documents.
>>>>>
>>>>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>>>>
>>>>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
>>>>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
>>>>> .experimental section (__rte_experimental tag is missing).
>>>>> Updated tool in a way it won't complain if the symbol in the
>>>>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>>>>
>>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>>>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
>>>>>
>>>> Acked-by: Neil Horman <nhorman@tuxdriver.com>
>>>
>>> Applied with few typos fixed, thanks.
>>>
>>
>> Is a new version of the meter library required?
> 
> I think yes, Cristian is asking for some changes.
> 

done: https://patches.dpdk.org/patch/70399/


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH v5] meter: provide experimental alias of API for old apps
                       ` (3 preceding siblings ...)
  2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
@ 2020-05-18 18:30  2%   ` Ferruh Yigit
  2020-05-19 12:16 10%   ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
  5 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-18 18:30 UTC (permalink / raw)
  To: Cristian Dumitrescu, Ray Kinsella, Neil Horman, Eelco Chaudron
  Cc: dev, Ferruh Yigit, Thomas Monjalon, David Marchand, stable,
	Luca Boccassi, Bruce Richardson, Ian Stokes, Andrzej Ostruszka

On v20.02 some meter APIs have been matured and symbols moved from
EXPERIMENTAL to DPDK_20.0.1 block.

This can break the applications that were using these mentioned APIs on
v19.11. Although there is no modification on the APIs and the action is
positive and matures the APIs, the affect can be negative to
applications.

This patch provides aliasing by duplicating the existing and versioned
symbols as experimental.

Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
aliasing done between EXPERIMENTAL and DPDK_21.

With DPDK_21 ABI (DPDK v20.11) all aliasing will be removed and only
stable version of the APIs will remain.

Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>
Cc: cristian.dumitrescu@intel.com

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro

v4:
* update script name in commit log, remove empty line

v5:
* Patch has only meter library changes
* Aliasing moved into rte_meter_compat.c
---
 lib/librte_meter/Makefile              |  2 +-
 lib/librte_meter/meson.build           |  3 +-
 lib/librte_meter/rte_meter.c           |  5 +--
 lib/librte_meter/rte_meter_compat.c    | 47 ++++++++++++++++++++++++++
 lib/librte_meter/rte_meter_compat.h    | 26 ++++++++++++++
 lib/librte_meter/rte_meter_version.map |  7 ++++
 6 files changed, 86 insertions(+), 4 deletions(-)
 create mode 100644 lib/librte_meter/rte_meter_compat.c
 create mode 100644 lib/librte_meter/rte_meter_compat.h

diff --git a/lib/librte_meter/Makefile b/lib/librte_meter/Makefile
index 48366e82b0..e2f59fee7c 100644
--- a/lib/librte_meter/Makefile
+++ b/lib/librte_meter/Makefile
@@ -19,7 +19,7 @@ EXPORT_MAP := rte_meter_version.map
 #
 # all source are stored in SRCS-y
 #
-SRCS-$(CONFIG_RTE_LIBRTE_METER) := rte_meter.c
+SRCS-$(CONFIG_RTE_LIBRTE_METER) := rte_meter.c rte_meter_compat.c
 
 # install includes
 SYMLINK-$(CONFIG_RTE_LIBRTE_METER)-include := rte_meter.h
diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
index 646fd4d43f..fdc97dc4c9 100644
--- a/lib/librte_meter/meson.build
+++ b/lib/librte_meter/meson.build
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation
 
-sources = files('rte_meter.c')
+sources = files('rte_meter.c', 'rte_meter_compat.c')
 headers = files('rte_meter.h')
+use_function_versioning = true
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index da01429a8b..b5378f615e 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -11,6 +11,7 @@
 #include <rte_cycles.h>
 
 #include "rte_meter.h"
+#include "rte_meter_compat.h"
 
 #ifndef RTE_METER_TB_PERIOD_MIN
 #define RTE_METER_TB_PERIOD_MIN      100
@@ -120,7 +121,7 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 }
 
 int
-rte_meter_trtcm_rfc4115_profile_config(
+rte_meter_trtcm_rfc4115_profile_config_(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
 {
@@ -145,7 +146,7 @@ rte_meter_trtcm_rfc4115_profile_config(
 }
 
 int
-rte_meter_trtcm_rfc4115_config(
+rte_meter_trtcm_rfc4115_config_(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
 {
diff --git a/lib/librte_meter/rte_meter_compat.c b/lib/librte_meter/rte_meter_compat.c
new file mode 100644
index 0000000000..ab04b9c244
--- /dev/null
+++ b/lib/librte_meter/rte_meter_compat.c
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2020 Intel Corporation
+ */
+
+#include <rte_function_versioning.h>
+
+#include "rte_meter.h"
+#include "rte_meter_compat.h"
+
+int
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
+		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
+
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
+
+
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
+		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
+
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
diff --git a/lib/librte_meter/rte_meter_compat.h b/lib/librte_meter/rte_meter_compat.h
new file mode 100644
index 0000000000..63c282b015
--- /dev/null
+++ b/lib/librte_meter/rte_meter_compat.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2020 Intel Corporation
+ */
+
+int
+rte_meter_trtcm_rfc4115_profile_config_(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_(
+	struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
index 2c7dadbcac..3fef20366a 100644
--- a/lib/librte_meter/rte_meter_version.map
+++ b/lib/librte_meter/rte_meter_version.map
@@ -21,3 +21,10 @@ DPDK_21 {
 	rte_meter_trtcm_rfc4115_config;
 	rte_meter_trtcm_rfc4115_profile_config;
 } DPDK_20.0;
+
+EXPERIMENTAL {
+       global:
+
+	rte_meter_trtcm_rfc4115_config;
+	rte_meter_trtcm_rfc4115_profile_config;
+};
-- 
2.25.4


^ permalink raw reply	[relevance 2%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-18 17:34  4%           ` Ferruh Yigit
@ 2020-05-18 17:51  4%             ` Thomas Monjalon
  2020-05-18 18:32  4%               ` Ferruh Yigit
  0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-18 17:51 UTC (permalink / raw)
  To: Ray Kinsella, Ferruh Yigit
  Cc: dev, Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu, Neil Horman

18/05/2020 19:34, Ferruh Yigit:
> On 5/18/2020 6:18 PM, Thomas Monjalon wrote:
> > 16/05/2020 13:53, Neil Horman:
> >> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
> >>> From: Ferruh Yigit <ferruh.yigit@intel.com>
> >>>
> >>> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
> >>> DPDK_20.0.1 block.
> >>>
> >>> This had the affect of breaking the applications that were using these
> >>> APIs on v19.11. Although there is no modification of the APIs and the
> >>> action is positive and matures the APIs, the affect can be negative to
> >>> applications.
> >>>
> >>> When a maintainer is promoting an API to become part of the next major
> >>> ABI version by removing the experimental tag. The maintainer may
> >>> choose to offer an alias to the experimental tag, to prevent these
> >>> breakages in future.
> >>>
> >>> The following changes are made to enabling aliasing:
> >>>
> >>> Updated to the abi policy and abi versioning documents.
> >>>
> >>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> >>>
> >>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
> >>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
> >>> .experimental section (__rte_experimental tag is missing).
> >>> Updated tool in a way it won't complain if the symbol in the
> >>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> >>>
> >>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> >>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
> >>>
> >> Acked-by: Neil Horman <nhorman@tuxdriver.com>
> > 
> > Applied with few typos fixed, thanks.
> > 
> 
> Is a new version of the meter library required?

I think yes, Cristian is asking for some changes.



^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-18 17:18  4%         ` Thomas Monjalon
@ 2020-05-18 17:34  4%           ` Ferruh Yigit
  2020-05-18 17:51  4%             ` Thomas Monjalon
  2020-05-19 14:14  4%           ` Ray Kinsella
  1 sibling, 1 reply; 200+ results
From: Ferruh Yigit @ 2020-05-18 17:34 UTC (permalink / raw)
  To: Thomas Monjalon, Ray Kinsella
  Cc: dev, Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu, Neil Horman

On 5/18/2020 6:18 PM, Thomas Monjalon wrote:
> 16/05/2020 13:53, Neil Horman:
>> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
>>> From: Ferruh Yigit <ferruh.yigit@intel.com>
>>>
>>> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
>>> DPDK_20.0.1 block.
>>>
>>> This had the affect of breaking the applications that were using these
>>> APIs on v19.11. Although there is no modification of the APIs and the
>>> action is positive and matures the APIs, the affect can be negative to
>>> applications.
>>>
>>> When a maintainer is promoting an API to become part of the next major
>>> ABI version by removing the experimental tag. The maintainer may
>>> choose to offer an alias to the experimental tag, to prevent these
>>> breakages in future.
>>>
>>> The following changes are made to enabling aliasing:
>>>
>>> Updated to the abi policy and abi versioning documents.
>>>
>>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>>
>>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
>>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
>>> .experimental section (__rte_experimental tag is missing).
>>> Updated tool in a way it won't complain if the symbol in the
>>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
>>>
>> Acked-by: Neil Horman <nhorman@tuxdriver.com>
> 
> Applied with few typos fixed, thanks.
> 

Is a new version of the meter library required?


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-16 11:53  4%       ` Neil Horman
@ 2020-05-18 17:18  4%         ` Thomas Monjalon
  2020-05-18 17:34  4%           ` Ferruh Yigit
  2020-05-19 14:14  4%           ` Ray Kinsella
  0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2020-05-18 17:18 UTC (permalink / raw)
  To: Ray Kinsella
  Cc: dev, Ferruh Yigit, Luca Boccassi, David Marchand,
	Bruce Richardson, Ian Stokes, Eelco Chaudron, Andrzej Ostruszka,
	Kevin Traynor, John McNamara, Marko Kovacevic,
	Cristian Dumitrescu, Neil Horman

16/05/2020 13:53, Neil Horman:
> On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
> > From: Ferruh Yigit <ferruh.yigit@intel.com>
> > 
> > On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
> > DPDK_20.0.1 block.
> > 
> > This had the affect of breaking the applications that were using these
> > APIs on v19.11. Although there is no modification of the APIs and the
> > action is positive and matures the APIs, the affect can be negative to
> > applications.
> > 
> > When a maintainer is promoting an API to become part of the next major
> > ABI version by removing the experimental tag. The maintainer may
> > choose to offer an alias to the experimental tag, to prevent these
> > breakages in future.
> > 
> > The following changes are made to enabling aliasing:
> > 
> > Updated to the abi policy and abi versioning documents.
> > 
> > Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> > 
> > Updated the 'check-symbols.sh' buildtool, which was complaining that the
> > symbol is in EXPERIMENTAL tag in .map file but it is not in the
> > .experimental section (__rte_experimental tag is missing).
> > Updated tool in a way it won't complain if the symbol in the
> > EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> > 
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
> > 
> Acked-by: Neil Horman <nhorman@tuxdriver.com>

Applied with few typos fixed, thanks.




^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v3] doc: fix references to bind_default_symbol
  @ 2020-05-18 16:54  3%   ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-18 16:54 UTC (permalink / raw)
  To: Ray Kinsella
  Cc: dev, arkadiuszx.kusztal, bruce.richardson, Ray Kinsella,
	Neil Horman, John McNamara, Marko Kovacevic

06/05/2020 17:41, Ray Kinsella:
> The document abi_versioning.rst incorrectly instructs the developer to
> add BIND_DEFAULT_SYMBOL to the public header, not the source file. This
> commit fixes the issue and adds some clarifications.
> 
> The commit also clarifies the use of use_function_versioning in the
> meson/ninja build system, and does some minor re-organization of the
> document.
> 
> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
> ---
> v3:
>  * added a note to ask contributors to ensure they review the meson/ninja
>    section when adding "rte_function_versioning.h".

Fixes: f1ef9794f9bd ("doc: add ABI guidelines")
Cc: stable@dpdk.org

Applied with few typos fixed, thanks.



^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v2] abi: document reasons behind the three part versioning
  @ 2020-05-18 16:20  4%   ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-18 16:20 UTC (permalink / raw)
  To: Ray Kinsella
  Cc: dev, stable, Bruce Richardson, Neil Horman, John McNamara,
	Marko Kovacevic

05/05/2020 10:56, Ray Kinsella:
> Clarify the reasons behind the three part version numbering scheme.
> Documents the fixes made in f26c2b3.
> 
> Fixes: f26c2b39b271 ("build: fix soname info for 19.11 compatibility")
> 
> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
> v2:
> * Added "fixes" to commit message.
> 
>  doc/guides/contributing/abi_policy.rst |  3 ++-
>  doc/guides/rel_notes/release_20_05.rst | 12 ++++++++++++

Moved to release_20_02.rst and applied, thanks.
Note: the updated release notes will be published as part of 20.05.



^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18 12:13  3%                 ` Thomas Monjalon
@ 2020-05-18 13:06  0%                   ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-18 13:06 UTC (permalink / raw)
  To: Thomas Monjalon, Yigit, Ferruh, Dumitrescu, Cristian
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka



On 18/05/2020 13:13, Thomas Monjalon wrote:
> And I think, because of this goal, you will try to maintain ABI compat
> of *ALL* experimental symbols maturing as stable symbol.

I think that is a fair point, what we will ultimately need is a way to filter 
TCs that touch experimental from the Unit Test framework. 

That doesn't exist for v19.11, nor can we respectively invent it.
We should look at that for v20.11 to avoid supporting all "experimental symbols". 

As a better useful solution.
That said - I think having an alias-to-experimental tool in our box, 
stands on its own merit.

Ray K

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18 11:48  4%               ` Ray Kinsella
@ 2020-05-18 12:13  3%                 ` Thomas Monjalon
  2020-05-18 13:06  0%                   ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-18 12:13 UTC (permalink / raw)
  To: Yigit, Ferruh, Dumitrescu, Cristian, Ray Kinsella
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka

18/05/2020 13:48, Ray Kinsella:
> On 18/05/2020 11:46, Thomas Monjalon wrote:
> > 18/05/2020 11:30, Ray Kinsella:
> >> On 18/05/2020 10:22, Thomas Monjalon wrote:
> >>> 18/05/2020 08:29, Ray Kinsella:
> >>>> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
> >>>>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> >>>>>>
> >>>>>> On v20.02 some meter APIs have been matured and symbols moved from
> >>>>>> EXPERIMENTAL to DPDK_20.0.1 block.
> >>>>>>
> >>>>>> This can break the applications that were using these mentioned APIs on
> >>>>>> v19.11. Although there is no modification on the APIs and the action is
> >>>>>> positive and matures the APIs, the affect can be negative to
> >>>>>> applications.
> >>>>>>
> >>>>>> Since experimental APIs can change or go away without notice as part of
> >>>>>> contract, to prevent this negative affect that may occur by maturing
> >>>>>> experimental API, a process update already suggested, which enables
> >>>>>> aliasing without forcing it:
> >>>>>> https://patches.dpdk.org/patch/65863/
> >>>>>>
> >>>>>
> >>>>> Personally, I am not convinced this is really needed.
> >>>>>
> >>>>> Are there any users asking for this?
> >>>>
> >>>> As it happens it is all breaking our abi regression test suite.
> >>>> One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
> >>>>  
> >>>>> Is there any other library where this is also applied, or is librte_meter the only library?
> >>>>
> >>>> librte_meter is the only example AFAIK. 
> >>>> But then we only have one example of needing symbol versioning also at the moment (Cryptodev).
> >>>>
> >>>> This is going to happen with experimental symbols that have been around a while, 
> >>>> that have become used in applications. It is a non-mandatory tool a maintainer can use
> >>>> to preserve abi compatibility.
> >>>
> >>> If you want to maintain ABI compatibility of experimental symbols,
> >>> it IS a mandatory tool.
> >>> You cannot enforce your "ABI regression test suite" and at the same time
> >>> say it is "non-mandatory".
> >>>
> >>> The real question here is to know whether we want to maintain compatibility
> >>> of experimental symbols. We said no. Then we said we can.
> >>> The main concern is the message clarity in my opinion.
> >>>
> >>
> >> There is complete clarity, there is no obligation. 
> >> Our lack of obligation around experimental, is upfront in the policy is upfront in the policy.
> >>
> >> "Libraries or APIs marked as experimental may change without constraint, as they are not considered part of an ABI version. Experimental libraries have the major ABI version 0."
> >>
> >> Later we give the _option_ without obligation to add an alias to experimental.pls see the v6.
> >>
> >> +   - In situations in which an ``experimental`` symbol has been stable for some
> >> +     time. When promoting the symbol to become part of the next ABI version, the
> >> +     maintainer may choose to provide an alias to the ``experimental`` tag, so
> >> +     as not to break consuming applications.
> >>
> >> So it is something a Maintainer, _may_ choose to do.
> >> I use the word, "may" not "will" as there is no obligation's associated with experimental.
> > 
> > 
> > OK Ray, this is my understanding as well.
> > 
> > The only difficult part to understand is when claiming
> > "it is all breaking our abi regression test suite"
> > to justify the choice.
> 
> Justification, is the same as any other consumer of DPDK saying you broke my APP.
> 
> > As the maintainer (Cristian) says he does not like this change,
> > it means the regression test suite should skip this case, right?
> 
> So the regression test run the v19.11 Unit Test's against the v20.05 rc.
> My thought was that would provide reasonably good coverage of the ABI to catch more subtly regression.
> Those regressions that affect the behavior of the ABI (the contract), instead of ABI itself. 

I understand the goal.
And I think, because of this goal, you will try to maintain ABI compat
of *ALL* experimental symbols maturing as stable symbol.



^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18 11:18  0%               ` Dumitrescu, Cristian
@ 2020-05-18 11:49  0%                 ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-18 11:49 UTC (permalink / raw)
  To: Dumitrescu, Cristian, Thomas Monjalon, Yigit, Ferruh
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka



On 18/05/2020 12:18, Dumitrescu, Cristian wrote:
> 
> 
>> -----Original Message-----
>> From: Thomas Monjalon <thomas@monjalon.net>
>> Sent: Monday, May 18, 2020 11:46 AM
>> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Ray Kinsella <mdr@ashroe.eu>;
>> Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
>> Cc: Neil Horman <nhorman@tuxdriver.com>; Eelco Chaudron
>> <echaudro@redhat.com>; dev@dpdk.org; David Marchand
>> <david.marchand@redhat.com>; stable@dpdk.org; Luca Boccassi
>> <bluca@debian.org>; Richardson, Bruce <bruce.richardson@intel.com>;
>> Stokes, Ian <ian.stokes@intel.com>; Andrzej Ostruszka
>> <amo@semihalf.com>
>> Subject: Re: [PATCH v4] meter: provide experimental alias of API for old apps
>>
>> 18/05/2020 11:30, Ray Kinsella:
>>> On 18/05/2020 10:22, Thomas Monjalon wrote:
>>>> 18/05/2020 08:29, Ray Kinsella:
>>>>> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
>>>>>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
>>>>>>>
>>>>>>> On v20.02 some meter APIs have been matured and symbols moved
>> from
>>>>>>> EXPERIMENTAL to DPDK_20.0.1 block.
>>>>>>>
>>>>>>> This can break the applications that were using these mentioned APIs
>> on
>>>>>>> v19.11. Although there is no modification on the APIs and the action is
>>>>>>> positive and matures the APIs, the affect can be negative to
>>>>>>> applications.
>>>>>>>
>>>>>>> Since experimental APIs can change or go away without notice as part
>> of
>>>>>>> contract, to prevent this negative affect that may occur by maturing
>>>>>>> experimental API, a process update already suggested, which
>> enables
>>>>>>> aliasing without forcing it:
>>>>>>> https://patches.dpdk.org/patch/65863/
>>>>>>>
>>>>>>
>>>>>> Personally, I am not convinced this is really needed.
>>>>>>
>>>>>> Are there any users asking for this?
>>>>>
>>>>> As it happens it is all breaking our abi regression test suite.
>>>>> One of the things we do is to run the unit tests binary from v19.11
>> against the latest release.
>>>>>
>>>>>> Is there any other library where this is also applied, or is librte_meter
>> the only library?
>>>>>
>>>>> librte_meter is the only example AFAIK.
>>>>> But then we only have one example of needing symbol versioning also
>> at the moment (Cryptodev).
>>>>>
>>>>> This is going to happen with experimental symbols that have been
>> around a while,
>>>>> that have become used in applications. It is a non-mandatory tool a
>> maintainer can use
>>>>> to preserve abi compatibility.
>>>>
>>>> If you want to maintain ABI compatibility of experimental symbols,
>>>> it IS a mandatory tool.
>>>> You cannot enforce your "ABI regression test suite" and at the same time
>>>> say it is "non-mandatory".
>>>>
>>>> The real question here is to know whether we want to maintain
>> compatibility
>>>> of experimental symbols. We said no. Then we said we can.
>>>> The main concern is the message clarity in my opinion.
>>>>
>>>
>>> There is complete clarity, there is no obligation.
>>> Our lack of obligation around experimental, is upfront in the policy is
>> upfront in the policy.
>>>
>>> "Libraries or APIs marked as experimental may change without constraint,
>> as they are not considered part of an ABI version. Experimental libraries have
>> the major ABI version 0."
>>>
>>> Later we give the _option_ without obligation to add an alias to
>> experimental.pls see the v6.
>>>
>>> +   - In situations in which an ``experimental`` symbol has been stable for
>> some
>>> +     time. When promoting the symbol to become part of the next ABI
>> version, the
>>> +     maintainer may choose to provide an alias to the ``experimental`` tag,
>> so
>>> +     as not to break consuming applications.
>>>
>>> So it is something a Maintainer, _may_ choose to do.
>>> I use the word, "may" not "will" as there is no obligation's associated with
>> experimental.
>>
>>
>> OK Ray, this is my understanding as well.
>>
>> The only difficult part to understand is when claiming
>> "it is all breaking our abi regression test suite"
>> to justify the choice.
>> As the maintainer (Cristian) says he does not like this change,
>> it means the regression test suite should skip this case, right?
>>
> 
> I am yet to be convinced of the value of this, but if some people think it is useful, I am willing to compromise. This is subject to this code being temporary code to be removed for 20.11 release, which Ray already confirmed.
> 
> Ray, a few more suggestions, are you OK with them?
> 1. Move this code to a separate file in the library (suggest rte_meter_abi_compat.c as the file name)
> 2. Clearly state in the patch description this is temporary code to be removed for 20.11 release.
> 3. Agree that you or Ferruh take the AR to send a patch prior to the 20.11 release to remove this code.
> 
> Thanks,
> Cristian

Hi Cristain - I am good with all of the above.

Ray K


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18 10:46  3%             ` Thomas Monjalon
  2020-05-18 11:18  0%               ` Dumitrescu, Cristian
@ 2020-05-18 11:48  4%               ` Ray Kinsella
  2020-05-18 12:13  3%                 ` Thomas Monjalon
  1 sibling, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-18 11:48 UTC (permalink / raw)
  To: Thomas Monjalon, Yigit, Ferruh, Dumitrescu, Cristian
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka



On 18/05/2020 11:46, Thomas Monjalon wrote:
> 18/05/2020 11:30, Ray Kinsella:
>> On 18/05/2020 10:22, Thomas Monjalon wrote:
>>> 18/05/2020 08:29, Ray Kinsella:
>>>> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
>>>>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
>>>>>>
>>>>>> On v20.02 some meter APIs have been matured and symbols moved from
>>>>>> EXPERIMENTAL to DPDK_20.0.1 block.
>>>>>>
>>>>>> This can break the applications that were using these mentioned APIs on
>>>>>> v19.11. Although there is no modification on the APIs and the action is
>>>>>> positive and matures the APIs, the affect can be negative to
>>>>>> applications.
>>>>>>
>>>>>> Since experimental APIs can change or go away without notice as part of
>>>>>> contract, to prevent this negative affect that may occur by maturing
>>>>>> experimental API, a process update already suggested, which enables
>>>>>> aliasing without forcing it:
>>>>>> https://patches.dpdk.org/patch/65863/
>>>>>>
>>>>>
>>>>> Personally, I am not convinced this is really needed.
>>>>>
>>>>> Are there any users asking for this?
>>>>
>>>> As it happens it is all breaking our abi regression test suite.
>>>> One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
>>>>  
>>>>> Is there any other library where this is also applied, or is librte_meter the only library?
>>>>
>>>> librte_meter is the only example AFAIK. 
>>>> But then we only have one example of needing symbol versioning also at the moment (Cryptodev).
>>>>
>>>> This is going to happen with experimental symbols that have been around a while, 
>>>> that have become used in applications. It is a non-mandatory tool a maintainer can use
>>>> to preserve abi compatibility.
>>>
>>> If you want to maintain ABI compatibility of experimental symbols,
>>> it IS a mandatory tool.
>>> You cannot enforce your "ABI regression test suite" and at the same time
>>> say it is "non-mandatory".
>>>
>>> The real question here is to know whether we want to maintain compatibility
>>> of experimental symbols. We said no. Then we said we can.
>>> The main concern is the message clarity in my opinion.
>>>
>>
>> There is complete clarity, there is no obligation. 
>> Our lack of obligation around experimental, is upfront in the policy is upfront in the policy.
>>
>> "Libraries or APIs marked as experimental may change without constraint, as they are not considered part of an ABI version. Experimental libraries have the major ABI version 0."
>>
>> Later we give the _option_ without obligation to add an alias to experimental.pls see the v6.
>>
>> +   - In situations in which an ``experimental`` symbol has been stable for some
>> +     time. When promoting the symbol to become part of the next ABI version, the
>> +     maintainer may choose to provide an alias to the ``experimental`` tag, so
>> +     as not to break consuming applications.
>>
>> So it is something a Maintainer, _may_ choose to do.
>> I use the word, "may" not "will" as there is no obligation's associated with experimental.
> 
> 
> OK Ray, this is my understanding as well.
> 
> The only difficult part to understand is when claiming
> "it is all breaking our abi regression test suite"
> to justify the choice.

Justification, is the same as any other consumer of DPDK saying you broke my APP.

> As the maintainer (Cristian) says he does not like this change,
> it means the regression test suite should skip this case, right?

So the regression test run the v19.11 Unit Test's against the v20.05 rc.
My thought was that would provide reasonably good coverage of the ABI to catch more subtly regression.
Those regressions that affect the behavior of the ABI (the contract), instead of ABI itself. 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18 10:46  3%             ` Thomas Monjalon
@ 2020-05-18 11:18  0%               ` Dumitrescu, Cristian
  2020-05-18 11:49  0%                 ` Ray Kinsella
  2020-05-18 11:48  4%               ` Ray Kinsella
  1 sibling, 1 reply; 200+ results
From: Dumitrescu, Cristian @ 2020-05-18 11:18 UTC (permalink / raw)
  To: Thomas Monjalon, Yigit, Ferruh, Ray Kinsella
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka



> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Monday, May 18, 2020 11:46 AM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>; Ray Kinsella <mdr@ashroe.eu>;
> Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
> Cc: Neil Horman <nhorman@tuxdriver.com>; Eelco Chaudron
> <echaudro@redhat.com>; dev@dpdk.org; David Marchand
> <david.marchand@redhat.com>; stable@dpdk.org; Luca Boccassi
> <bluca@debian.org>; Richardson, Bruce <bruce.richardson@intel.com>;
> Stokes, Ian <ian.stokes@intel.com>; Andrzej Ostruszka
> <amo@semihalf.com>
> Subject: Re: [PATCH v4] meter: provide experimental alias of API for old apps
> 
> 18/05/2020 11:30, Ray Kinsella:
> > On 18/05/2020 10:22, Thomas Monjalon wrote:
> > > 18/05/2020 08:29, Ray Kinsella:
> > >> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
> > >>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> > >>>>
> > >>>> On v20.02 some meter APIs have been matured and symbols moved
> from
> > >>>> EXPERIMENTAL to DPDK_20.0.1 block.
> > >>>>
> > >>>> This can break the applications that were using these mentioned APIs
> on
> > >>>> v19.11. Although there is no modification on the APIs and the action is
> > >>>> positive and matures the APIs, the affect can be negative to
> > >>>> applications.
> > >>>>
> > >>>> Since experimental APIs can change or go away without notice as part
> of
> > >>>> contract, to prevent this negative affect that may occur by maturing
> > >>>> experimental API, a process update already suggested, which
> enables
> > >>>> aliasing without forcing it:
> > >>>> https://patches.dpdk.org/patch/65863/
> > >>>>
> > >>>
> > >>> Personally, I am not convinced this is really needed.
> > >>>
> > >>> Are there any users asking for this?
> > >>
> > >> As it happens it is all breaking our abi regression test suite.
> > >> One of the things we do is to run the unit tests binary from v19.11
> against the latest release.
> > >>
> > >>> Is there any other library where this is also applied, or is librte_meter
> the only library?
> > >>
> > >> librte_meter is the only example AFAIK.
> > >> But then we only have one example of needing symbol versioning also
> at the moment (Cryptodev).
> > >>
> > >> This is going to happen with experimental symbols that have been
> around a while,
> > >> that have become used in applications. It is a non-mandatory tool a
> maintainer can use
> > >> to preserve abi compatibility.
> > >
> > > If you want to maintain ABI compatibility of experimental symbols,
> > > it IS a mandatory tool.
> > > You cannot enforce your "ABI regression test suite" and at the same time
> > > say it is "non-mandatory".
> > >
> > > The real question here is to know whether we want to maintain
> compatibility
> > > of experimental symbols. We said no. Then we said we can.
> > > The main concern is the message clarity in my opinion.
> > >
> >
> > There is complete clarity, there is no obligation.
> > Our lack of obligation around experimental, is upfront in the policy is
> upfront in the policy.
> >
> > "Libraries or APIs marked as experimental may change without constraint,
> as they are not considered part of an ABI version. Experimental libraries have
> the major ABI version 0."
> >
> > Later we give the _option_ without obligation to add an alias to
> experimental.pls see the v6.
> >
> > +   - In situations in which an ``experimental`` symbol has been stable for
> some
> > +     time. When promoting the symbol to become part of the next ABI
> version, the
> > +     maintainer may choose to provide an alias to the ``experimental`` tag,
> so
> > +     as not to break consuming applications.
> >
> > So it is something a Maintainer, _may_ choose to do.
> > I use the word, "may" not "will" as there is no obligation's associated with
> experimental.
> 
> 
> OK Ray, this is my understanding as well.
> 
> The only difficult part to understand is when claiming
> "it is all breaking our abi regression test suite"
> to justify the choice.
> As the maintainer (Cristian) says he does not like this change,
> it means the regression test suite should skip this case, right?
> 

I am yet to be convinced of the value of this, but if some people think it is useful, I am willing to compromise. This is subject to this code being temporary code to be removed for 20.11 release, which Ray already confirmed.

Ray, a few more suggestions, are you OK with them?
1. Move this code to a separate file in the library (suggest rte_meter_abi_compat.c as the file name)
2. Clearly state in the patch description this is temporary code to be removed for 20.11 release.
3. Agree that you or Ferruh take the AR to send a patch prior to the 20.11 release to remove this code.

Thanks,
Cristian

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18  9:30  4%           ` Ray Kinsella
@ 2020-05-18 10:46  3%             ` Thomas Monjalon
  2020-05-18 11:18  0%               ` Dumitrescu, Cristian
  2020-05-18 11:48  4%               ` Ray Kinsella
  0 siblings, 2 replies; 200+ results
From: Thomas Monjalon @ 2020-05-18 10:46 UTC (permalink / raw)
  To: Yigit, Ferruh, Ray Kinsella, Dumitrescu, Cristian
  Cc: Neil Horman, Eelco Chaudron, dev, David Marchand, stable,
	Luca Boccassi, Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka

18/05/2020 11:30, Ray Kinsella:
> On 18/05/2020 10:22, Thomas Monjalon wrote:
> > 18/05/2020 08:29, Ray Kinsella:
> >> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
> >>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> >>>>
> >>>> On v20.02 some meter APIs have been matured and symbols moved from
> >>>> EXPERIMENTAL to DPDK_20.0.1 block.
> >>>>
> >>>> This can break the applications that were using these mentioned APIs on
> >>>> v19.11. Although there is no modification on the APIs and the action is
> >>>> positive and matures the APIs, the affect can be negative to
> >>>> applications.
> >>>>
> >>>> Since experimental APIs can change or go away without notice as part of
> >>>> contract, to prevent this negative affect that may occur by maturing
> >>>> experimental API, a process update already suggested, which enables
> >>>> aliasing without forcing it:
> >>>> https://patches.dpdk.org/patch/65863/
> >>>>
> >>>
> >>> Personally, I am not convinced this is really needed.
> >>>
> >>> Are there any users asking for this?
> >>
> >> As it happens it is all breaking our abi regression test suite.
> >> One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
> >>  
> >>> Is there any other library where this is also applied, or is librte_meter the only library?
> >>
> >> librte_meter is the only example AFAIK. 
> >> But then we only have one example of needing symbol versioning also at the moment (Cryptodev).
> >>
> >> This is going to happen with experimental symbols that have been around a while, 
> >> that have become used in applications. It is a non-mandatory tool a maintainer can use
> >> to preserve abi compatibility.
> > 
> > If you want to maintain ABI compatibility of experimental symbols,
> > it IS a mandatory tool.
> > You cannot enforce your "ABI regression test suite" and at the same time
> > say it is "non-mandatory".
> > 
> > The real question here is to know whether we want to maintain compatibility
> > of experimental symbols. We said no. Then we said we can.
> > The main concern is the message clarity in my opinion.
> > 
> 
> There is complete clarity, there is no obligation. 
> Our lack of obligation around experimental, is upfront in the policy is upfront in the policy.
> 
> "Libraries or APIs marked as experimental may change without constraint, as they are not considered part of an ABI version. Experimental libraries have the major ABI version 0."
> 
> Later we give the _option_ without obligation to add an alias to experimental.pls see the v6.
> 
> +   - In situations in which an ``experimental`` symbol has been stable for some
> +     time. When promoting the symbol to become part of the next ABI version, the
> +     maintainer may choose to provide an alias to the ``experimental`` tag, so
> +     as not to break consuming applications.
> 
> So it is something a Maintainer, _may_ choose to do.
> I use the word, "may" not "will" as there is no obligation's associated with experimental.


OK Ray, this is my understanding as well.

The only difficult part to understand is when claiming
"it is all breaking our abi regression test suite"
to justify the choice.
As the maintainer (Cristian) says he does not like this change,
it means the regression test suite should skip this case, right?



^ permalink raw reply	[relevance 3%]

* [dpdk-dev] DPDK 20.05 RC2 Test Report
@ 2020-05-18 10:39  3% Peng, Yuan
  0 siblings, 0 replies; 200+ results
From: Peng, Yuan @ 2020-05-18 10:39 UTC (permalink / raw)
  To: dev

RC2 test is finished. Here is DPDK-20.05 RC2 validation report:

  *   Totally create ~400+ new test cases for DPDK20.05 new features.
  *   Totally run 10143 cases, debug progress is around 99%, pass rate is about 97%, 6 new issues are found, no critical issue found.
  *   Checked daily build, all pass.
  *   Checked Basic NIC PMD(i40e, ixgbe, ice) PF & VF regression: new found 1 PF issue and 1 VF issue.
  *   Checked virtio regression test, 1 bug is found.
  *   Checked cryptodev and compressdev regression, no new issus found.
  *   Checked NIC performance, no new issue found.
  *   Checked ABI test, no new issue found.
  *   Checked 20.05 new features: found 3 new issues.

Thank you.
Yuan.


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18  9:22  4%         ` Thomas Monjalon
@ 2020-05-18  9:30  4%           ` Ray Kinsella
  2020-05-18 10:46  3%             ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-18  9:30 UTC (permalink / raw)
  To: Thomas Monjalon, Yigit, Ferruh
  Cc: Dumitrescu, Cristian, Neil Horman, Eelco Chaudron, dev,
	David Marchand, stable, Luca Boccassi, Richardson, Bruce, Stokes,
	Ian, Andrzej Ostruszka



On 18/05/2020 10:22, Thomas Monjalon wrote:
> 18/05/2020 08:29, Ray Kinsella:
>> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
>>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
>>>>
>>>> On v20.02 some meter APIs have been matured and symbols moved from
>>>> EXPERIMENTAL to DPDK_20.0.1 block.
>>>>
>>>> This can break the applications that were using these mentioned APIs on
>>>> v19.11. Although there is no modification on the APIs and the action is
>>>> positive and matures the APIs, the affect can be negative to
>>>> applications.
>>>>
>>>> Since experimental APIs can change or go away without notice as part of
>>>> contract, to prevent this negative affect that may occur by maturing
>>>> experimental API, a process update already suggested, which enables
>>>> aliasing without forcing it:
>>>> https://patches.dpdk.org/patch/65863/
>>>>
>>>
>>> Personally, I am not convinced this is really needed.
>>>
>>> Are there any users asking for this?
>>
>> As it happens it is all breaking our abi regression test suite.
>> One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
>>  
>>> Is there any other library where this is also applied, or is librte_meter the only library?
>>
>> librte_meter is the only example AFAIK. 
>> But then we only have one example of needing symbol versioning also at the moment (Cryptodev).
>>
>> This is going to happen with experimental symbols that have been around a while, 
>> that have become used in applications. It is a non-mandatory tool a maintainer can use
>> to preserve abi compatibility.
> 
> If you want to maintain ABI compatibility of experimental symbols,
> it IS a mandatory tool.
> You cannot enforce your "ABI regression test suite" and at the same time
> say it is "non-mandatory".> 
> The real question here is to know whether we want to maintain compatibility
> of experimental symbols. We said no. Then we said we can.
> The main concern is the message clarity in my opinion.
> 

There is complete clarity, there is no obligation. 
Our lack of obligation around experimental, is upfront in the policy is upfront in the policy.

"Libraries or APIs marked as experimental may change without constraint, as they are not considered part of an ABI version. Experimental libraries have the major ABI version 0."

Later we give the _option_ without obligation to add an alias to experimental.pls see the v6.

+   - In situations in which an ``experimental`` symbol has been stable for some
+     time. When promoting the symbol to become part of the next ABI version, the
+     maintainer may choose to provide an alias to the ``experimental`` tag, so
+     as not to break consuming applications.

So it is something a Maintainer, _may_ choose to do.
I use the word, "may" not "will" as there is no obligation's associated with experimental.

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-18  6:29  4%       ` Ray Kinsella
@ 2020-05-18  9:22  4%         ` Thomas Monjalon
  2020-05-18  9:30  4%           ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-18  9:22 UTC (permalink / raw)
  To: Yigit, Ferruh, Ray Kinsella
  Cc: Dumitrescu, Cristian, Neil Horman, Eelco Chaudron, dev,
	David Marchand, stable, Luca Boccassi, Richardson, Bruce, Stokes,
	Ian, Andrzej Ostruszka

18/05/2020 08:29, Ray Kinsella:
> On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
> > From: Yigit, Ferruh <ferruh.yigit@intel.com>
> >>
> >> On v20.02 some meter APIs have been matured and symbols moved from
> >> EXPERIMENTAL to DPDK_20.0.1 block.
> >>
> >> This can break the applications that were using these mentioned APIs on
> >> v19.11. Although there is no modification on the APIs and the action is
> >> positive and matures the APIs, the affect can be negative to
> >> applications.
> >>
> >> Since experimental APIs can change or go away without notice as part of
> >> contract, to prevent this negative affect that may occur by maturing
> >> experimental API, a process update already suggested, which enables
> >> aliasing without forcing it:
> >> https://patches.dpdk.org/patch/65863/
> >>
> > 
> > Personally, I am not convinced this is really needed.
> > 
> > Are there any users asking for this?
> 
> As it happens it is all breaking our abi regression test suite.
> One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
>  
> > Is there any other library where this is also applied, or is librte_meter the only library?
> 
> librte_meter is the only example AFAIK. 
> But then we only have one example of needing symbol versioning also at the moment (Cryptodev).
> 
> This is going to happen with experimental symbols that have been around a while, 
> that have become used in applications. It is a non-mandatory tool a maintainer can use
> to preserve abi compatibility.

If you want to maintain ABI compatibility of experimental symbols,
it IS a mandatory tool.
You cannot enforce your "ABI regression test suite" and at the same time
say it is "non-mandatory".

The real question here is to know whether we want to maintain compatibility
of experimental symbols. We said no. Then we said we can.
The main concern is the message clarity in my opinion.



^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-17 19:52  0%     ` [dpdk-dev] [PATCH v4] meter: " Dumitrescu, Cristian
@ 2020-05-18  6:29  4%       ` Ray Kinsella
  2020-05-18  9:22  4%         ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-18  6:29 UTC (permalink / raw)
  To: Dumitrescu, Cristian, Yigit, Ferruh, Neil Horman, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka



On 17/05/2020 20:52, Dumitrescu, Cristian wrote:
> Hi Ferruh,
> 
>> -----Original Message-----
>> From: Yigit, Ferruh <ferruh.yigit@intel.com>
>> Sent: Thursday, May 14, 2020 5:11 PM
>> To: Ray Kinsella <mdr@ashroe.eu>; Neil Horman
>> <nhorman@tuxdriver.com>; Dumitrescu, Cristian
>> <cristian.dumitrescu@intel.com>; Eelco Chaudron <echaudro@redhat.com>
>> Cc: dev@dpdk.org; Yigit, Ferruh <ferruh.yigit@intel.com>; Thomas Monjalon
>> <thomas@monjalon.net>; David Marchand <david.marchand@redhat.com>;
>> stable@dpdk.org; Luca Boccassi <bluca@debian.org>; Richardson, Bruce
>> <bruce.richardson@intel.com>; Stokes, Ian <ian.stokes@intel.com>; Andrzej
>> Ostruszka <amo@semihalf.com>
>> Subject: [PATCH v4] meter: provide experimental alias of API for old apps
>>
>> On v20.02 some meter APIs have been matured and symbols moved from
>> EXPERIMENTAL to DPDK_20.0.1 block.
>>
>> This can break the applications that were using these mentioned APIs on
>> v19.11. Although there is no modification on the APIs and the action is
>> positive and matures the APIs, the affect can be negative to
>> applications.
>>
>> Since experimental APIs can change or go away without notice as part of
>> contract, to prevent this negative affect that may occur by maturing
>> experimental API, a process update already suggested, which enables
>> aliasing without forcing it:
>> https://patches.dpdk.org/patch/65863/
>>
> 
> Personally, I am not convinced this is really needed.
> 
> Are there any users asking for this?

As it happens it is all breaking our abi regression test suite.
One of the things we do is to run the unit tests binary from v19.11 against the latest release. 
 
> Is there any other library where this is also applied, or is librte_meter the only library?

librte_meter is the only example AFAIK. 
But then we only have one example of needing symbol versioning also at the moment (Cryptodev).

This is going to happen with experimental symbols that have been around a while, 
that have become used in applications. It is a non-mandatory tool a maintainer can use
to preserve abi compatibility. 

> 
>> This patch provides aliasing by duplicating the existing and versioned
>> symbols as experimental.
>>
>> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
>> aliasing done between EXPERIMENTAL and DPDK_21.
>>
>> Also following changes done to enabling aliasing:
>>
>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>
>> Updated the 'check-symbols.sh' buildtool, which was complaining that the
>> symbol is in EXPERIMENTAL tag in .map file but it is not in the
>> .experimental section (__rte_experimental tag is missing).
>> Updated tool in a way it won't complain if the symbol in the
>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>
>> Enabled function versioning for meson build for the library.
>>
>> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM
>> API")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> Cc: Neil Horman <nhorman@tuxdriver.com>
>> Cc: Thomas Monjalon <thomas@monjalon.net>
>> Cc: Luca Boccassi <bluca@debian.org>
>> Cc: David Marchand <david.marchand@redhat.com>
>> Cc: Bruce Richardson <bruce.richardson@intel.com>
>> Cc: Ian Stokes <ian.stokes@intel.com>
>> Cc: Eelco Chaudron <echaudro@redhat.com>
>> Cc: Andrzej Ostruszka <amo@semihalf.com>
>> Cc: Ray Kinsella <mdr@ashroe.eu>
>>
>> v2:
>> * Commit log updated
>>
>> v3:
>> * added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
>>
>> v4:
>> * update script name in commit log, remove empty line
>> ---
>>  buildtools/check-symbols.sh                   |  3 +-
>>  .../include/rte_function_versioning.h         |  9 +++
>>  lib/librte_meter/meson.build                  |  1 +
>>  lib/librte_meter/rte_meter.c                  | 59 ++++++++++++++++++-
>>  lib/librte_meter/rte_meter_version.map        |  8 +++
>>  5 files changed, 76 insertions(+), 4 deletions(-)
>>
>> diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
>> index 3df57c322c..e407553a34 100755
>> --- a/buildtools/check-symbols.sh
>> +++ b/buildtools/check-symbols.sh
>> @@ -26,7 +26,8 @@ ret=0
>>  for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
>>  do
>>  	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
>> -		! grep -q "\.text\.experimental.*[[:space:]]$SYM$"
>> $DUMPFILE
>> +		! grep -q "\.text\.experimental.*[[:space:]]$SYM$"
>> $DUMPFILE &&
>> +		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
>>  	then
>>  		cat >&2 <<- END_OF_MESSAGE
>>  		$SYM is not flagged as experimental
>> diff --git a/lib/librte_eal/include/rte_function_versioning.h
>> b/lib/librte_eal/include/rte_function_versioning.h
>> index b9f862d295..f588f2643b 100644
>> --- a/lib/librte_eal/include/rte_function_versioning.h
>> +++ b/lib/librte_eal/include/rte_function_versioning.h
>> @@ -46,6 +46,14 @@
>>   */
>>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b)
>> RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
>>
>> +/*
>> + * VERSION_SYMBOL_EXPERIMENTAL
>> + * Creates a symbol version table entry binding the symbol
>> <b>@EXPERIMENTAL to the internal
>> + * function name <b><e>. The macro is used when a symbol matures to
>> become part of the stable ABI,
>> + * to provide an alias to experimental for some time.
>> + */
>> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver "
>> RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
>> +
>>  /*
>>   * BIND_DEFAULT_SYMBOL
>>   * Creates a symbol version entry instructing the linker to bind references to
>> @@ -79,6 +87,7 @@
>>   * No symbol versioning in use
>>   */
>>  #define VERSION_SYMBOL(b, e, n)
>> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
>>  #define __vsym
>>  #define BIND_DEFAULT_SYMBOL(b, e, n)
>>  #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
>> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
>> index 646fd4d43f..fce0368437 100644
>> --- a/lib/librte_meter/meson.build
>> +++ b/lib/librte_meter/meson.build
>> @@ -3,3 +3,4 @@
>>
>>  sources = files('rte_meter.c')
>>  headers = files('rte_meter.h')
>> +use_function_versioning = true
>> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
>> index da01429a8b..c600b05064 100644
>> --- a/lib/librte_meter/rte_meter.c
>> +++ b/lib/librte_meter/rte_meter.c
>> @@ -9,6 +9,7 @@
>>  #include <rte_common.h>
>>  #include <rte_log.h>
>>  #include <rte_cycles.h>
>> +#include <rte_function_versioning.h>
>>
>>  #include "rte_meter.h"
>>
>> @@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
>>  	return 0;
>>  }
>>
>> -int
>> -rte_meter_trtcm_rfc4115_profile_config(
>> +static int
>> +rte_meter_trtcm_rfc4115_profile_config_(
>>  	struct rte_meter_trtcm_rfc4115_profile *p,
>>  	struct rte_meter_trtcm_rfc4115_params *params)
>>  {
>> @@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
>>  }
>>
>>  int
>> -rte_meter_trtcm_rfc4115_config(
>> +rte_meter_trtcm_rfc4115_profile_config_s(
>> +	struct rte_meter_trtcm_rfc4115_profile *p,
>> +	struct rte_meter_trtcm_rfc4115_params *params);
>> +int
>> +rte_meter_trtcm_rfc4115_profile_config_s(
>> +	struct rte_meter_trtcm_rfc4115_profile *p,
>> +	struct rte_meter_trtcm_rfc4115_params *params)
>> +{
>> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
>> +}
>> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
>> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct
>> rte_meter_trtcm_rfc4115_profile *p,
>> +		struct rte_meter_trtcm_rfc4115_params *params),
>> rte_meter_trtcm_rfc4115_profile_config_s);
>> +
>> +int
>> +rte_meter_trtcm_rfc4115_profile_config_e(
>> +	struct rte_meter_trtcm_rfc4115_profile *p,
>> +	struct rte_meter_trtcm_rfc4115_params *params);
>> +int
>> +rte_meter_trtcm_rfc4115_profile_config_e(
>> +	struct rte_meter_trtcm_rfc4115_profile *p,
>> +	struct rte_meter_trtcm_rfc4115_params *params)
>> +{
>> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
>> +}
>> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_conf
>> ig, _e);
>> +
>> +static int
>> +rte_meter_trtcm_rfc4115_config_(
>>  	struct rte_meter_trtcm_rfc4115 *m,
>>  	struct rte_meter_trtcm_rfc4115_profile *p)
>>  {
>> @@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
>>
>>  	return 0;
>>  }
>> +
>> +int
>> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
>> +	struct rte_meter_trtcm_rfc4115_profile *p);
>> +int
>> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
>> +	struct rte_meter_trtcm_rfc4115_profile *p)
>> +{
>> +	return rte_meter_trtcm_rfc4115_config_(m, p);
>> +}
>> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
>> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct
>> rte_meter_trtcm_rfc4115 *m,
>> +		 struct rte_meter_trtcm_rfc4115_profile *p),
>> rte_meter_trtcm_rfc4115_config_s);
>> +
>> +int
>> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
>> +	struct rte_meter_trtcm_rfc4115_profile *p);
>> +int
>> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
>> +	struct rte_meter_trtcm_rfc4115_profile *p)
>> +{
>> +	return rte_meter_trtcm_rfc4115_config_(m, p);
>> +}
>> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
> 
> To me, this is a significant amount of dead code that does not add any functionality and does not bring any added value to the library for any user. I am not a build system expert, but I would definitely prefer avoiding adding any C code to the library for this purpose, and just modify the map file, would this approach be possible?

Approach is exactly the same as the rest of symbol versioning. 
 
> Also, very important, is this C code to be added permanently or is it added just on a temporary basis? If temporary, when is it going to be removed?

It will be removed in the v21 (20.11 lts) release. 
When we officially rev the abi and start afresh. 

> 
>> diff --git a/lib/librte_meter/rte_meter_version.map
>> b/lib/librte_meter/rte_meter_version.map
>> index 2c7dadbcac..b493bcebe9 100644
>> --- a/lib/librte_meter/rte_meter_version.map
>> +++ b/lib/librte_meter/rte_meter_version.map
>> @@ -20,4 +20,12 @@ DPDK_21 {
>>  	rte_meter_trtcm_rfc4115_color_blind_check;
>>  	rte_meter_trtcm_rfc4115_config;
>>  	rte_meter_trtcm_rfc4115_profile_config;
>> +
>>  } DPDK_20.0;
>> +
>> +EXPERIMENTAL {
>> +       global:
>> +
>> +	rte_meter_trtcm_rfc4115_config;
>> +	rte_meter_trtcm_rfc4115_profile_config;
>> +};
>> --
>> 2.25.4
> 
> Regards,
> Cristian
> 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
  2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
  2020-05-15 14:36 12%     ` [dpdk-dev] [PATCH v5] abi: " Ray Kinsella
  2020-05-15 15:01 12%     ` [dpdk-dev] [PATCH v6] " Ray Kinsella
@ 2020-05-17 19:52  0%     ` Dumitrescu, Cristian
  2020-05-18  6:29  4%       ` Ray Kinsella
  2 siblings, 1 reply; 200+ results
From: Dumitrescu, Cristian @ 2020-05-17 19:52 UTC (permalink / raw)
  To: Yigit, Ferruh, Ray Kinsella, Neil Horman, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Richardson, Bruce, Stokes, Ian, Andrzej Ostruszka

Hi Ferruh,

> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Thursday, May 14, 2020 5:11 PM
> To: Ray Kinsella <mdr@ashroe.eu>; Neil Horman
> <nhorman@tuxdriver.com>; Dumitrescu, Cristian
> <cristian.dumitrescu@intel.com>; Eelco Chaudron <echaudro@redhat.com>
> Cc: dev@dpdk.org; Yigit, Ferruh <ferruh.yigit@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>; David Marchand <david.marchand@redhat.com>;
> stable@dpdk.org; Luca Boccassi <bluca@debian.org>; Richardson, Bruce
> <bruce.richardson@intel.com>; Stokes, Ian <ian.stokes@intel.com>; Andrzej
> Ostruszka <amo@semihalf.com>
> Subject: [PATCH v4] meter: provide experimental alias of API for old apps
> 
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
> 
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
> 
> Since experimental APIs can change or go away without notice as part of
> contract, to prevent this negative affect that may occur by maturing
> experimental API, a process update already suggested, which enables
> aliasing without forcing it:
> https://patches.dpdk.org/patch/65863/
> 

Personally, I am not convinced this is really needed.

Are there any users asking for this?

Is there any other library where this is also applied, or is librte_meter the only library?

> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
> 
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
> 
> Also following changes done to enabling aliasing:
> 
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> Updated the 'check-symbols.sh' buildtool, which was complaining that the
> symbol is in EXPERIMENTAL tag in .map file but it is not in the
> .experimental section (__rte_experimental tag is missing).
> Updated tool in a way it won't complain if the symbol in the
> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> 
> Enabled function versioning for meson build for the library.
> 
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM
> API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> 
> v2:
> * Commit log updated
> 
> v3:
> * added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
> 
> v4:
> * update script name in commit log, remove empty line
> ---
>  buildtools/check-symbols.sh                   |  3 +-
>  .../include/rte_function_versioning.h         |  9 +++
>  lib/librte_meter/meson.build                  |  1 +
>  lib/librte_meter/rte_meter.c                  | 59 ++++++++++++++++++-
>  lib/librte_meter/rte_meter_version.map        |  8 +++
>  5 files changed, 76 insertions(+), 4 deletions(-)
> 
> diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
> index 3df57c322c..e407553a34 100755
> --- a/buildtools/check-symbols.sh
> +++ b/buildtools/check-symbols.sh
> @@ -26,7 +26,8 @@ ret=0
>  for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
>  do
>  	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
> -		! grep -q "\.text\.experimental.*[[:space:]]$SYM$"
> $DUMPFILE
> +		! grep -q "\.text\.experimental.*[[:space:]]$SYM$"
> $DUMPFILE &&
> +		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
>  	then
>  		cat >&2 <<- END_OF_MESSAGE
>  		$SYM is not flagged as experimental
> diff --git a/lib/librte_eal/include/rte_function_versioning.h
> b/lib/librte_eal/include/rte_function_versioning.h
> index b9f862d295..f588f2643b 100644
> --- a/lib/librte_eal/include/rte_function_versioning.h
> +++ b/lib/librte_eal/include/rte_function_versioning.h
> @@ -46,6 +46,14 @@
>   */
>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b)
> RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
> 
> +/*
> + * VERSION_SYMBOL_EXPERIMENTAL
> + * Creates a symbol version table entry binding the symbol
> <b>@EXPERIMENTAL to the internal
> + * function name <b><e>. The macro is used when a symbol matures to
> become part of the stable ABI,
> + * to provide an alias to experimental for some time.
> + */
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver "
> RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
> +
>  /*
>   * BIND_DEFAULT_SYMBOL
>   * Creates a symbol version entry instructing the linker to bind references to
> @@ -79,6 +87,7 @@
>   * No symbol versioning in use
>   */
>  #define VERSION_SYMBOL(b, e, n)
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
>  #define __vsym
>  #define BIND_DEFAULT_SYMBOL(b, e, n)
>  #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
> index 646fd4d43f..fce0368437 100644
> --- a/lib/librte_meter/meson.build
> +++ b/lib/librte_meter/meson.build
> @@ -3,3 +3,4 @@
> 
>  sources = files('rte_meter.c')
>  headers = files('rte_meter.h')
> +use_function_versioning = true
> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
> index da01429a8b..c600b05064 100644
> --- a/lib/librte_meter/rte_meter.c
> +++ b/lib/librte_meter/rte_meter.c
> @@ -9,6 +9,7 @@
>  #include <rte_common.h>
>  #include <rte_log.h>
>  #include <rte_cycles.h>
> +#include <rte_function_versioning.h>
> 
>  #include "rte_meter.h"
> 
> @@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
>  	return 0;
>  }
> 
> -int
> -rte_meter_trtcm_rfc4115_profile_config(
> +static int
> +rte_meter_trtcm_rfc4115_profile_config_(
>  	struct rte_meter_trtcm_rfc4115_profile *p,
>  	struct rte_meter_trtcm_rfc4115_params *params)
>  {
> @@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
>  }
> 
>  int
> -rte_meter_trtcm_rfc4115_config(
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct
> rte_meter_trtcm_rfc4115_profile *p,
> +		struct rte_meter_trtcm_rfc4115_params *params),
> rte_meter_trtcm_rfc4115_profile_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_conf
> ig, _e);
> +
> +static int
> +rte_meter_trtcm_rfc4115_config_(
>  	struct rte_meter_trtcm_rfc4115 *m,
>  	struct rte_meter_trtcm_rfc4115_profile *p)
>  {
> @@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
> 
>  	return 0;
>  }
> +
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct
> rte_meter_trtcm_rfc4115 *m,
> +		 struct rte_meter_trtcm_rfc4115_profile *p),
> rte_meter_trtcm_rfc4115_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);

To me, this is a significant amount of dead code that does not add any functionality and does not bring any added value to the library for any user. I am not a build system expert, but I would definitely prefer avoiding adding any C code to the library for this purpose, and just modify the map file, would this approach be possible?

Also, very important, is this C code to be added permanently or is it added just on a temporary basis? If temporary, when is it going to be removed?

> diff --git a/lib/librte_meter/rte_meter_version.map
> b/lib/librte_meter/rte_meter_version.map
> index 2c7dadbcac..b493bcebe9 100644
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
>  	rte_meter_trtcm_rfc4115_color_blind_check;
>  	rte_meter_trtcm_rfc4115_config;
>  	rte_meter_trtcm_rfc4115_profile_config;
> +
>  } DPDK_20.0;
> +
> +EXPERIMENTAL {
> +       global:
> +
> +	rte_meter_trtcm_rfc4115_config;
> +	rte_meter_trtcm_rfc4115_profile_config;
> +};
> --
> 2.25.4

Regards,
Cristian

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-15 15:01 12%     ` [dpdk-dev] [PATCH v6] " Ray Kinsella
@ 2020-05-16 11:53  4%       ` Neil Horman
  2020-05-18 17:18  4%         ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Neil Horman @ 2020-05-16 11:53 UTC (permalink / raw)
  To: Ray Kinsella
  Cc: dev, Ferruh Yigit, Thomas Monjalon, Luca Boccassi,
	David Marchand, Bruce Richardson, Ian Stokes, Eelco Chaudron,
	Andrzej Ostruszka, Kevin Traynor, John McNamara, Marko Kovacevic,
	Cristian Dumitrescu

On Fri, May 15, 2020 at 04:01:53PM +0100, Ray Kinsella wrote:
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> 
> On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
> DPDK_20.0.1 block.
> 
> This had the affect of breaking the applications that were using these
> APIs on v19.11. Although there is no modification of the APIs and the
> action is positive and matures the APIs, the affect can be negative to
> applications.
> 
> When a maintainer is promoting an API to become part of the next major
> ABI version by removing the experimental tag. The maintainer may
> choose to offer an alias to the experimental tag, to prevent these
> breakages in future.
> 
> The following changes are made to enabling aliasing:
> 
> Updated to the abi policy and abi versioning documents.
> 
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> Updated the 'check-symbols.sh' buildtool, which was complaining that the
> symbol is in EXPERIMENTAL tag in .map file but it is not in the
> .experimental section (__rte_experimental tag is missing).
> Updated tool in a way it won't complain if the symbol in the
> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
> ---
> 
> This patch depends on "doc: fix references to bind_default_symbol".
> https://patches.dpdk.org/patch/69850/
> 
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> CC: Kevin Traynor <ktraynor@redhat.com>
> 
> v2:
> * Commit log updated
> 
> v3:
> * added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
> 
> v4:
> * update script name in commit log, remove empty line
> 
> v5:
> * incorporate policy and version doc changes
> * remove changes to librte_meter
> 
> v6:
> * clarified dependency chain includes "doc: fix references to bind_default_symbol".
> 
>  buildtools/check-symbols.sh                      |   3 +-
>  doc/guides/contributing/abi_policy.rst           |  10 ++
>  doc/guides/contributing/abi_versioning.rst       | 158 ++++++++++++++++++++++-
>  lib/librte_eal/include/rte_function_versioning.h |   9 ++
>  4 files changed, 178 insertions(+), 2 deletions(-)
> 
Acked-by: Neil Horman <nhorman@tuxdriver.com>

^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH v6] abi: provide experimental alias of API for old apps
  2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
  2020-05-15 14:36 12%     ` [dpdk-dev] [PATCH v5] abi: " Ray Kinsella
@ 2020-05-15 15:01 12%     ` Ray Kinsella
  2020-05-16 11:53  4%       ` Neil Horman
  2020-05-17 19:52  0%     ` [dpdk-dev] [PATCH v4] meter: " Dumitrescu, Cristian
  2 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-15 15:01 UTC (permalink / raw)
  To: dev
  Cc: Ferruh Yigit, Ray Kinsella, Neil Horman, Thomas Monjalon,
	Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu

From: Ferruh Yigit <ferruh.yigit@intel.com>

On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
DPDK_20.0.1 block.

This had the affect of breaking the applications that were using these
APIs on v19.11. Although there is no modification of the APIs and the
action is positive and matures the APIs, the affect can be negative to
applications.

When a maintainer is promoting an API to become part of the next major
ABI version by removing the experimental tag. The maintainer may
choose to offer an alias to the experimental tag, to prevent these
breakages in future.

The following changes are made to enabling aliasing:

Updated to the abi policy and abi versioning documents.

Created VERSION_SYMBOL_EXPERIMENTAL helper macro.

Updated the 'check-symbols.sh' buildtool, which was complaining that the
symbol is in EXPERIMENTAL tag in .map file but it is not in the
.experimental section (__rte_experimental tag is missing).
Updated tool in a way it won't complain if the symbol in the
EXPERIMENTAL tag duplicated in some other block in .map file (versioned)

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
---

This patch depends on "doc: fix references to bind_default_symbol".
https://patches.dpdk.org/patch/69850/

Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>
CC: Kevin Traynor <ktraynor@redhat.com>

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro

v4:
* update script name in commit log, remove empty line

v5:
* incorporate policy and version doc changes
* remove changes to librte_meter

v6:
* clarified dependency chain includes "doc: fix references to bind_default_symbol".

 buildtools/check-symbols.sh                      |   3 +-
 doc/guides/contributing/abi_policy.rst           |  10 ++
 doc/guides/contributing/abi_versioning.rst       | 158 ++++++++++++++++++++++-
 lib/librte_eal/include/rte_function_versioning.h |   9 ++
 4 files changed, 178 insertions(+), 2 deletions(-)

diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
index 3df57c3..e407553 100755
--- a/buildtools/check-symbols.sh
+++ b/buildtools/check-symbols.sh
@@ -26,7 +26,8 @@ ret=0
 for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
 do
 	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
-		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
+		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
+		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
 	then
 		cat >&2 <<- END_OF_MESSAGE
 		$SYM is not flagged as experimental
diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
index 86e7dd9..c33bff1 100644
--- a/doc/guides/contributing/abi_policy.rst
+++ b/doc/guides/contributing/abi_policy.rst
@@ -160,6 +160,11 @@ The requirements for changing the ABI are:
      ``experimental``, as described in the section on :ref:`Experimental APIs
      and Libraries <experimental_apis>`.

+   - In situations in which an ``experimental`` symbol has been stable for some
+     time. When promoting the symbol to become part of the next ABI version, the
+     maintainer may choose to provide an alias to the ``experimental`` tag, so
+     as not to break consuming applications.
+
 #. If a newly proposed API functionally replaces an existing one, when the new
    API becomes non-experimental, then the old one is marked with
    ``__rte_deprecated``.
@@ -318,6 +323,11 @@ not required. Though, an API should remain in experimental state for at least
 one release. Thereafter, the normal process of posting patch for review to
 mailing list can be followed.

+After the experimental tag has been formally removed, a tree/sub-tree maintainer
+may choose to offer an alias to the experimental tag so as not to break
+applications using the symbol. The alias is then dropped at the declaration of
+next major ABI version.
+
 Libraries
 ~~~~~~~~~

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7065979..27b5231 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -156,6 +156,11 @@ The macros exported are:
   ``be`` to signal that it is being used as an implementation of a particular
   version of symbol ``b``.

+* ``VERSION_SYMBOL_EXPERIMENTAL(b, e)``: Creates a symbol version table entry
+  binding versioned symbol ``b@EXPERIMENTAL`` to the internal function ``be``.
+  The macro is used when a symbol matures to become part of the stable ABI, to
+  provide an alias to experimental for some time.
+
 .. _example_abi_macro_usage:

 Examples of ABI Macro use
@@ -361,7 +366,7 @@ and a new DPDK_21 version, used by future built applications.
 .. note::

    **Before you leave**, please take care to the review the sections on
-   :ref:`Mapping static symbols <mapping_static_symbols>`, :ref:`Enabling
+   :ref:`mapping static symbols <mapping_static_symbols>`, :ref:`enabling
    versioning macros <enabling_versioning_macros>` and :ref:`ABI deprecation
    <abi_decprecation>`.

@@ -415,6 +420,157 @@ at the start of the head of the file. This will indicate to the tool-chain to
 enable the function version macros when building. There is no corresponding
 directive required for the ``make`` build system.

+.. _aliasing_experimental_symbols:
+
+Aliasing experimental symbols
+_____________________________
+
+In situations in which an ``experimental`` symbol has been stable for some time,
+and it becomes a candidate for promotion to the stable ABI. At this time, when
+promoting the symbol, maintainer may choose to provide an alias to the
+``experimental`` symbol version, so as not to break consuming applications.
+
+The process to provide an alias to ``experimental`` is similar to that, of
+:ref:`symbol visioning <example_abi_macro_usage>` described above. Assume we
+have an experimental function ``rte_acl_create`` as follows
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+In the map file, experimental symbols are listed as part of the ``experimental``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create;
+   };
+
+When we promote the symbol to the stable ABI, we simply strip the
+``rte_experimental`` annotation from the function and move the symbol from the
+``experimental`` node, to the node of the next major ABI version as follow.
+
+.. code-block:: c
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+        ...
+ }
+
+We then update the map file, adding the symbol ``rte_acl_create`` to the ``v21``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create;
+   } DPDK_20;
+
+
+Although there are strictly no guarantees or commitments associated with
+:ref:`experimental symbols <experimental_apis>`, a maintainer may wish to offer
+an alias to experimental. The process to add an alias to experimental, is
+similar to the symbol versioning process. Assuming we have an experimental
+symbol as before, we now add the symbol to both the ``experimental`` and ``v21``
+version nodes.
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+ #include <rte_function_versioning.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create_e(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
+
+ struct rte_acl_ctx *
+ rte_acl_create_v21(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
+
+
+In the map file, we map the symbol to both the experimental and ``v21`` version
+nodes.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create;
+   } DPDK_20;
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create;
+   };
+
+.. note::
+
+   Please note, similar to :ref:`symbol visioning <example_abi_macro_usage>`
+   when aliasing to experimental you will also need to take care of
+   :ref:`mapping static symbols <mapping_static_symbols>`.
+
+
 .. _abi_decprecation:

 Deprecating part of a public API
diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
index b9f862d..f588f26 100644
--- a/lib/librte_eal/include/rte_function_versioning.h
+++ b/lib/librte_eal/include/rte_function_versioning.h
@@ -47,6 +47,14 @@
 #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))

 /*
+ * VERSION_SYMBOL_EXPERIMENTAL
+ * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
+ * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
+ * to provide an alias to experimental for some time.
+ */
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
+
+/*
  * BIND_DEFAULT_SYMBOL
  * Creates a symbol version entry instructing the linker to bind references to
  * symbol <b> to the internal symbol <b><e>
@@ -79,6 +87,7 @@
  * No symbol versioning in use
  */
 #define VERSION_SYMBOL(b, e, n)
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
 #define __vsym
 #define BIND_DEFAULT_SYMBOL(b, e, n)
 #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
--
2.7.4

^ permalink raw reply	[relevance 12%]

* [dpdk-dev] [PATCH v5] abi: provide experimental alias of API for old apps
  2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
@ 2020-05-15 14:36 12%     ` Ray Kinsella
  2020-05-15 15:01 12%     ` [dpdk-dev] [PATCH v6] " Ray Kinsella
  2020-05-17 19:52  0%     ` [dpdk-dev] [PATCH v4] meter: " Dumitrescu, Cristian
  2 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-15 14:36 UTC (permalink / raw)
  To: dev
  Cc: Ferruh Yigit, Ray Kinsella, Neil Horman, Thomas Monjalon,
	Luca Boccassi, David Marchand, Bruce Richardson, Ian Stokes,
	Eelco Chaudron, Andrzej Ostruszka, Kevin Traynor, John McNamara,
	Marko Kovacevic, Cristian Dumitrescu

From: Ferruh Yigit <ferruh.yigit@intel.com>

On v20.02 some APIs matured and symbols moved from EXPERIMENTAL to
DPDK_20.0.1 block.

This had the affect of breaking the applications that were using these
APIs on v19.11. Although there is no modification of the APIs and the
action is positive and matures the APIs, the affect can be negative to
applications.

When a maintainer is promoting an API to become part of the next major
ABI version by removing the experimental tag. The maintainer may
choose to offer an alias to the experimental tag, to prevent these
breakages in future.

The following changes are made to enabling aliasing:

Updated to the abi policy and abi versioning documents.

Created VERSION_SYMBOL_EXPERIMENTAL helper macro.

Updated the 'check-symbols.sh' buildtool, which was complaining that the
symbol is in EXPERIMENTAL tag in .map file but it is not in the
.experimental section (__rte_experimental tag is missing).
Updated tool in a way it won't complain if the symbol in the
EXPERIMENTAL tag duplicated in some other block in .map file (versioned)

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
---

Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>
CC: Kevin Traynor <ktraynor@redhat.com>

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro

v4:
* update script name in commit log, remove empty line

v5:
* incorporate policy and version doc changes
* remove changes to librte_meter

 buildtools/check-symbols.sh                      |   3 +-
 doc/guides/contributing/abi_policy.rst           |  10 ++
 doc/guides/contributing/abi_versioning.rst       | 158 ++++++++++++++++++++++-
 lib/librte_eal/include/rte_function_versioning.h |   9 ++
 4 files changed, 178 insertions(+), 2 deletions(-)

diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
index 3df57c3..e407553 100755
--- a/buildtools/check-symbols.sh
+++ b/buildtools/check-symbols.sh
@@ -26,7 +26,8 @@ ret=0
 for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
 do
 	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
-		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
+		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
+		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
 	then
 		cat >&2 <<- END_OF_MESSAGE
 		$SYM is not flagged as experimental
diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
index 86e7dd9..c33bff1 100644
--- a/doc/guides/contributing/abi_policy.rst
+++ b/doc/guides/contributing/abi_policy.rst
@@ -160,6 +160,11 @@ The requirements for changing the ABI are:
      ``experimental``, as described in the section on :ref:`Experimental APIs
      and Libraries <experimental_apis>`.

+   - In situations in which an ``experimental`` symbol has been stable for some
+     time. When promoting the symbol to become part of the next ABI version, the
+     maintainer may choose to provide an alias to the ``experimental`` tag, so
+     as not to break consuming applications.
+
 #. If a newly proposed API functionally replaces an existing one, when the new
    API becomes non-experimental, then the old one is marked with
    ``__rte_deprecated``.
@@ -318,6 +323,11 @@ not required. Though, an API should remain in experimental state for at least
 one release. Thereafter, the normal process of posting patch for review to
 mailing list can be followed.

+After the experimental tag has been formally removed, a tree/sub-tree maintainer
+may choose to offer an alias to the experimental tag so as not to break
+applications using the symbol. The alias is then dropped at the declaration of
+next major ABI version.
+
 Libraries
 ~~~~~~~~~

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7065979..27b5231 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -156,6 +156,11 @@ The macros exported are:
   ``be`` to signal that it is being used as an implementation of a particular
   version of symbol ``b``.

+* ``VERSION_SYMBOL_EXPERIMENTAL(b, e)``: Creates a symbol version table entry
+  binding versioned symbol ``b@EXPERIMENTAL`` to the internal function ``be``.
+  The macro is used when a symbol matures to become part of the stable ABI, to
+  provide an alias to experimental for some time.
+
 .. _example_abi_macro_usage:

 Examples of ABI Macro use
@@ -361,7 +366,7 @@ and a new DPDK_21 version, used by future built applications.
 .. note::

    **Before you leave**, please take care to the review the sections on
-   :ref:`Mapping static symbols <mapping_static_symbols>`, :ref:`Enabling
+   :ref:`mapping static symbols <mapping_static_symbols>`, :ref:`enabling
    versioning macros <enabling_versioning_macros>` and :ref:`ABI deprecation
    <abi_decprecation>`.

@@ -415,6 +420,157 @@ at the start of the head of the file. This will indicate to the tool-chain to
 enable the function version macros when building. There is no corresponding
 directive required for the ``make`` build system.

+.. _aliasing_experimental_symbols:
+
+Aliasing experimental symbols
+_____________________________
+
+In situations in which an ``experimental`` symbol has been stable for some time,
+and it becomes a candidate for promotion to the stable ABI. At this time, when
+promoting the symbol, maintainer may choose to provide an alias to the
+``experimental`` symbol version, so as not to break consuming applications.
+
+The process to provide an alias to ``experimental`` is similar to that, of
+:ref:`symbol visioning <example_abi_macro_usage>` described above. Assume we
+have an experimental function ``rte_acl_create`` as follows
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+In the map file, experimental symbols are listed as part of the ``experimental``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create;
+   };
+
+When we promote the symbol to the stable ABI, we simply strip the
+``rte_experimental`` annotation from the function and move the symbol from the
+``experimental`` node, to the node of the next major ABI version as follow.
+
+.. code-block:: c
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+        ...
+ }
+
+We then update the map file, adding the symbol ``rte_acl_create`` to the ``v21``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create;
+   } DPDK_20;
+
+
+Although there are strictly no guarantees or commitments associated with
+:ref:`experimental symbols <experimental_apis>`, a maintainer may wish to offer
+an alias to experimental. The process to add an alias to experimental, is
+similar to the symbol versioning process. Assuming we have an experimental
+symbol as before, we now add the symbol to both the ``experimental`` and ``v21``
+version nodes.
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+ #include <rte_function_versioning.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create_e(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
+
+ struct rte_acl_ctx *
+ rte_acl_create_v21(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
+
+
+In the map file, we map the symbol to both the experimental and ``v21`` version
+nodes.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create;
+   } DPDK_20;
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create;
+   };
+
+.. note::
+
+   Please note, similar to :ref:`symbol visioning <example_abi_macro_usage>`
+   when aliasing to experimental you will also need to take care of
+   :ref:`mapping static symbols <mapping_static_symbols>`.
+
+
 .. _abi_decprecation:

 Deprecating part of a public API
diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
index b9f862d..f588f26 100644
--- a/lib/librte_eal/include/rte_function_versioning.h
+++ b/lib/librte_eal/include/rte_function_versioning.h
@@ -47,6 +47,14 @@
 #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))

 /*
+ * VERSION_SYMBOL_EXPERIMENTAL
+ * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
+ * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
+ * to provide an alias to experimental for some time.
+ */
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
+
+/*
  * BIND_DEFAULT_SYMBOL
  * Creates a symbol version entry instructing the linker to bind references to
  * symbol <b> to the internal symbol <b><e>
@@ -79,6 +87,7 @@
  * No symbol versioning in use
  */
 #define VERSION_SYMBOL(b, e, n)
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
 #define __vsym
 #define BIND_DEFAULT_SYMBOL(b, e, n)
 #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
--
2.7.4

^ permalink raw reply	[relevance 12%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-15  9:26  0%                               ` Thomas Monjalon
@ 2020-05-15 11:19  5%                                 ` Thomas Monjalon
  0 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-15 11:19 UTC (permalink / raw)
  To: techboard; +Cc: David Marchand, hemant.agrawal, Ray Kinsella, dev, nhorman

Adding a bit more definitions to better understand.

A "stable" library exports at least one symbol in the current stable ABI.
Its soname is suffixed with the current ABI version.
If the library exports no symbol in the current ABI, but has a symbol in
the next ABI, the soname is suffixed also with the current ABI version.

A "pure experimental" library exports only experimental symbols.
Its soname is suffixed with 0. and the stable ABI version.

A "pure internal" library has only internal symbols,
or no exported symbols at all, like in most PMDs.
Its soname is suffixed with the current ABI version.

An "experimental & internal" library exports experimental and internal
symbols, but none in current or next stable ABI.
We don't have such case yet.

I think the original intent was to use the suffix 0.x for libs
which export no stable ABI. But it is inconsistent currently.

Please read the options below, and give your opinion.
Thanks

15/05/2020 11:26, Thomas Monjalon:
> Now the question is: what to do in v20.11?
> This question will have to be voted in the Technical Board which voted
> the "pure experimental" versioning rule.
> We have 3 options:
> 
> a) "Pure internal" libs are versioned as "stable" libs,
> while "pure experimental" libs have version 0.x.
> It looks inconsistent and non-sense.
> 
> b) "Pure internal" libs are versioned as
> "pure experimental" libs: version 0.x.
> It makes "pure internal" libs version decreasing in 20.11.
> 
> c) Forget about the different versioning scheme,
> i.e. increase 0.x versions to x as "stable" libs.
> 
> Of course, I vote for option c.




^ permalink raw reply	[relevance 5%]

* [dpdk-dev] [PATCH v8 07/13] crypto: move internal symbols into INTERNAL section
                             ` (5 preceding siblings ...)
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 06/13] net/dpaa2: " Hemant Agrawal
@ 2020-05-15  9:47  3%         ` Hemant Agrawal
  2020-05-19 11:17  0%           ` Ray Kinsella
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 6 ++++--
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 6 ++++--
 4 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..3d863aff4d 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
 	dpaa2_sec_eventq_detach;
-
-	local: *;
 };
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..023e120516 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v8 06/13] net/dpaa2: move internal symbols into INTERNAL section
                             ` (4 preceding siblings ...)
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 05/13] net/dpaa: " Hemant Agrawal
@ 2020-05-15  9:47  3%         ` Hemant Agrawal
  2020-05-19 11:15  0%           ` Ray Kinsella
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 07/13] crypto: " Hemant Agrawal
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.h            |  2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 12 +++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..b633fdc2a8 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,9 +1,4 @@
 DPDK_20.0 {
-	global:
-
-	dpaa2_eth_eventq_attach;
-	dpaa2_eth_eventq_detach;
-
 	local: *;
 };
 
@@ -14,3 +9,10 @@ EXPERIMENTAL {
 	rte_pmd_dpaa2_set_custom_hash;
 	rte_pmd_dpaa2_set_timestamp;
 };
+
+INTERNAL {
+	global:
+
+	dpaa2_eth_eventq_attach;
+	dpaa2_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v8 05/13] net/dpaa: move internal symbols into INTERNAL section
                             ` (3 preceding siblings ...)
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-15  9:47  3%         ` Hemant Agrawal
  2020-05-19 11:14  0%           ` Ray Kinsella
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 06/13] net/dpaa2: " Hemant Agrawal
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 07/13] crypto: " Hemant Agrawal
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              | 2 ++
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 42f9469221..7b6358c394 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -63,3 +63,5 @@
 	name_regexp = ^rte_dpaa_bpid_info
 [suppress_variable]
 	name_regexp = ^rte_dpaa2_bpid_info
+[suppress_function]
+        name_regexp = ^dpaa
diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..774aa0de45 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,14 @@
 DPDK_20.0 {
 	global:
 
-	dpaa_eth_eventq_attach;
-	dpaa_eth_eventq_detach;
 	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	dpaa_eth_eventq_attach;
+	dpaa_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: move internal symbols into INTERNAL section
                             ` (2 preceding siblings ...)
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-15  9:47  3%         ` Hemant Agrawal
  2020-05-19 11:03  0%           ` Ray Kinsella
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 05/13] net/dpaa: " Hemant Agrawal
                           ` (2 subsequent siblings)
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                        | 8 ++++++++
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 6 ++++--
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index ab34302d0c..42f9469221 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,11 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_function]
+	name = rte_dpaa2_mbuf_alloc_bulk
+[suppress_variable]
+	name_regexp = ^rte_dpaa_memsegs
+[suppress_variable]
+	name_regexp = ^rte_dpaa_bpid_info
+[suppress_variable]
+	name_regexp = ^rte_dpaa2_bpid_info
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..89d7cf4957 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
 	rte_dpaa_memsegs;
-
-	local: *;
 };
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v8 03/13] bus/dpaa: move internal symbols into INTERNAL section
    2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-15  9:47  1%         ` Hemant Agrawal
  2020-05-19 10:56  0%           ` Ray Kinsella
  2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: " Hemant Agrawal
                           ` (3 subsequent siblings)
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which are not
to be exported.
rte_dpaa_mem_ptov  - static inline in the headerfile
fman_ccsr_map_fd - local shared variable.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  8 +++++-
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  8 +++---
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 85 insertions(+), 5 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 877c6d5be8..ab34302d0c 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..dcf35e4adb 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,10 +67,14 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
-
+__rte_internal
 void qman_clear_irq(void);
 
 /* Global setup */
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..53732289d3 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,8 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +17,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -87,10 +90,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v8 02/13] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-15  9:47  1%         ` Hemant Agrawal
  2020-05-19 10:00  0%           ` Ray Kinsella
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 03/13] bus/dpaa: " Hemant Agrawal
                           ` (4 subsequent siblings)
  6 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  5 +++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  7 ++++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             | 10 +++++
 drivers/bus/fslmc/mc/fsl_dpio.h               | 11 +++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  4 ++
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  2 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  8 ++++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 42 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   | 20 ++++-----
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 123 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..877c6d5be8 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..bc7c6f62d7 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -8,6 +8,7 @@
 #ifndef _FSLMC_VFIO_H_
 #define _FSLMC_VFIO_H_
 
+#include <rte_compat.h>
 #include <rte_vfio.h>
 
 /* Pathname of FSL-MC devices directory. */
@@ -41,7 +42,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..0d590a2647 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -7,6 +7,7 @@
 #ifndef __FSL_DPBP_H
 #define __FSL_DPBP_H
 
+#include <rte_compat.h>
 /*
  * Data Path Buffer Pool API
  * Contains initialization APIs and runtime control APIs for DPBP
@@ -14,6 +15,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +44,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +59,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +75,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +94,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..19328c00a0 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -5,6 +5,8 @@
 #ifndef __FSL_DPDMAI_H
 #define __FSL_DPDMAI_H
 
+#include <rte_compat.h>
+
 struct fsl_mc_io;
 
 /* Data Path DMA Interface API
@@ -23,11 +25,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +58,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +88,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +155,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +176,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +193,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..c2db76bdf8 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -7,17 +7,21 @@
 #ifndef __FSL_DPIO_H
 #define __FSL_DPIO_H
 
+#include <rte_compat.h>
+
 /* Data Path I/O Portal API
  * Contains initialization APIs and runtime control APIs for DPIO
  */
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +61,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +76,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +92,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +129,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..8764ceaed9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_DPMNG_H
 #define __FSL_DPMNG_H
 
+#include <rte_compat.h>
+
 /*
  * Management Complex General API
  * Contains general API for the Management Complex firmware
@@ -34,6 +36,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +51,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..7c0ca6b73a 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -7,6 +7,7 @@
 #ifndef __FSL_MC_CMD_H
 #define __FSL_MC_CMD_H
 
+#include <rte_compat.h>
 #include <rte_byteorder.h>
 #include <stdint.h>
 
@@ -80,6 +81,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..f0c2f9fcb3 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -1,6 +1,10 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  * Copyright (C) 2015 Freescale Semiconductor, Inc.
  */
+#ifndef _FSL_QBMAN_DEBUG_H
+#define _FSL_QBMAN_DEBUG_H
+
+#include <rte_compat.h>
 
 struct qbman_swp;
 
@@ -24,7 +28,11 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
+#endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..f820077d2b 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -7,6 +7,7 @@
 #ifndef _FSL_QBMAN_PORTAL_H
 #define _FSL_QBMAN_PORTAL_H
 
+#include <rte_compat.h>
 #include <fsl_qbman_base.h>
 
 #define SVR_LS1080A	0x87030000
@@ -117,6 +118,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +288,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +328,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +344,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +354,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +378,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +414,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +429,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +445,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +453,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +462,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +473,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +499,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +512,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +641,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +676,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +686,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +719,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +728,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +739,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +873,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +894,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +906,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +941,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +956,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +972,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +982,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1008,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1018,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1029,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1042,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1051,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1078,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1096,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1113,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1155,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1181,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1207,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..1b7a5a45e9 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,14 @@
 DPDK_20.0 {
+	local: *;
+};
+
+EXPERIMENTAL {
+	global:
+
+	rte_fslmc_vfio_mem_dmamap;
+};
+
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +21,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,15 +110,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	rte_fslmc_vfio_mem_dmamap;
 };
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-15  9:47  3%         ` Hemant Agrawal
  2020-05-19  6:43  0%           ` Hemant Agrawal
  2020-05-19  9:51  0%           ` Ray Kinsella
  2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 02/13] bus/fslmc: " Hemant Agrawal
                           ` (5 subsequent siblings)
  6 siblings, 2 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  9:47 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  6 ++++--
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..14b507ad13 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,8 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
@@ -18,6 +22,4 @@ DPDK_20.0 {
 	of_init_path;
 	of_n_addr_cells;
 	of_translate_address;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-14 17:15  0%                             ` Hemant Agrawal (OSS)
@ 2020-05-15  9:26  0%                               ` Thomas Monjalon
  2020-05-15 11:19  5%                                 ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-15  9:26 UTC (permalink / raw)
  To: David Marchand, hemant.agrawal; +Cc: Ray Kinsella, dev, neil.horman, techboard

14/05/2020 19:15, Hemant Agrawal (OSS):
> > On Thu, May 14, 2020 at 3:31 PM David Marchand
> > <david.marchand@redhat.com> wrote:
> > > On Thu, May 14, 2020 at 2:39 PM Hemant Agrawal (OSS)
> > > <hemant.agrawal@oss.nxp.com> wrote:
> > > >
> > > > [Hemant] this is working fine for pmd_dpaa but not for pmd_dpaa2
> > > >
> > > > I removed the filename_exp and introduced function based name
> > > > Now the issue is  the following warning SONAME changed from
> > > > 'librte_pmd_dpaa2.so.20.0' to 'librte_pmd_dpaa2.so.0.200.2'
> > > >
> > > > The  primary reason is that now pmd_dpaa2 has no symbol left for
> > > > 20.0 section.
> > > > Following is not helping.
> > > > [suppress_file]
> > > >         soname_regexp = ^librte_pmd_dpaa2 so, it seems for now, the
> > > > filename_exp is the only option
> > >
> > > That's interesting.
> > > Because I wondered about this point when reviewing __rte_internal.
> > > For components providing only internal symbols like components
> > > providing only experimental symbols, the build framework will select a
> > > soname with .0.200.x.

I will remind once again that I was against this rule.
Distinguishing "stable or partially stable" and "completely non-stable"
libraries is an useless complication.


> > > Here, your dpaa2 driver was seen as a stable library so far.
> > > Moving everything to internal changes this and the build framework
> > > changes the soname to non stable.
> > 
> > Looking at a v19.11 testpmd binary:
> > $ readelf -d $HOME/abi/v19.11/build-gcc-shared/usr/local/bin/dpdk-testpmd
> > |grep dpaa
> >  0x0000000000000001 (NEEDED)             Shared library:
> > [librte_bus_dpaa.so.20.0]
> >  0x0000000000000001 (NEEDED)             Shared library:
> > [librte_common_dpaax.so.20.0]
> >  0x0000000000000001 (NEEDED)             Shared library:
> > [librte_mempool_dpaa.so.20.0]
> >  0x0000000000000001 (NEEDED)             Shared library:
> > [librte_pmd_dpaa.so.20.0]
> > 
> > Changing the soname would break this.
> > 
> > > You could keep an empty DPDK_20.0 block to avoid this and the soname
> > > will be kept as is.
> 
> [Hemant] Yes, I was thinking about it but missed to make this change while sending patch. Will do it asap.
> > 
> > We will have to maintain such soname for all dpaa libraries until 20.11.

Thank you for maintaining the soname compatibility in v7.

Now the question is: what to do in v20.11?
This question will have to be voted in the Technical Board which voted
the "pure experimental" versioning rule.
We have 3 options:

a) "Pure internal" libs are versioned as "stable" libs,
while "pure experimental" libs have version 0.x.
It looks inconsistent and non-sense.

b) "Pure internal" libs are versioned as
"pure experimental" libs: version 0.x.
It makes "pure internal" libs version decreasing in 20.11.

c) Forget about the different versioning scheme,
i.e. increase 0.x versions to x as "stable" libs.

Of course, I vote for option c.



^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v7 07/13] crypto: move internal symbols into INTERNAL section
                               ` (5 preceding siblings ...)
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 06/13] net/dpaa2: " Hemant Agrawal
@ 2020-05-15  5:08  3%           ` Hemant Agrawal
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 6 ++++--
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 6 ++++--
 4 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..3d863aff4d 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
 	dpaa2_sec_eventq_detach;
-
-	local: *;
 };
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..023e120516 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v7 06/13] net/dpaa2: move internal symbols into INTERNAL section
                               ` (4 preceding siblings ...)
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 05/13] net/dpaa: " Hemant Agrawal
@ 2020-05-15  5:08  3%           ` Hemant Agrawal
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 07/13] crypto: " Hemant Agrawal
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.h            |  2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 12 +++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..b633fdc2a8 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,9 +1,4 @@
 DPDK_20.0 {
-	global:
-
-	dpaa2_eth_eventq_attach;
-	dpaa2_eth_eventq_detach;
-
 	local: *;
 };
 
@@ -14,3 +9,10 @@ EXPERIMENTAL {
 	rte_pmd_dpaa2_set_custom_hash;
 	rte_pmd_dpaa2_set_timestamp;
 };
+
+INTERNAL {
+	global:
+
+	dpaa2_eth_eventq_attach;
+	dpaa2_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v7 05/13] net/dpaa: move internal symbols into INTERNAL section
                               ` (3 preceding siblings ...)
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 04/13] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-15  5:08  3%           ` Hemant Agrawal
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 06/13] net/dpaa2: " Hemant Agrawal
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 07/13] crypto: " Hemant Agrawal
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              | 2 ++
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 42f9469221..7b6358c394 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -63,3 +63,5 @@
 	name_regexp = ^rte_dpaa_bpid_info
 [suppress_variable]
 	name_regexp = ^rte_dpaa2_bpid_info
+[suppress_function]
+        name_regexp = ^dpaa
diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..774aa0de45 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,14 @@
 DPDK_20.0 {
 	global:
 
-	dpaa_eth_eventq_attach;
-	dpaa_eth_eventq_detach;
 	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	dpaa_eth_eventq_attach;
+	dpaa_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v7 03/13] bus/dpaa: move internal symbols into INTERNAL section
    2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-15  5:08  1%           ` Hemant Agrawal
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 04/13] mempool/dpaa2: " Hemant Agrawal
                             ` (3 subsequent siblings)
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which are not
to be exported.
rte_dpaa_mem_ptov  - static inline in the headerfile
fman_ccsr_map_fd - local shared variable.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  8 +++++-
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  8 +++---
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 85 insertions(+), 5 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 877c6d5be8..ab34302d0c 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..dcf35e4adb 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,10 +67,14 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
-
+__rte_internal
 void qman_clear_irq(void);
 
 /* Global setup */
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..53732289d3 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,8 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +17,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -87,10 +90,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v7 04/13] mempool/dpaa2: move internal symbols into INTERNAL section
                               ` (2 preceding siblings ...)
  2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-15  5:08  3%           ` Hemant Agrawal
  2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 05/13] net/dpaa: " Hemant Agrawal
                             ` (2 subsequent siblings)
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                        | 8 ++++++++
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 6 ++++--
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 4 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index ab34302d0c..42f9469221 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,11 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_function]
+	name = rte_dpaa2_mbuf_alloc_bulk
+[suppress_variable]
+	name_regexp = ^rte_dpaa_memsegs
+[suppress_variable]
+	name_regexp = ^rte_dpaa_bpid_info
+[suppress_variable]
+	name_regexp = ^rte_dpaa2_bpid_info
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..89d7cf4957 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,8 +1,10 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
 	rte_dpaa_memsegs;
-
-	local: *;
 };
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v7 02/13] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-15  5:08  1%           ` Hemant Agrawal
  2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 03/13] bus/dpaa: " Hemant Agrawal
                             ` (4 subsequent siblings)
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   | 20 ++++-----
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 108 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..877c6d5be8 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..1b7a5a45e9 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,14 @@
 DPDK_20.0 {
+	local: *;
+};
+
+EXPERIMENTAL {
+	global:
+
+	rte_fslmc_vfio_mem_dmamap;
+};
+
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +21,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,15 +110,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	rte_fslmc_vfio_mem_dmamap;
 };
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v7 01/13] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-15  5:08  3%           ` Hemant Agrawal
  2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 02/13] bus/fslmc: " Hemant Agrawal
                             ` (5 subsequent siblings)
  6 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-15  5:08 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  6 ++++--
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..14b507ad13 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,8 @@
 DPDK_20.0 {
+	local: *;
+};
+
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
@@ -18,6 +22,4 @@ DPDK_20.0 {
 	of_init_path;
 	of_n_addr_cells;
 	of_translate_address;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-14 20:16  0%                   ` Mattias Rönnblom
@ 2020-05-14 21:00  0%                     ` Honnappa Nagarahalli
  0 siblings, 0 replies; 200+ results
From: Honnappa Nagarahalli @ 2020-05-14 21:00 UTC (permalink / raw)
  To: Mattias Rönnblom, Morten Brørup, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen, david.marchand, Song Zhu, Gavin Hu,
	Jeff Brownlee, Philippe Robin, Pravin Kantak, Chen, Zhaoyan,
	Honnappa Nagarahalli, nd

<snip>

> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
> 
> On 2020-05-14 10:34, Morten Brørup wrote:
> > + Added people from the related discussion regarding the ARM roadmap
> [https://protect2.fireeye.com/v1/url?k=10efdd7b-4e4f1ed2-10ef9de0-
> 86959e472243-b772fef31e4ae6af&q=1&e=e3b0051e-bb23-4a30-84c7-
> 7e5e80f83325&u=https%3A%2F%2Fmails.dpdk.org%2Farchives%2Fdev%2F20
> 20-April%2F162580.html].
> >
> >> From: Mattias Rönnblom [mailto:mattias.ronnblom@ericsson.com]
> >> Sent: Wednesday, May 13, 2020 10:17 PM
> >>
> >> On 2020-05-13 21:40, Honnappa Nagarahalli wrote:
> >>> <snip>
> >>>
> >>>>>> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11
> >> atomics
> >>>>>> On Tue, May 12, 2020 at 4:03 pm, Phil Yang
> >> <mailto:phil.yang@arm.com>
> >>>>>> wrote:
> >>>>>>
> >>>>>> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
> >>>>>>
> >>>>>>
> >>>>>> What is the purpose of having rte_atomic at all?
> >>>>>> Is this level of indirection really helping?
> >>>>>> [HONNAPPA] (not sure why this email has html format, converted to
> >>>>>> text
> >>>>>> format)
> >>>>>> I believe you meant, why not use the __atomic_xxx built-ins
> >> directly?
> >>>>>> The only reason for now is handling of
> >>>>>> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is
> >> equivalent
> >>>>>> to rte_smp_mb which has an optimized implementation for x86.
> >>>>>> According to Konstantin, the compiler does not generate optimal
> >> code.
> >>>>>> Wrapping that built-in alone is going to be confusing.
> >>>>>>
> >>>>>> The wrappers also allow us to have our own implementation using
> >>>>>> inline assembly for compilers versions that do not support C11
> >> atomic
> >>>>>> built- ins. But, I do not know if there is a need to support
> >>>>>> those
> >> versions.
> >>>>> If I recall correctly, someone mentioned that one (or more) of the
> >> aging
> >>>> enterprise Linux distributions don't include a compiler with C11
> >> atomics.
> >>>>> I think Stephen is onto something here...
> >>>>>
> >>>>> It is silly to add wrappers like this, if the only purpose is to
> >> support
> >>>> compilers and distributions that don't properly support an official
> >> C standard
> >>>> which is nearly a decade old. The quality and quantity of the DPDK
> >>>> documentation for these functions (including examples, discussions
> >> on Stack
> >>>> Overflow, etc.) will be inferior to the documentation of the
> >> standard C11
> >>>> atomics, which increases the probability of incorrect use.
> >>>>
> >>>>
> >>>> What's being used in DPDK today, and what's being wrapped here, is
> >> not
> >>>> standard C11 atomics - it's a bunch of GCC built-ins. Nothing in
> >>>> the
> >> __
> >>>> namespace is in the standard. It's reserved for the implementation
> >> (e.g.
> >>>> compiler).
> >>> I have tried to understand what it mean by 'built-ins', but I have
> >> not got a good answer. So, does it mean that the built-in function
> >> (same symbol and API interface) may not be available in another C
> >> compiler? IMO, this is what matters for DPDK.
> >>> Currently, the same built-in functions are available in GCC and
> >> Clang.
> >>
> >>
> >>   From what I understand, "built-ins" is GCC terminology for
> >> non-standard, implementation-specific intrinsic functions, built into
> >> the compiler. They all reside in the __* namespace.
> >>
> >>
> >> Since GCC is the industry standard, other compilers are likely to
> >> follow, including built-in functions.
> >>
> > Timeline:
> >
> > December 2011: The C11 standard was published
> [https://protect2.fireeye.com/v1/url?k=8e23b012-d08373bb-8e23f089-
> 86959e472243-a2babe7075f8ac38&q=1&e=e3b0051e-bb23-4a30-84c7-
> 7e5e80f83325&u=http%3A%2F%2Fwww.open-
> std.org%2Fjtc1%2Fsc22%2Fwg14%2Fwww%2Fstandards.html].
> >
> > March 2012: GCC 4.7 was released, introducing the __atomic built-ins
> [https://gcc.gnu.org/gcc-4.7/changes.html,
> https://www.gnu.org/software/gcc/gcc-4.7/].
> >
> > March 2013: GCC 4.8 was released [https://www.gnu.org/software/gcc/gcc-
> 4.8/].
> >
> > April 2014: GCC 4.9 was released, introducing C11 atomics (incl.
> <stdatomic.h>) [https://gcc.gnu.org/gcc-4.9/changes.html,
> https://www.gnu.org/software/gcc/gcc-4.9/].
> >
> > June 2014: RHEL7 was released
> > [https://access.redhat.com/articles/3078]. (RHEL7 Beta was released in
> > December 2013, which probably explains why the GA release doesn’t
> > include GCC 4.9.)
> >
> > May 2019 (i.e. one year ago): RHEL8 was released
> [https://access.redhat.com/articles/3078].
> >
> >
> > RHEL7 includes GCC 4.8 only [https://access.redhat.com/solutions/19458],
> and apparently RHEL7 has not been updated to GCC 4.9 with any of its minor
> releases.
> >
> > Should the DPDK project be stuck on "industry standard" GCC atomics,
> unable to use the decade old "official standard" C11 atomics, only because
> we want to support a six year old enterprise Linux distribution? Red Hat
> released a new enterprise version a year ago... perhaps it's time for their
> customers to upgrade, if they want to use the latest and greatest version of
> DPDK.
> 
> 
> Just to be clear - I wasn't arguing for the direct use of GCC built-ins.
> 
> 
> The GCC __atomic built-ins (called directly, or via a DPDK wrapper) do have
> some advantages over C11 atomics. One is that GCC supports 128-bit atomic
> operations, on certain architectures. <rte_atomic.h> already has a 128-bit
> compare-exchange. Also, since the GCC built-ins seem not to bother with
> architectures where atomics would be implemented by means of a lock, they
> are a little easier to use than <stdatomic.h>.
IMO, I do not think we should focus on built-ins vs APIs.

1) Built-ins are supported by both GCC and Clang today. If there is a new compiler in the future, most likely it will support these built-ins.
2) I like the fact that the built-ins always require the memory order parameter. stdatomic.h provides some APIs which do not need memory order (just like rte_atomicNN_xxx APIs). This needs us to implement checks in checkpatch script to avoid using such APIs.
3) If we need to replace the built-ins with APIs in the future, it is a simple search and replace.

If the decision to go with built-ins, turns out to be a bad decision, it can be corrected easily.

I think we should focus on the compiler not generating optimal code for __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is the main reason for these wrappers. From what I have seen, DPDK has tried to provide solutions internally for performance issues caused by compilers.
Given that we have provided 'rte_atomic128_cmp_exchange' (provided because both the compilers were not generating the 128b compare-exchange), I would say we should just provide wrapper for '__atomic_thread_fence' built-in.

> 
> 
> > Are all the other tools required for building DPDK (in the required versions)
> included in RHEL7, or do we require developers to install/upgrade any other
> tools anyway? If so, why not also GCC? DPDK can be used in a cross
> compilation environment, so we are not requiring RHEL7 users to replace
> their GCC 4.7 default compiler.
I have not used RHEL7, Intel CI uses RHEL7, may be they can answer.

> >
> >
> > Furthermore, the DPDK Documentation specifies GCC 4.9+ as a system
> requirement [https://protect2.fireeye.com/v1/url?k=339bad56-6d3b6eff-
> 339bedcd-86959e472243-cb1bf3934c202e3f&q=1&e=e3b0051e-bb23-4a30-
> 84c7-
> 7e5e80f83325&u=https%3A%2F%2Fdoc.dpdk.org%2Fguides%2Flinux_gsg%2F
> sys_reqs.html%23compilation-of-the-dpdk]. If we are stuck on GCC 4.8, the
> documentation should be updated.
This is interesting. Then the CI systems should be upgraded to use GCC 4.9+.

> >
> >
> >>>>> And if some compiler generates code that is suboptimal for a user,
> >> then it
> >>>> should be the choice of the user to either accept it or use a
> >>>> better
> >> compiler.
> >>>> Using a suboptimal compiler will not only affect the user's DPDK
> >> applications,
> >>>> but all applications developed by the user. And if he accepts it
> >>>> for
> >> his other
> >>>> applications, he will also accept it for his DPDK applications.
> >>>>> We could introduce some sort of marker or standardized comment to
> >>>> indicate when functions only exist for backwards compatibility with
> >> ancient
> >>>> compilers and similar, with a reference to documentation describing
> >> why. And
> >>>> when the documented preconditions are no longer relevant, e.g. when
> >> those
> >>>> particular enterprise Linux distributions become obsolete, these
> >> functions
> >>>> become obsolete too, and should be removed. However, getting rid of
> >>>> obsolete cruft will break the ABI. In other words: Added cruft will
> >> never be
> >>>> removed again, so think twice before adding.
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-14  8:34  0%                 ` Morten Brørup
@ 2020-05-14 20:16  0%                   ` Mattias Rönnblom
  2020-05-14 21:00  0%                     ` Honnappa Nagarahalli
  0 siblings, 1 reply; 200+ results
From: Mattias Rönnblom @ 2020-05-14 20:16 UTC (permalink / raw)
  To: Morten Brørup, Honnappa Nagarahalli, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen, david.marchand, Song Zhu, Gavin Hu,
	Jeff Brownlee, Philippe Robin, Pravin Kantak, Chen, Zhaoyan

On 2020-05-14 10:34, Morten Brørup wrote:
> + Added people from the related discussion regarding the ARM roadmap [https://protect2.fireeye.com/v1/url?k=10efdd7b-4e4f1ed2-10ef9de0-86959e472243-b772fef31e4ae6af&q=1&e=e3b0051e-bb23-4a30-84c7-7e5e80f83325&u=https%3A%2F%2Fmails.dpdk.org%2Farchives%2Fdev%2F2020-April%2F162580.html].
>
>> From: Mattias Rönnblom [mailto:mattias.ronnblom@ericsson.com]
>> Sent: Wednesday, May 13, 2020 10:17 PM
>>
>> On 2020-05-13 21:40, Honnappa Nagarahalli wrote:
>>> <snip>
>>>
>>>>>> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11
>> atomics
>>>>>> On Tue, May 12, 2020 at 4:03 pm, Phil Yang
>> <mailto:phil.yang@arm.com>
>>>>>> wrote:
>>>>>>
>>>>>> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
>>>>>>
>>>>>>
>>>>>> What is the purpose of having rte_atomic at all?
>>>>>> Is this level of indirection really helping?
>>>>>> [HONNAPPA] (not sure why this email has html format, converted to
>>>>>> text
>>>>>> format)
>>>>>> I believe you meant, why not use the __atomic_xxx built-ins
>> directly?
>>>>>> The only reason for now is handling of
>>>>>> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is
>> equivalent
>>>>>> to rte_smp_mb which has an optimized implementation for x86.
>>>>>> According to Konstantin, the compiler does not generate optimal
>> code.
>>>>>> Wrapping that built-in alone is going to be confusing.
>>>>>>
>>>>>> The wrappers also allow us to have our own implementation using
>>>>>> inline assembly for compilers versions that do not support C11
>> atomic
>>>>>> built- ins. But, I do not know if there is a need to support those
>> versions.
>>>>> If I recall correctly, someone mentioned that one (or more) of the
>> aging
>>>> enterprise Linux distributions don't include a compiler with C11
>> atomics.
>>>>> I think Stephen is onto something here...
>>>>>
>>>>> It is silly to add wrappers like this, if the only purpose is to
>> support
>>>> compilers and distributions that don't properly support an official
>> C standard
>>>> which is nearly a decade old. The quality and quantity of the DPDK
>>>> documentation for these functions (including examples, discussions
>> on Stack
>>>> Overflow, etc.) will be inferior to the documentation of the
>> standard C11
>>>> atomics, which increases the probability of incorrect use.
>>>>
>>>>
>>>> What's being used in DPDK today, and what's being wrapped here, is
>> not
>>>> standard C11 atomics - it's a bunch of GCC built-ins. Nothing in the
>> __
>>>> namespace is in the standard. It's reserved for the implementation
>> (e.g.
>>>> compiler).
>>> I have tried to understand what it mean by 'built-ins', but I have
>> not got a good answer. So, does it mean that the built-in function
>> (same symbol and API interface) may not be available in another C
>> compiler? IMO, this is what matters for DPDK.
>>> Currently, the same built-in functions are available in GCC and
>> Clang.
>>
>>
>>   From what I understand, "built-ins" is GCC terminology for
>> non-standard, implementation-specific intrinsic functions, built into
>> the compiler. They all reside in the __* namespace.
>>
>>
>> Since GCC is the industry standard, other compilers are likely to
>> follow, including built-in functions.
>>
> Timeline:
>
> December 2011: The C11 standard was published [https://protect2.fireeye.com/v1/url?k=8e23b012-d08373bb-8e23f089-86959e472243-a2babe7075f8ac38&q=1&e=e3b0051e-bb23-4a30-84c7-7e5e80f83325&u=http%3A%2F%2Fwww.open-std.org%2Fjtc1%2Fsc22%2Fwg14%2Fwww%2Fstandards.html].
>
> March 2012: GCC 4.7 was released, introducing the __atomic built-ins [https://gcc.gnu.org/gcc-4.7/changes.html, https://www.gnu.org/software/gcc/gcc-4.7/].
>
> March 2013: GCC 4.8 was released [https://www.gnu.org/software/gcc/gcc-4.8/].
>
> April 2014: GCC 4.9 was released, introducing C11 atomics (incl. <stdatomic.h>) [https://gcc.gnu.org/gcc-4.9/changes.html, https://www.gnu.org/software/gcc/gcc-4.9/].
>
> June 2014: RHEL7 was released [https://access.redhat.com/articles/3078]. (RHEL7 Beta was released in December 2013, which probably explains why the GA release doesn’t include GCC 4.9.)
>
> May 2019 (i.e. one year ago): RHEL8 was released [https://access.redhat.com/articles/3078].
>
>
> RHEL7 includes GCC 4.8 only [https://access.redhat.com/solutions/19458], and apparently RHEL7 has not been updated to GCC 4.9 with any of its minor releases.
>
> Should the DPDK project be stuck on "industry standard" GCC atomics, unable to use the decade old "official standard" C11 atomics, only because we want to support a six year old enterprise Linux distribution? Red Hat released a new enterprise version a year ago... perhaps it's time for their customers to upgrade, if they want to use the latest and greatest version of DPDK.


Just to be clear - I wasn't arguing for the direct use of GCC built-ins.


The GCC __atomic built-ins (called directly, or via a DPDK wrapper) do 
have some advantages over C11 atomics. One is that GCC supports 128-bit 
atomic operations, on certain architectures. <rte_atomic.h> already has 
a 128-bit compare-exchange. Also, since the GCC built-ins seem not to 
bother with architectures where atomics would be implemented by means of 
a lock, they are a little easier to use than <stdatomic.h>.


> Are all the other tools required for building DPDK (in the required versions) included in RHEL7, or do we require developers to install/upgrade any other tools anyway? If so, why not also GCC? DPDK can be used in a cross compilation environment, so we are not requiring RHEL7 users to replace their GCC 4.7 default compiler.
>
>
> Furthermore, the DPDK Documentation specifies GCC 4.9+ as a system requirement [https://protect2.fireeye.com/v1/url?k=339bad56-6d3b6eff-339bedcd-86959e472243-cb1bf3934c202e3f&q=1&e=e3b0051e-bb23-4a30-84c7-7e5e80f83325&u=https%3A%2F%2Fdoc.dpdk.org%2Fguides%2Flinux_gsg%2Fsys_reqs.html%23compilation-of-the-dpdk]. If we are stuck on GCC 4.8, the documentation should be updated.
>
>
>>>>> And if some compiler generates code that is suboptimal for a user,
>> then it
>>>> should be the choice of the user to either accept it or use a better
>> compiler.
>>>> Using a suboptimal compiler will not only affect the user's DPDK
>> applications,
>>>> but all applications developed by the user. And if he accepts it for
>> his other
>>>> applications, he will also accept it for his DPDK applications.
>>>>> We could introduce some sort of marker or standardized comment to
>>>> indicate when functions only exist for backwards compatibility with
>> ancient
>>>> compilers and similar, with a reference to documentation describing
>> why. And
>>>> when the documented preconditions are no longer relevant, e.g. when
>> those
>>>> particular enterprise Linux distributions become obsolete, these
>> functions
>>>> become obsolete too, and should be removed. However, getting rid of
>>>> obsolete cruft will break the ABI. In other words: Added cruft will
>> never be
>>>> removed again, so think twice before adding.



^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-14 16:28  3%                           ` David Marchand
@ 2020-05-14 17:15  0%                             ` Hemant Agrawal (OSS)
  2020-05-15  9:26  0%                               ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Hemant Agrawal (OSS) @ 2020-05-14 17:15 UTC (permalink / raw)
  To: David Marchand, Hemant Agrawal (OSS), Ray Kinsella; +Cc: dev, Thomas Monjalon

> 
> On Thu, May 14, 2020 at 3:31 PM David Marchand
> <david.marchand@redhat.com> wrote:
> >
> > On Thu, May 14, 2020 at 2:39 PM Hemant Agrawal (OSS)
> > <hemant.agrawal@oss.nxp.com> wrote:
> > >
> > > [Hemant] this is working fine for pmd_dpaa but not for pmd_dpaa2
> > >
> > > I removed the filename_exp and introduced function based name= Now
> > > the issue is  the following warning SONAME changed from
> > > 'librte_pmd_dpaa2.so.20.0' to 'librte_pmd_dpaa2.so.0.200.2'
> > >
> > > The  primary reason is that now pmd_dpaa2 has no symbol left for 20.0
> section.
> > > Following is not helping.
> > > [suppress_file]
> > >         soname_regexp = ^librte_pmd_dpaa2 so, it seems for now, the
> > > filename_exp is the only option
> >
> > That's interesting.
> > Because I wondered about this point when reviewing __rte_internal.
> > For components providing only internal symbols like components
> > providing only experimental symbols, the build framework will select a
> > soname with .0.200.x.
> >
> > Here, your dpaa2 driver was seen as a stable library so far.
> > Moving everything to internal changes this and the build framework
> > changes the soname to non stable.
> 
> Looking at a v19.11 testpmd binary:
> $ readelf -d $HOME/abi/v19.11/build-gcc-shared/usr/local/bin/dpdk-testpmd
> |grep dpaa
>  0x0000000000000001 (NEEDED)             Shared library:
> [librte_bus_dpaa.so.20.0]
>  0x0000000000000001 (NEEDED)             Shared library:
> [librte_common_dpaax.so.20.0]
>  0x0000000000000001 (NEEDED)             Shared library:
> [librte_mempool_dpaa.so.20.0]
>  0x0000000000000001 (NEEDED)             Shared library:
> [librte_pmd_dpaa.so.20.0]
> 
> Changing the soname would break this.
> 
> > You could keep an empty DPDK_20.0 block to avoid this and the soname
> > will be kept as is.

[Hemant] Yes, I was thinking about it but missed to make this change while sending patch. Will do it asap.
> 
> We will have to maintain such soname for all dpaa libraries until 20.11.
> 
> 
> --
> David Marchand


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-14 16:28  3%                           ` David Marchand
  2020-05-14 17:15  0%                             ` Hemant Agrawal (OSS)
  0 siblings, 1 reply; 200+ results
From: David Marchand @ 2020-05-14 16:28 UTC (permalink / raw)
  To: Hemant Agrawal (OSS), Ray Kinsella; +Cc: dev, Thomas Monjalon

On Thu, May 14, 2020 at 3:31 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Thu, May 14, 2020 at 2:39 PM Hemant Agrawal (OSS)
> <hemant.agrawal@oss.nxp.com> wrote:
> >
> > [Hemant] this is working fine for pmd_dpaa but not for pmd_dpaa2
> >
> > I removed the filename_exp and introduced function based name=
> > Now the issue is  the following warning
> > SONAME changed from 'librte_pmd_dpaa2.so.20.0' to 'librte_pmd_dpaa2.so.0.200.2'
> >
> > The  primary reason is that now pmd_dpaa2 has no symbol left for 20.0 section.
> > Following is not helping.
> > [suppress_file]
> >         soname_regexp = ^librte_pmd_dpaa2
> > so, it seems for now, the filename_exp is the only option
>
> That's interesting.
> Because I wondered about this point when reviewing __rte_internal.
> For components providing only internal symbols like components
> providing only experimental symbols, the build framework will select a
> soname with .0.200.x.
>
> Here, your dpaa2 driver was seen as a stable library so far.
> Moving everything to internal changes this and the build framework
> changes the soname to non stable.

Looking at a v19.11 testpmd binary:
$ readelf -d $HOME/abi/v19.11/build-gcc-shared/usr/local/bin/dpdk-testpmd
|grep dpaa
 0x0000000000000001 (NEEDED)             Shared library:
[librte_bus_dpaa.so.20.0]
 0x0000000000000001 (NEEDED)             Shared library:
[librte_common_dpaax.so.20.0]
 0x0000000000000001 (NEEDED)             Shared library:
[librte_mempool_dpaa.so.20.0]
 0x0000000000000001 (NEEDED)             Shared library:
[librte_pmd_dpaa.so.20.0]

Changing the soname would break this.

> You could keep an empty DPDK_20.0 block to avoid this and the soname
> will be kept as is.

We will have to maintain such soname for all dpaa libraries until 20.11.


-- 
David Marchand


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v4] meter: provide experimental alias of API for old apps
                       ` (2 preceding siblings ...)
  2020-05-14 11:52  4%   ` [dpdk-dev] [PATCH v3] " Ferruh Yigit
@ 2020-05-14 16:11  4%   ` Ferruh Yigit
  2020-05-15 14:36 12%     ` [dpdk-dev] [PATCH v5] abi: " Ray Kinsella
                       ` (2 more replies)
  2020-05-18 18:30  2%   ` [dpdk-dev] [PATCH v5] " Ferruh Yigit
  2020-05-19 12:16 10%   ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
  5 siblings, 3 replies; 200+ results
From: Ferruh Yigit @ 2020-05-14 16:11 UTC (permalink / raw)
  To: Ray Kinsella, Neil Horman, Cristian Dumitrescu, Eelco Chaudron
  Cc: dev, Ferruh Yigit, Thomas Monjalon, David Marchand, stable,
	Luca Boccassi, Bruce Richardson, Ian Stokes, Andrzej Ostruszka

On v20.02 some meter APIs have been matured and symbols moved from
EXPERIMENTAL to DPDK_20.0.1 block.

This can break the applications that were using these mentioned APIs on
v19.11. Although there is no modification on the APIs and the action is
positive and matures the APIs, the affect can be negative to
applications.

Since experimental APIs can change or go away without notice as part of
contract, to prevent this negative affect that may occur by maturing
experimental API, a process update already suggested, which enables
aliasing without forcing it:
https://patches.dpdk.org/patch/65863/

This patch provides aliasing by duplicating the existing and versioned
symbols as experimental.

Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
aliasing done between EXPERIMENTAL and DPDK_21.

Also following changes done to enabling aliasing:

Created VERSION_SYMBOL_EXPERIMENTAL helper macro.

Updated the 'check-symbols.sh' buildtool, which was complaining that the
symbol is in EXPERIMENTAL tag in .map file but it is not in the
.experimental section (__rte_experimental tag is missing).
Updated tool in a way it won't complain if the symbol in the
EXPERIMENTAL tag duplicated in some other block in .map file (versioned)

Enabled function versioning for meson build for the library.

Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro

v4:
* update script name in commit log, remove empty line
---
 buildtools/check-symbols.sh                   |  3 +-
 .../include/rte_function_versioning.h         |  9 +++
 lib/librte_meter/meson.build                  |  1 +
 lib/librte_meter/rte_meter.c                  | 59 ++++++++++++++++++-
 lib/librte_meter/rte_meter_version.map        |  8 +++
 5 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
index 3df57c322c..e407553a34 100755
--- a/buildtools/check-symbols.sh
+++ b/buildtools/check-symbols.sh
@@ -26,7 +26,8 @@ ret=0
 for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
 do
 	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
-		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
+		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
+		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
 	then
 		cat >&2 <<- END_OF_MESSAGE
 		$SYM is not flagged as experimental
diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
index b9f862d295..f588f2643b 100644
--- a/lib/librte_eal/include/rte_function_versioning.h
+++ b/lib/librte_eal/include/rte_function_versioning.h
@@ -46,6 +46,14 @@
  */
 #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
 
+/*
+ * VERSION_SYMBOL_EXPERIMENTAL
+ * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
+ * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
+ * to provide an alias to experimental for some time.
+ */
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
+
 /*
  * BIND_DEFAULT_SYMBOL
  * Creates a symbol version entry instructing the linker to bind references to
@@ -79,6 +87,7 @@
  * No symbol versioning in use
  */
 #define VERSION_SYMBOL(b, e, n)
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
 #define __vsym
 #define BIND_DEFAULT_SYMBOL(b, e, n)
 #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
index 646fd4d43f..fce0368437 100644
--- a/lib/librte_meter/meson.build
+++ b/lib/librte_meter/meson.build
@@ -3,3 +3,4 @@
 
 sources = files('rte_meter.c')
 headers = files('rte_meter.h')
+use_function_versioning = true
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index da01429a8b..c600b05064 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -9,6 +9,7 @@
 #include <rte_common.h>
 #include <rte_log.h>
 #include <rte_cycles.h>
+#include <rte_function_versioning.h>
 
 #include "rte_meter.h"
 
@@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 	return 0;
 }
 
-int
-rte_meter_trtcm_rfc4115_profile_config(
+static int
+rte_meter_trtcm_rfc4115_profile_config_(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
 {
@@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
 }
 
 int
-rte_meter_trtcm_rfc4115_config(
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
+		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
+
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
+
+static int
+rte_meter_trtcm_rfc4115_config_(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
 {
@@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
 
 	return 0;
 }
+
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
+		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
+
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
index 2c7dadbcac..b493bcebe9 100644
--- a/lib/librte_meter/rte_meter_version.map
+++ b/lib/librte_meter/rte_meter_version.map
@@ -20,4 +20,12 @@ DPDK_21 {
 	rte_meter_trtcm_rfc4115_color_blind_check;
 	rte_meter_trtcm_rfc4115_config;
 	rte_meter_trtcm_rfc4115_profile_config;
+
 } DPDK_20.0;
+
+EXPERIMENTAL {
+       global:
+
+	rte_meter_trtcm_rfc4115_config;
+	rte_meter_trtcm_rfc4115_profile_config;
+};
-- 
2.25.4


^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v3] meter: provide experimental alias of API for old apps
  2020-05-14 15:32  0%     ` David Marchand
  2020-05-14 15:56  0%       ` Ray Kinsella
@ 2020-05-14 16:07  0%       ` Ferruh Yigit
  1 sibling, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-14 16:07 UTC (permalink / raw)
  To: David Marchand, Ray Kinsella
  Cc: Neil Horman, Cristian Dumitrescu, Eelco Chaudron, dev,
	Thomas Monjalon, dpdk stable, Luca Boccassi, Bruce Richardson,
	Ian Stokes, Andrzej Ostruszka

On 5/14/2020 4:32 PM, David Marchand wrote:
> On Thu, May 14, 2020 at 1:52 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>
>> On v20.02 some meter APIs have been matured and symbols moved from
>> EXPERIMENTAL to DPDK_20.0.1 block.
>>
>> This can break the applications that were using these mentioned APIs on
>> v19.11. Although there is no modification on the APIs and the action is
>> positive and matures the APIs, the affect can be negative to
>> applications.
>>
>> Since experimental APIs can change or go away without notice as part of
>> contract, to prevent this negative affect that may occur by maturing
>> experimental API, a process update already suggested, which enables
>> aliasing without forcing it:
>> https://patches.dpdk.org/patch/65863/
>>
>> This patch provides aliasing by duplicating the existing and versioned
>> symbols as experimental.
>>
>> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
>> aliasing done between EXPERIMENTAL and DPDK_21.
>>
>> Also following changes done to enabling aliasing:
>>
>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> This helper (+ script update) must come with the process update: the
> macro is referenced in its v5 revision.

The macro is implementation detail, and this patch does the implementation.
There is a dependency to process update patch, but that doesn't need to define
how the macro should be.

Let me send a new version with below updates, we can discuss this more if required.

> 
> 
>>
>> Updated the 'check-experimental-syms.sh' buildtool, which was
> 
> Nit: the script name changed.
> 
> 
>> diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
>> index b9f862d295..534a8bff95 100644
>> --- a/lib/librte_eal/include/rte_function_versioning.h
>> +++ b/lib/librte_eal/include/rte_function_versioning.h
>> @@ -46,6 +46,15 @@
>>   */
>>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
>>
>> +
> 
> No need for this newline.
> 
>> +/*
>> + * VERSION_SYMBOL_EXPERIMENTAL
>> + * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
>> + * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
>> + * to provide an alias to experimental for some time.
>> + */
>> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
>> +
>>  /*
>>   * BIND_DEFAULT_SYMBOL
>>   * Creates a symbol version entry instructing the linker to bind references to
> 
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3] meter: provide experimental alias of API for old apps
  2020-05-14 15:32  0%     ` David Marchand
@ 2020-05-14 15:56  0%       ` Ray Kinsella
  2020-05-14 16:07  0%       ` Ferruh Yigit
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-14 15:56 UTC (permalink / raw)
  To: David Marchand, Ferruh Yigit
  Cc: Neil Horman, Cristian Dumitrescu, Eelco Chaudron, dev,
	Thomas Monjalon, dpdk stable, Luca Boccassi, Bruce Richardson,
	Ian Stokes, Andrzej Ostruszka



On 14/05/2020 16:32, David Marchand wrote:
> On Thu, May 14, 2020 at 1:52 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>
>> On v20.02 some meter APIs have been matured and symbols moved from
>> EXPERIMENTAL to DPDK_20.0.1 block.
>>
>> This can break the applications that were using these mentioned APIs on
>> v19.11. Although there is no modification on the APIs and the action is
>> positive and matures the APIs, the affect can be negative to
>> applications.
>>
>> Since experimental APIs can change or go away without notice as part of
>> contract, to prevent this negative affect that may occur by maturing
>> experimental API, a process update already suggested, which enables
>> aliasing without forcing it:
>> https://patches.dpdk.org/patch/65863/
>>
>> This patch provides aliasing by duplicating the existing and versioned
>> symbols as experimental.
>>
>> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
>> aliasing done between EXPERIMENTAL and DPDK_21.
>>
>> Also following changes done to enabling aliasing:
>>
>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> This helper (+ script update) must come with the process update: the
> macro is referenced in its v5 revision.

You mean you want to consolidate both into a single commit?

> 
> 
>>
>> Updated the 'check-experimental-syms.sh' buildtool, which was
> 
> Nit: the script name changed.
> 
> 
>> diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
>> index b9f862d295..534a8bff95 100644
>> --- a/lib/librte_eal/include/rte_function_versioning.h
>> +++ b/lib/librte_eal/include/rte_function_versioning.h
>> @@ -46,6 +46,15 @@
>>   */
>>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
>>
>> +
> 
> No need for this newline.
> 
>> +/*
>> + * VERSION_SYMBOL_EXPERIMENTAL
>> + * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
>> + * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
>> + * to provide an alias to experimental for some time.
>> + */
>> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
>> +
>>  /*
>>   * BIND_DEFAULT_SYMBOL
>>   * Creates a symbol version entry instructing the linker to bind references to
> 
> 

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3] meter: provide experimental alias of API for old apps
  2020-05-14 11:52  4%   ` [dpdk-dev] [PATCH v3] " Ferruh Yigit
@ 2020-05-14 15:32  0%     ` David Marchand
  2020-05-14 15:56  0%       ` Ray Kinsella
  2020-05-14 16:07  0%       ` Ferruh Yigit
  0 siblings, 2 replies; 200+ results
From: David Marchand @ 2020-05-14 15:32 UTC (permalink / raw)
  To: Ferruh Yigit, Ray Kinsella
  Cc: Neil Horman, Cristian Dumitrescu, Eelco Chaudron, dev,
	Thomas Monjalon, dpdk stable, Luca Boccassi, Bruce Richardson,
	Ian Stokes, Andrzej Ostruszka

On Thu, May 14, 2020 at 1:52 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
>
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
>
> Since experimental APIs can change or go away without notice as part of
> contract, to prevent this negative affect that may occur by maturing
> experimental API, a process update already suggested, which enables
> aliasing without forcing it:
> https://patches.dpdk.org/patch/65863/
>
> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
>
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
>
> Also following changes done to enabling aliasing:
>
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.

This helper (+ script update) must come with the process update: the
macro is referenced in its v5 revision.


>
> Updated the 'check-experimental-syms.sh' buildtool, which was

Nit: the script name changed.


> diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
> index b9f862d295..534a8bff95 100644
> --- a/lib/librte_eal/include/rte_function_versioning.h
> +++ b/lib/librte_eal/include/rte_function_versioning.h
> @@ -46,6 +46,15 @@
>   */
>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
>
> +

No need for this newline.

> +/*
> + * VERSION_SYMBOL_EXPERIMENTAL
> + * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
> + * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
> + * to provide an alias to experimental for some time.
> + */
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
> +
>  /*
>   * BIND_DEFAULT_SYMBOL
>   * Creates a symbol version entry instructing the linker to bind references to


-- 
David Marchand


^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v6 07/13] net/dpaa2: move internal symbols into INTERNAL section
                             ` (5 preceding siblings ...)
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 06/13] net/dpaa: " Hemant Agrawal
@ 2020-05-14 14:29  3%         ` Hemant Agrawal
    7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.h            |  2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 12 +++++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..b633fdc2a8 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,9 +1,4 @@
 DPDK_20.0 {
-	global:
-
-	dpaa2_eth_eventq_attach;
-	dpaa2_eth_eventq_detach;
-
 	local: *;
 };
 
@@ -14,3 +9,10 @@ EXPERIMENTAL {
 	rte_pmd_dpaa2_set_custom_hash;
 	rte_pmd_dpaa2_set_timestamp;
 };
+
+INTERNAL {
+	global:
+
+	dpaa2_eth_eventq_attach;
+	dpaa2_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v6 06/13] net/dpaa: move internal symbols into INTERNAL section
                             ` (4 preceding siblings ...)
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 05/13] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-14 14:29  3%         ` Hemant Agrawal
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 07/13] net/dpaa2: " Hemant Agrawal
    7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              | 4 +++-
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 02b7a973cb..87c0a918bc 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -64,4 +64,6 @@
 [suppress_function]
 	name = rte_dpaa2_mbuf_alloc_bulk
 [suppress_function]
-	name = rte_dpaa2_bpid_info
+	name_regexp = ^rte_dpaa2_bpid_info
+[suppress_function]
+        name_regexp = ^dpaa
diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..774aa0de45 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,14 @@
 DPDK_20.0 {
 	global:
 
-	dpaa_eth_eventq_attach;
-	dpaa_eth_eventq_detach;
 	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	dpaa_eth_eventq_attach;
+	dpaa_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v6 05/13] mempool/dpaa2: move internal symbols into INTERNAL section
                             ` (3 preceding siblings ...)
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 04/13] crypto: " Hemant Agrawal
@ 2020-05-14 14:29  3%         ` Hemant Agrawal
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 06/13] net/dpaa: " Hemant Agrawal
                           ` (2 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                        | 6 ++++++
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 2 +-
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 8db64f267d..02b7a973cb 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -59,3 +59,9 @@
 	file_name_regexp = ^librte_pmd_dpaa2_sec\.
 [suppress_file]
 	file_name_regexp = ^librte_pmd_dpaa_sec\.
+[suppress_file]
+	file_name_regexp = ^librte_mempool_dpaa\.
+[suppress_function]
+	name = rte_dpaa2_mbuf_alloc_bulk
+[suppress_function]
+	name = rte_dpaa2_bpid_info
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..142547ee38 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v6 04/13] crypto: move internal symbols into INTERNAL section
                             ` (2 preceding siblings ...)
  2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-14 14:29  3%         ` Hemant Agrawal
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 05/13] mempool/dpaa2: " Hemant Agrawal
                           ` (3 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                           | 4 ++++
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 2 +-
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 4 +---
 5 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index ab34302d0c..8db64f267d 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,7 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa2_sec\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa_sec\.
diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..aed07fb371 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,6 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v6 03/13] bus/dpaa: move internal symbols into INTERNAL section
    2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-14 14:29  1%         ` Hemant Agrawal
  2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 04/13] crypto: " Hemant Agrawal
                           ` (4 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  6 +++++
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  7 +----
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 877c6d5be8..ab34302d0c 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..30ec63a09d 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,8 +67,12 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
 
 void qman_clear_irq(void);
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..f4947fac41 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +13,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -51,7 +50,6 @@ DPDK_20.0 {
 	qm_channel_pool1;
 	qman_alloc_cgrid_range;
 	qman_alloc_pool_range;
-	qman_clear_irq;
 	qman_create_cgr;
 	qman_create_fq;
 	qman_dca_index;
@@ -87,10 +85,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v6 02/13] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-14 14:29  1%         ` Hemant Agrawal
  2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 03/13] bus/dpaa: " Hemant Agrawal
                           ` (5 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  4 +-
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..877c6d5be8 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..04e61156c3 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +11,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,7 +100,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
 
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v6 01/13] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-14 14:29  3%         ` Hemant Agrawal
  2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 02/13] bus/fslmc: " Hemant Agrawal
                           ` (6 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:29 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..ad2b2b3fec 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v5 03/13] bus/dpaa: move internal symbols into INTERNAL section
    2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-14 14:24  1%         ` Hemant Agrawal
  2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 04/13] crypto: " Hemant Agrawal
  3 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:24 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  6 +++++
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  7 +----
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 877c6d5be8..ab34302d0c 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..30ec63a09d 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,8 +67,12 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
 
 void qman_clear_irq(void);
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..f4947fac41 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +13,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -51,7 +50,6 @@ DPDK_20.0 {
 	qm_channel_pool1;
 	qman_alloc_cgrid_range;
 	qman_alloc_pool_range;
-	qman_clear_irq;
 	qman_create_cgr;
 	qman_create_fq;
 	qman_dca_index;
@@ -87,10 +85,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v5 04/13] crypto: move internal symbols into INTERNAL section
                             ` (2 preceding siblings ...)
  2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-14 14:24  3%         ` Hemant Agrawal
  3 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:24 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                           | 4 ++++
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 2 +-
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 4 +---
 5 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index ab34302d0c..8db64f267d 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,7 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa2_sec\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa_sec\.
diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..aed07fb371 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,6 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v5 02/13] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-14 14:24  1%         ` Hemant Agrawal
  2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 03/13] bus/dpaa: " Hemant Agrawal
  2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 04/13] crypto: " Hemant Agrawal
  3 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:24 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  4 +-
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..877c6d5be8 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..04e61156c3 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +11,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,7 +100,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
 
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v5 01/13] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-14 14:24  3%         ` Hemant Agrawal
  2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 02/13] bus/fslmc: " Hemant Agrawal
                           ` (2 subsequent siblings)
  3 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 14:24 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..ad2b2b3fec 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v5] doc: alias to experimental tag for stable apis
  @ 2020-05-14 13:38  9% ` Ray Kinsella
  0 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-14 13:38 UTC (permalink / raw)
  To: dev
  Cc: Ray Kinsella, Ferruh Yigit, Kevin Traynor, David Marchand,
	Neil Horman, John McNamara, Marko Kovacevic

When a maintainer is promoting an API to become part of the next major ABI
version by removing the experimental tag, possibly a few releases in
advance of the declaration of the next ABI version. The maintainer may
choose to offer an alias to the experimental tag, as removing the tag
before the declaration of the next major ABI version, would cause an ABI
breakage for applications using the API.

Signed-off-by: Ray Kinsella <mdr@ashroe.eu>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Kevin Traynor <ktraynor@redhat.com>
---
This patch depends on "doc: fix references to bind_default_symbol".
https://patches.dpdk.org/patch/69850/

v5:
 * Added section on aliasing to experimental. requested by
   Neil Horman <nhorman@tuxdriver.com>

CC: Ferruh Yigit <ferruh.yigit@intel.com>
CC: Kevin Traynor <ktraynor@redhat.com>
CC: David Marchand <david.marchand@redhat.com>

 doc/guides/contributing/abi_policy.rst     |  10 ++
 doc/guides/contributing/abi_versioning.rst | 158 ++++++++++++++++++++++++++++-
 2 files changed, 167 insertions(+), 1 deletion(-)

diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
index 86e7dd9..c33bff1 100644
--- a/doc/guides/contributing/abi_policy.rst
+++ b/doc/guides/contributing/abi_policy.rst
@@ -160,6 +160,11 @@ The requirements for changing the ABI are:
      ``experimental``, as described in the section on :ref:`Experimental APIs
      and Libraries <experimental_apis>`.

+   - In situations in which an ``experimental`` symbol has been stable for some
+     time. When promoting the symbol to become part of the next ABI version, the
+     maintainer may choose to provide an alias to the ``experimental`` tag, so
+     as not to break consuming applications.
+
 #. If a newly proposed API functionally replaces an existing one, when the new
    API becomes non-experimental, then the old one is marked with
    ``__rte_deprecated``.
@@ -318,6 +323,11 @@ not required. Though, an API should remain in experimental state for at least
 one release. Thereafter, the normal process of posting patch for review to
 mailing list can be followed.

+After the experimental tag has been formally removed, a tree/sub-tree maintainer
+may choose to offer an alias to the experimental tag so as not to break
+applications using the symbol. The alias is then dropped at the declaration of
+next major ABI version.
+
 Libraries
 ~~~~~~~~~

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7065979..4832e8f 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -156,6 +156,11 @@ The macros exported are:
   ``be`` to signal that it is being used as an implementation of a particular
   version of symbol ``b``.

+* ``VERSION_SYMBOL_EXPERIMENTAL(b, e)``: Creates a symbol version table entry
+  binding versioned symbol ``b@EXPERIMENTAL`` to the internal function ``be``.
+  The macro is used when a symbol matures to become part of the stable ABI, to
+  provide an alias to experimental for some time.
+
 .. _example_abi_macro_usage:

 Examples of ABI Macro use
@@ -361,7 +366,7 @@ and a new DPDK_21 version, used by future built applications.
 .. note::

    **Before you leave**, please take care to the review the sections on
-   :ref:`Mapping static symbols <mapping_static_symbols>`, :ref:`Enabling
+   :ref:`mapping static symbols <mapping_static_symbols>`, :ref:`enabling
    versioning macros <enabling_versioning_macros>` and :ref:`ABI deprecation
    <abi_decprecation>`.

@@ -415,6 +420,157 @@ at the start of the head of the file. This will indicate to the tool-chain to
 enable the function version macros when building. There is no corresponding
 directive required for the ``make`` build system.

+.. _aliasing_experimental_symbols:
+
+Aliasing experimental symbols
+_____________________________
+
+In situations in which an ``experimental`` symbol has been stable for some time,
+and it becomes a candidate for promotion to the stable ABI. At this time, when
+promoting the symbol, maintainer may choose to provide an alias to the
+``experimental`` symbol version, so as not to break consuming applications.
+
+The process to provide an alias to ``experimental`` is similar to that, of
+:ref:`symbol visioning <example_abi_macro_usage>` described above. Assume we
+have an experimental function ``rte_acl_create`` as follows
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+In the map file, experimental symbols are listed as part of the ``experimental``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create
+   };
+
+When we promote the symbol to the stable ABI, we simply strip the
+``rte_experimental`` annotation from the function and move the symbol from the
+``experimental`` node, to the node of the next major ABI version as follow.
+
+.. code-block:: c
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+        ...
+ }
+
+We then update the map file, adding the symbol ``rte_acl_create`` to the ``v21``
+version node.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create
+   } DPDK_20;
+
+
+Although there are strictly no guarantees or commitments associated with
+:ref:`experimental symbols <experimental_apis>`, a maintainer may wish to offer
+an alias to experimental. The process to add an alias to experimental, is
+similar to the symbol versioning process. Assuming we have an experimental
+symbol as before, we now add the symbol to both the ``experimental`` and ``v21``
+version nodes.
+
+.. code-block:: c
+
+ #include <rte_compat.h>;
+ #include <rte_function_versioning.h>;
+
+ /*
+  * Create an acl context object for apps to
+  * manipulate
+  */
+ struct rte_acl_ctx *
+ rte_acl_create(const struct rte_acl_param *param)
+ {
+ ...
+ }
+
+ __rte_experimental
+ struct rte_acl_ctx *
+ rte_acl_create_e(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
+
+ struct rte_acl_ctx *
+ rte_acl_create_v21(const struct rte_acl_param *param)
+ {
+    return rte_acl_create(param);
+ }
+ BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
+
+
+In the map file, we map the symbol to both the experimental and ``v21`` version
+nodes.
+
+.. code-block:: none
+
+   DPDK_20 {
+        global:
+        ...
+
+        local: *;
+   };
+
+   DPDK_21 {
+        global:
+
+        rte_acl_create
+   } DPDK_20;
+
+   EXPERIMENTAL {
+        global:
+
+        rte_acl_create
+   };
+
+.. note::
+
+   Please note, similar to :ref:`symbol visioning <example_abi_macro_usage>`
+   when aliasing to experimental you will also need to take care of
+   :ref:`mapping static symbols <mapping_static_symbols>`.
+
+
 .. _abi_decprecation:

 Deprecating part of a public API
--
2.7.4

^ permalink raw reply	[relevance 9%]

* [dpdk-dev] [PATCH v4 07/13] net/dpaa2: move internal symbols into INTERNAL section
                           ` (5 preceding siblings ...)
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 06/13] net/dpaa: " Hemant Agrawal
@ 2020-05-14 13:25  3%       ` Hemant Agrawal
                           ` (2 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                | 4 +++-
 drivers/net/dpaa2/dpaa2_ethdev.h            | 2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 54ac181204..d54b9675e1 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -66,4 +66,6 @@
 [suppress_function]
 	name_regexp = ^rte_dpaa2_bpid_info
 [suppress_function]
-        name_regexp = ^dpaa
\ No newline at end of file
+        name_regexp = ^dpaa
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa2\.
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..78ea74e058 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_eth_eventq_attach;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v4 06/13] net/dpaa: move internal symbols into INTERNAL section
                           ` (4 preceding siblings ...)
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 05/13] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-14 13:25  3%       ` Hemant Agrawal
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 07/13] net/dpaa2: " Hemant Agrawal
                         ` (3 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              | 4 +++-
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 +++++++--
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 02b7a973cb..54ac181204 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -64,4 +64,6 @@
 [suppress_function]
 	name = rte_dpaa2_mbuf_alloc_bulk
 [suppress_function]
-	name = rte_dpaa2_bpid_info
+	name_regexp = ^rte_dpaa2_bpid_info
+[suppress_function]
+        name_regexp = ^dpaa
\ No newline at end of file
diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..774aa0de45 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,14 @@
 DPDK_20.0 {
 	global:
 
-	dpaa_eth_eventq_attach;
-	dpaa_eth_eventq_detach;
 	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	dpaa_eth_eventq_attach;
+	dpaa_eth_eventq_detach;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v4 05/13] mempool/dpaa2: move internal symbols into INTERNAL section
                           ` (3 preceding siblings ...)
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 04/13] crypto: " Hemant Agrawal
@ 2020-05-14 13:25  3%       ` Hemant Agrawal
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 06/13] net/dpaa: " Hemant Agrawal
                         ` (4 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                        | 6 ++++++
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 2 +-
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 8db64f267d..02b7a973cb 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -59,3 +59,9 @@
 	file_name_regexp = ^librte_pmd_dpaa2_sec\.
 [suppress_file]
 	file_name_regexp = ^librte_pmd_dpaa_sec\.
+[suppress_file]
+	file_name_regexp = ^librte_mempool_dpaa\.
+[suppress_function]
+	name = rte_dpaa2_mbuf_alloc_bulk
+[suppress_function]
+	name = rte_dpaa2_bpid_info
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..142547ee38 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v4 04/13] crypto: move internal symbols into INTERNAL section
                           ` (2 preceding siblings ...)
  2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 03/13] bus/dpaa: " Hemant Agrawal
@ 2020-05-14 13:25  3%       ` Hemant Agrawal
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 05/13] mempool/dpaa2: " Hemant Agrawal
                         ` (5 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                           | 4 ++++
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 2 +-
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 4 +---
 5 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index ab34302d0c..8db64f267d 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,7 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa2_sec\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa_sec\.
diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..aed07fb371 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,6 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v4 03/13] bus/dpaa: move internal symbols into INTERNAL section
    2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 02/13] bus/fslmc: " Hemant Agrawal
@ 2020-05-14 13:25  1%       ` Hemant Agrawal
  2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 04/13] crypto: " Hemant Agrawal
                         ` (6 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  6 +++++
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  7 +----
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 877c6d5be8..ab34302d0c 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..30ec63a09d 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,8 +67,12 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
 
 void qman_clear_irq(void);
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..f4947fac41 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +13,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -51,7 +50,6 @@ DPDK_20.0 {
 	qm_channel_pool1;
 	qman_alloc_cgrid_range;
 	qman_alloc_pool_range;
-	qman_clear_irq;
 	qman_create_cgr;
 	qman_create_fq;
 	qman_dca_index;
@@ -87,10 +85,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v4 02/13] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-14 13:25  1%       ` Hemant Agrawal
  2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 03/13] bus/dpaa: " Hemant Agrawal
                         ` (7 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  4 +-
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..877c6d5be8 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..04e61156c3 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +11,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,7 +100,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
 
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v4 01/13] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-14 13:25  3%       ` Hemant Agrawal
  2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 02/13] bus/fslmc: " Hemant Agrawal
                         ` (8 subsequent siblings)
  9 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-14 13:25 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..ad2b2b3fec 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [dpdk-stable] [PATCH v2] mbuf: replace zero-length marker with unnamed union
  @ 2020-05-14 13:24  0%                         ` Kevin Traynor
  0 siblings, 0 replies; 200+ results
From: Kevin Traynor @ 2020-05-14 13:24 UTC (permalink / raw)
  To: David Marchand, Gavin Hu
  Cc: Bruce Richardson, Morten Brørup, Ferruh Yigit, dev, nd,
	thomas, jerinj, Honnappa Nagarahalli, Ruifeng Wang, Phil Yang,
	Joyce Kong, stable, Olivier MATZ, Konstantin Ananyev,
	Andrew Rybchenko

On 08/04/2020 16:22, David Marchand wrote:
> On Wed, Apr 8, 2020 at 5:05 PM Gavin Hu <Gavin.Hu@arm.com> wrote:
>>> -----Original Message-----
>>> From: Kevin Traynor <ktraynor@redhat.com>
>>> Hi Gavin, I lost track if v2 is still a candidate for merge. fwiw, it
>>> compiles without giving the zero-length-bounds warning on my system.
>>>
>>> Kevin.
>>
>> Yes,  this path alone is a candidate for merge.
> 
> This patch is not mergeable, it would trigger failures in the ABI checks.
> 

Sent
http://inbox.dpdk.org/dev/20200514131857.11966-1-ktraynor@redhat.com as
this patch was not reworked/merged.

Kevin.

> You can see in patchwork that the robot reported a warning in Travis.
> http://mails.dpdk.org/archives/test-report/2020-March/119919.html
> https://travis-ci.com/github/ovsrobot/dpdk/jobs/295652710#L4476
> 
> 
> I opened a bz to libabigail.
> https://sourceware.org/bugzilla/show_bug.cgi?id=25661
> 
> 
> Either a different solution is found, or your patch will have to deal
> with this issue (libabigail fix won't be ready soon afaik) and waive
> this.
> 
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [dpdk-stable] [PATCH v2] meter: provide experimental alias of API for old apps
  2020-05-14  8:44  4%     ` Ray Kinsella
@ 2020-05-14 11:53  0%       ` Ferruh Yigit
  0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-14 11:53 UTC (permalink / raw)
  To: Ray Kinsella, Neil Horman, Cristian Dumitrescu, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Bruce Richardson, Ian Stokes, Andrzej Ostruszka

On 5/14/2020 9:44 AM, Ray Kinsella wrote:
> 
> 
> On 13/05/2020 19:05, Ferruh Yigit wrote:
>> On v20.02 some meter APIs have been matured and symbols moved from
>> EXPERIMENTAL to DPDK_20.0.1 block.
>>
>> This can break the applications that were using these mentioned APIs on
>> v19.11. Although there is no modification on the APIs and the action is
>> positive and matures the APIs, the affect can be negative to
>> applications.
>>
>> Since experimental APIs can change or go away without notice as part of
>> contract, to prevent this negative affect that may occur by maturing
>> experimental API, a process update already suggested, which enables
>> aliasing without forcing it:
>> https://patches.dpdk.org/patch/65863/
>>
>> This patch provides aliasing by duplicating the existing and versioned
>> symbols as experimental.
>>
>> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
>> aliasing done between EXPERIMENTAL and DPDK_21.
>>
>> Also following changes done to enabling aliasing:
>>
>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>
>> Updated the 'check-experimental-syms.sh' buildtool, which was
>> complaining that the symbol is in EXPERIMENTAL tag in .map file but it
>> is not in the .experimental section (__rte_experimental tag is missing).
>> Updated tool in a way it won't complain if the symbol in the
>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>
>> Enabled function versioning for meson build for the library.
>>
>> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

<...>

>> @@ -46,6 +46,9 @@
>>   */
>>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
> 
> Please add
> 
> /*
>  * VERSION_SYMBOL_EXPERIMENTAL
>  * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
>  * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
>  * to provide an alias to experimental for some time.
>  */

done

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v3] meter: provide experimental alias of API for old apps
    2020-05-13 16:30  4%   ` Thomas Monjalon
  @ 2020-05-14 11:52  4%   ` Ferruh Yigit
  2020-05-14 15:32  0%     ` David Marchand
  2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
                     ` (2 subsequent siblings)
  5 siblings, 1 reply; 200+ results
From: Ferruh Yigit @ 2020-05-14 11:52 UTC (permalink / raw)
  To: Ray Kinsella, Neil Horman, Cristian Dumitrescu, Eelco Chaudron
  Cc: dev, Ferruh Yigit, Thomas Monjalon, David Marchand, stable,
	Luca Boccassi, Bruce Richardson, Ian Stokes, Andrzej Ostruszka

On v20.02 some meter APIs have been matured and symbols moved from
EXPERIMENTAL to DPDK_20.0.1 block.

This can break the applications that were using these mentioned APIs on
v19.11. Although there is no modification on the APIs and the action is
positive and matures the APIs, the affect can be negative to
applications.

Since experimental APIs can change or go away without notice as part of
contract, to prevent this negative affect that may occur by maturing
experimental API, a process update already suggested, which enables
aliasing without forcing it:
https://patches.dpdk.org/patch/65863/

This patch provides aliasing by duplicating the existing and versioned
symbols as experimental.

Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
aliasing done between EXPERIMENTAL and DPDK_21.

Also following changes done to enabling aliasing:

Created VERSION_SYMBOL_EXPERIMENTAL helper macro.

Updated the 'check-experimental-syms.sh' buildtool, which was
complaining that the symbol is in EXPERIMENTAL tag in .map file but it
is not in the .experimental section (__rte_experimental tag is missing).
Updated tool in a way it won't complain if the symbol in the
EXPERIMENTAL tag duplicated in some other block in .map file (versioned)

Enabled function versioning for meson build for the library.

Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Neil Horman <nhorman@tuxdriver.com>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Luca Boccassi <bluca@debian.org>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
Cc: Ian Stokes <ian.stokes@intel.com>
Cc: Eelco Chaudron <echaudro@redhat.com>
Cc: Andrzej Ostruszka <amo@semihalf.com>
Cc: Ray Kinsella <mdr@ashroe.eu>

v2:
* Commit log updated

v3:
* added suggested comment to VERSION_SYMBOL_EXPERIMENTAL macro
---
 buildtools/check-symbols.sh                   |  3 +-
 .../include/rte_function_versioning.h         | 10 ++++
 lib/librte_meter/meson.build                  |  1 +
 lib/librte_meter/rte_meter.c                  | 59 ++++++++++++++++++-
 lib/librte_meter/rte_meter_version.map        |  8 +++
 5 files changed, 77 insertions(+), 4 deletions(-)

diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
index 3df57c322c..e407553a34 100755
--- a/buildtools/check-symbols.sh
+++ b/buildtools/check-symbols.sh
@@ -26,7 +26,8 @@ ret=0
 for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
 do
 	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
-		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
+		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
+		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
 	then
 		cat >&2 <<- END_OF_MESSAGE
 		$SYM is not flagged as experimental
diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
index b9f862d295..534a8bff95 100644
--- a/lib/librte_eal/include/rte_function_versioning.h
+++ b/lib/librte_eal/include/rte_function_versioning.h
@@ -46,6 +46,15 @@
  */
 #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
 
+
+/*
+ * VERSION_SYMBOL_EXPERIMENTAL
+ * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
+ * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
+ * to provide an alias to experimental for some time.
+ */
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
+
 /*
  * BIND_DEFAULT_SYMBOL
  * Creates a symbol version entry instructing the linker to bind references to
@@ -79,6 +88,7 @@
  * No symbol versioning in use
  */
 #define VERSION_SYMBOL(b, e, n)
+#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
 #define __vsym
 #define BIND_DEFAULT_SYMBOL(b, e, n)
 #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
index 646fd4d43f..fce0368437 100644
--- a/lib/librte_meter/meson.build
+++ b/lib/librte_meter/meson.build
@@ -3,3 +3,4 @@
 
 sources = files('rte_meter.c')
 headers = files('rte_meter.h')
+use_function_versioning = true
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index da01429a8b..c600b05064 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -9,6 +9,7 @@
 #include <rte_common.h>
 #include <rte_log.h>
 #include <rte_cycles.h>
+#include <rte_function_versioning.h>
 
 #include "rte_meter.h"
 
@@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 	return 0;
 }
 
-int
-rte_meter_trtcm_rfc4115_profile_config(
+static int
+rte_meter_trtcm_rfc4115_profile_config_(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
 {
@@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
 }
 
 int
-rte_meter_trtcm_rfc4115_config(
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_s(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
+		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
+
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params);
+int
+rte_meter_trtcm_rfc4115_profile_config_e(
+	struct rte_meter_trtcm_rfc4115_profile *p,
+	struct rte_meter_trtcm_rfc4115_params *params)
+{
+	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
+
+static int
+rte_meter_trtcm_rfc4115_config_(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
 {
@@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
 
 	return 0;
 }
+
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
+MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
+		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
+
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p);
+int
+rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
+	struct rte_meter_trtcm_rfc4115_profile *p)
+{
+	return rte_meter_trtcm_rfc4115_config_(m, p);
+}
+VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
index 2c7dadbcac..b493bcebe9 100644
--- a/lib/librte_meter/rte_meter_version.map
+++ b/lib/librte_meter/rte_meter_version.map
@@ -20,4 +20,12 @@ DPDK_21 {
 	rte_meter_trtcm_rfc4115_color_blind_check;
 	rte_meter_trtcm_rfc4115_config;
 	rte_meter_trtcm_rfc4115_profile_config;
+
 } DPDK_20.0;
+
+EXPERIMENTAL {
+       global:
+
+	rte_meter_trtcm_rfc4115_config;
+	rte_meter_trtcm_rfc4115_profile_config;
+};
-- 
2.25.4


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] DPDK Release Status Meeting 14/05/2020
@ 2020-05-14 11:13  4% Ferruh Yigit
  0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-14 11:13 UTC (permalink / raw)
  To: dpdk-dev; +Cc: Thomas Monjalon

Minutes 14 May 2020
-------------------

Agenda:
* Release Dates
* -rc2 status
* Subtrees
* Opens

Participants:
* Arm
* Debian/Microsoft
* Intel
* Mellanox
* Red Hat


Release Dates
-------------

* v20.05 dates:
  * -rc2  is released on Tuesday, 12 May
    * https://mails.dpdk.org/archives/dev/2020-May/167394.html
  * -rc3			Friday 18 May 2020
  * -rc4			Thursday 21 May 2020
  * Release pushed to		*Monday 25 May 2020*

* v20.08 proposal dates, please comment:
  * Proposal/V1:		Tuesday, 16 June 2020
  * Integration/Merge/RC1:	Tuesday, 14 July 2020
  * Release:			Friday, 7 August 2020

  * Please send roadmap for the release


-rc2 status
-----------

* Intel sent a -rc2 test report, majority of testing completed, no critical
  issue
  * https://mails.dpdk.org/archives/dev/2020-May/167715.html


Subtrees
--------

* main
  * Looking patchsets adding __rte_internal to common folder
    * This is good to prevent false positives in ABI and document intention
  * ABI fix for matured API not merged, discussion going on in the mail list
    * OvS is using it but not critical for OvS
    * Blocking some test cases
  * There are couple of coverity fixes
  * Some documentation
    * Good time for deprecation notices
  * Thomas is looking compilation patches and Makefile deprecation
  * gcc10
    * Akhil's fix for crypto looks good, can replace temporary solution
    * Gavin has patch for mbuf, but this stage can be late/risky for complex fix
      * At this stage we can go with disabling warning as temporary solution
    * Ferruh is getting a warning on hash too, will share it
  * We should consider python2 deprecation
    * A deprecation notice already merged
      * https://patches.dpdk.org/patch/65828/

* next-net
  * Some patches merged and sub-trees pulled for -rc3
  * HW rings allocation patch is in backlog, ethdev patch is internal and can go
    in -rc3 but there a few things to clarify, not sure if it will make -rc3

* next-crypto
  * No update

* next-eventdev
  * No update

* next-virtio
  * 4 fixes in the queue, pull request can be ready today
  * Mellanox vdpa patchset postponed, it introduces new APIs
  * More reviews would help
  * Maxime will have less time next month,  will sync with Xiaolong

* next-net-intel
  * 10 fixes in backlog
  * fm10k patchset postponed to next release

* next-net-mlx
  * 10-15 fixes are expected


Opens
-----

* Bugzilla is not discussed for a while
  * After issues assigned, there is not much to do for management
  * It can be good to get list of critical issues offline

* Patchwork hit 70K patches, Hemant/Nipun is the winner :)
  * https://mails.dpdk.org/archives/dev/2020-May/167125.html



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 Thursdays at 8:30 UTC. If you wish to attend just
send an email to "John McNamara <john.mcnamara@intel.com>" for the invite.

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-14  7:13  3%         ` Ray Kinsella
@ 2020-05-14  9:53  0%           ` Hemant Agrawal (OSS)
    0 siblings, 1 reply; 200+ results
From: Hemant Agrawal (OSS) @ 2020-05-14  9:53 UTC (permalink / raw)
  To: Ray Kinsella, Hemant Agrawal (OSS); +Cc: dev

> Hi Hemant,
> 
> So validate_abi.sh has been somewhat deprecated - it may be removed in
> future.
> To run the libabigail abi checks, you need to run the magic command.
> 
> DPDK_ABI_REF_DIR=/build/dpdk/reference/ DPDK_ABI_REF_VERSION=v20.02
> ./devtools/test-meson-builds.sh
> 
> DPDK_ABI_REF_DIR - needs an absolute path, for reasons that are still unclear
> to me.
> DPDK_ABI_REF_VERSION - you need to use the last DPDK release.

[Hemant] Thanks it worked  for me. It is not showing any error for the changes in this patchset.

Regards,
Hemant

> 
> Thanks,
> 
> Ray K
> 
> On 13/05/2020 15:06, Hemant Agrawal (OSS) wrote:
> > Hi Ray,
> > 	I could not find validate_abi using libabigail.abignore.  Am I missing
> something.
> > Though check_abi.sh uses it.
> >
> > When I am checking with validate_abi.sh, I still see warnings.
> >
> > Regards,
> > Hemant
> >
> >> -----Original Message-----
> >> From: Hemant Agrawal <hemant.agrawal@nxp.com>
> >> Sent: Wednesday, May 13, 2020 6:58 PM
> >> To: dev@dpdk.org; david.marchand@redhat.com; mdr@ashroe.eu
> >> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>
> >> Subject: [PATCH v3 01/12] common/dpaax: move internal symbols into
> >> INTERNAL section
> >>
> >> This patch moves the internal symbols to INTERNAL sections so that
> >> any change in them is not reported as ABI breakage.
> >>
> >> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> >> ---
> >>  devtools/libabigail.abignore                      |  3 +++
> >>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
> >>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
> >>  drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
> >>  4 files changed, 23 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/devtools/libabigail.abignore
> >> b/devtools/libabigail.abignore index
> >> c9ee73cb3c..b1488d5549 100644
> >> --- a/devtools/libabigail.abignore
> >> +++ b/devtools/libabigail.abignore
> >> @@ -48,3 +48,6 @@
> >>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
> >> [suppress_variable]
> >>          name = rte_crypto_aead_algorithm_strings
> >> +; Ignore moving DPAAx stable functions to INTERNAL tag [suppress_file]
> >> +	file_name_regexp = ^librte_common_dpaax\.
> >> diff --git a/drivers/common/dpaax/dpaa_of.h
> >> b/drivers/common/dpaax/dpaa_of.h index 960b421766..38d91a1afe
> 100644
> >> --- a/drivers/common/dpaax/dpaa_of.h
> >> +++ b/drivers/common/dpaax/dpaa_of.h
> >> @@ -24,6 +24,7 @@
> >>  #include <limits.h>
> >>  #include <rte_common.h>
> >>  #include <dpaa_list.h>
> >> +#include <rte_compat.h>
> >>
> >>  #ifndef OF_INIT_DEFAULT_PATH
> >>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
> >> @@ -102,6 +103,7 @@ struct dt_file {
> >>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];  };
> >>
> >> +__rte_internal
> >>  const struct device_node *of_find_compatible_node(
> >>  					const struct device_node *from,
> >>  					const char *type __rte_unused,
> >> @@ -113,32 +115,44 @@ const struct device_node
> >> *of_find_compatible_node(
> >>  		dev_node != NULL; \
> >>  		dev_node = of_find_compatible_node(dev_node, type,
> >> compatible))
> >>
> >> +__rte_internal
> >>  const void *of_get_property(const struct device_node *from, const
> >> char *name,
> >>  			    size_t *lenp) __attribute__((nonnull(2)));
> >> +__rte_internal
> >>  bool of_device_is_available(const struct device_node *dev_node);
> >>
> >> +
> >> +__rte_internal
> >>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
> >>
> >> +__rte_internal
> >>  const struct device_node *of_get_parent(const struct device_node
> >> *dev_node);
> >>
> >> +__rte_internal
> >>  const struct device_node *of_get_next_child(const struct device_node
> >> *dev_node,
> >>  					    const struct device_node *prev);
> >>
> >> +__rte_internal
> >>  const void *of_get_mac_address(const struct device_node *np);
> >>
> >>  #define for_each_child_node(parent, child) \
> >>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
> >>  			child = of_get_next_child(parent, child))
> >>
> >> +
> >> +__rte_internal
> >>  uint32_t of_n_addr_cells(const struct device_node *dev_node);
> >> uint32_t of_n_size_cells(const struct device_node *dev_node);
> >>
> >> +__rte_internal
> >>  const uint32_t *of_get_address(const struct device_node *dev_node,
> >> size_t idx,
> >>  			       uint64_t *size, uint32_t *flags);
> >>
> >> +__rte_internal
> >>  uint64_t of_translate_address(const struct device_node *dev_node,
> >>  			      const uint32_t *addr) __attribute__((nonnull));
> >>
> >> +__rte_internal
> >>  bool of_device_is_compatible(const struct device_node *dev_node,
> >>  			     const char *compatible);
> >>
> >> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct
> >> device_node *dev_node,
> >>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config
> >> layers, etc.
> >>   * The path should usually be "/proc/device-tree".
> >>   */
> >> +__rte_internal
> >>  int of_init_path(const char *dt_path);
> >>
> >>  /* of_finish() allows a controlled tear-down of the device-tree
> >> layer, eg. if a diff --git a/drivers/common/dpaax/dpaax_iova_table.h
> >> b/drivers/common/dpaax/dpaax_iova_table.h
> >> index fc3b9e7a8f..230fba8ba0 100644
> >> --- a/drivers/common/dpaax/dpaax_iova_table.h
> >> +++ b/drivers/common/dpaax/dpaax_iova_table.h
> >> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table
> >> *dpaax_iova_table_p; #define DPAAX_MEM_SPLIT_MASK_OFF
> >> (DPAAX_MEM_SPLIT - 1) /**< Offset */
> >>
> >>  /* APIs exposed */
> >> +__rte_internal
> >>  int dpaax_iova_table_populate(void);
> >> +__rte_internal
> >>  void dpaax_iova_table_depopulate(void);
> >> +__rte_internal
> >>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t
> >> length);
> >> +__rte_internal
> >>  void dpaax_iova_table_dump(void);
> >>
> >>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr)
> >> __rte_hot; diff --git
> >> a/drivers/common/dpaax/rte_common_dpaax_version.map
> >> b/drivers/common/dpaax/rte_common_dpaax_version.map
> >> index f72eba761d..ad2b2b3fec 100644
> >> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
> >> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
> >> @@ -1,4 +1,4 @@
> >> -DPDK_20.0 {
> >> +INTERNAL {
> >>  	global:
> >>
> >>  	dpaax_iova_table_depopulate;
> >> --
> >> 2.17.1
> >

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] DPDK-20.05 RC2 day3 quick report
@ 2020-05-14  9:00  3% Peng, Yuan
  0 siblings, 0 replies; 200+ results
From: Peng, Yuan @ 2020-05-14  9:00 UTC (permalink / raw)
  To: dev

DPDK-20.05 RC2 day3 quick report

  *   Totally create ~400+ new test cases for DPDK20.05 new features.
  *   Totally 10207 cases, execution percentage is about 97%, pass rate is about 92%, 2 new issues are found till now, no critical issue new found.
  *   Checked daily build, all pass.
  *   Checked Basic NIC PMD(i40e, ixgbe, ice) PF & VF regression, new found 1 PF issue.
  *   Checked virtio regression test, 1 bug is found.
  *   Checked cryptodev and compressdev regression, no new issus found so far.
  *   Checked NIC performance, no new issue found so far.
  *   Checked ABI test, no new issue found so far.
  *   Checked 20.05 new features: no new issue found so far.

Thank you.
Yuan.


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v2] meter: provide experimental alias of API for old apps
  @ 2020-05-14  8:44  4%     ` Ray Kinsella
  2020-05-14 11:53  0%       ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-14  8:44 UTC (permalink / raw)
  To: Ferruh Yigit, Neil Horman, Cristian Dumitrescu, Eelco Chaudron
  Cc: dev, Thomas Monjalon, David Marchand, stable, Luca Boccassi,
	Bruce Richardson, Ian Stokes, Andrzej Ostruszka



On 13/05/2020 19:05, Ferruh Yigit wrote:
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
> 
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
> 
> Since experimental APIs can change or go away without notice as part of
> contract, to prevent this negative affect that may occur by maturing
> experimental API, a process update already suggested, which enables
> aliasing without forcing it:
> https://patches.dpdk.org/patch/65863/
> 
> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
> 
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
> 
> Also following changes done to enabling aliasing:
> 
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> Updated the 'check-experimental-syms.sh' buildtool, which was
> complaining that the symbol is in EXPERIMENTAL tag in .map file but it
> is not in the .experimental section (__rte_experimental tag is missing).
> Updated tool in a way it won't complain if the symbol in the
> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> 
> Enabled function versioning for meson build for the library.
> 
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
> 
> v2:
> * Commit log updated
> ---
>  buildtools/check-symbols.sh                   |  3 +-
>  .../include/rte_function_versioning.h         |  4 ++
>  lib/librte_meter/meson.build                  |  1 +
>  lib/librte_meter/rte_meter.c                  | 59 ++++++++++++++++++-
>  lib/librte_meter/rte_meter_version.map        |  8 +++
>  5 files changed, 71 insertions(+), 4 deletions(-)
> 
> diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
> index 3df57c322c..e407553a34 100755
> --- a/buildtools/check-symbols.sh
> +++ b/buildtools/check-symbols.sh
> @@ -26,7 +26,8 @@ ret=0
>  for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
>  do
>  	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
> -		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
> +		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
> +		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
>  	then
>  		cat >&2 <<- END_OF_MESSAGE
>  		$SYM is not flagged as experimental
> diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
> index b9f862d295..22ec5f9424 100644
> --- a/lib/librte_eal/include/rte_function_versioning.h
> +++ b/lib/librte_eal/include/rte_function_versioning.h
> @@ -46,6 +46,9 @@
>   */
>  #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))

Please add

/*
 * VERSION_SYMBOL_EXPERIMENTAL
 * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
 * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
 * to provide an alias to experimental for some time.
 */

I will take care of the updates to doc/guides/contributing/abi*.rst

> +
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
> +
>  /*
>   * BIND_DEFAULT_SYMBOL
>   * Creates a symbol version entry instructing the linker to bind references to
> @@ -79,6 +82,7 @@
>   * No symbol versioning in use
>   */
>  #define VERSION_SYMBOL(b, e, n)
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
>  #define __vsym
>  #define BIND_DEFAULT_SYMBOL(b, e, n)
>  #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
> index 646fd4d43f..fce0368437 100644
> --- a/lib/librte_meter/meson.build
> +++ b/lib/librte_meter/meson.build
> @@ -3,3 +3,4 @@
>  
>  sources = files('rte_meter.c')
>  headers = files('rte_meter.h')
> +use_function_versioning = true
> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
> index da01429a8b..c600b05064 100644
> --- a/lib/librte_meter/rte_meter.c
> +++ b/lib/librte_meter/rte_meter.c
> @@ -9,6 +9,7 @@
>  #include <rte_common.h>
>  #include <rte_log.h>
>  #include <rte_cycles.h>
> +#include <rte_function_versioning.h>
>  
>  #include "rte_meter.h"
>  
> @@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
>  	return 0;
>  }
>  
> -int
> -rte_meter_trtcm_rfc4115_profile_config(
> +static int
> +rte_meter_trtcm_rfc4115_profile_config_(
>  	struct rte_meter_trtcm_rfc4115_profile *p,
>  	struct rte_meter_trtcm_rfc4115_params *params)
>  {
> @@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
>  }
>  
>  int
> -rte_meter_trtcm_rfc4115_config(
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_s(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
> +		struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> +	struct rte_meter_trtcm_rfc4115_profile *p,
> +	struct rte_meter_trtcm_rfc4115_params *params)
> +{
> +	return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
> +
> +static int
> +rte_meter_trtcm_rfc4115_config_(
>  	struct rte_meter_trtcm_rfc4115 *m,
>  	struct rte_meter_trtcm_rfc4115_profile *p)
>  {
> @@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
>  
>  	return 0;
>  }
> +
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
> +		 struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> +	struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> +	return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
> diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
> index 2c7dadbcac..b493bcebe9 100644
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
>  	rte_meter_trtcm_rfc4115_color_blind_check;
>  	rte_meter_trtcm_rfc4115_config;
>  	rte_meter_trtcm_rfc4115_profile_config;
> +
>  } DPDK_20.0;
> +
> +EXPERIMENTAL {
> +       global:
> +
> +	rte_meter_trtcm_rfc4115_config;
> +	rte_meter_trtcm_rfc4115_profile_config;
> +};
> 

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-13 20:17  0%               ` Mattias Rönnblom
@ 2020-05-14  8:34  0%                 ` Morten Brørup
  2020-05-14 20:16  0%                   ` Mattias Rönnblom
  0 siblings, 1 reply; 200+ results
From: Morten Brørup @ 2020-05-14  8:34 UTC (permalink / raw)
  To: Mattias Rönnblom, Honnappa Nagarahalli, Stephen Hemminger,
	Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen, david.marchand, Song Zhu, Gavin Hu,
	Jeff Brownlee, Philippe Robin, Pravin Kantak, Chen, Zhaoyan

+ Added people from the related discussion regarding the ARM roadmap [https://mails.dpdk.org/archives/dev/2020-April/162580.html].

> From: Mattias Rönnblom [mailto:mattias.ronnblom@ericsson.com]
> Sent: Wednesday, May 13, 2020 10:17 PM
> 
> On 2020-05-13 21:40, Honnappa Nagarahalli wrote:
> > <snip>
> >
> >>>> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11
> atomics
> >>>>
> >>>> On Tue, May 12, 2020 at 4:03 pm, Phil Yang
> <mailto:phil.yang@arm.com>
> >>>> wrote:
> >>>>
> >>>> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
> >>>>
> >>>>
> >>>> What is the purpose of having rte_atomic at all?
> >>>> Is this level of indirection really helping?
> >>>> [HONNAPPA] (not sure why this email has html format, converted to
> >>>> text
> >>>> format)
> >>>> I believe you meant, why not use the __atomic_xxx built-ins
> directly?
> >>>> The only reason for now is handling of
> >>>> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is
> equivalent
> >>>> to rte_smp_mb which has an optimized implementation for x86.
> >>>> According to Konstantin, the compiler does not generate optimal
> code.
> >>>> Wrapping that built-in alone is going to be confusing.
> >>>>
> >>>> The wrappers also allow us to have our own implementation using
> >>>> inline assembly for compilers versions that do not support C11
> atomic
> >>>> built- ins. But, I do not know if there is a need to support those
> versions.
> >>> If I recall correctly, someone mentioned that one (or more) of the
> aging
> >> enterprise Linux distributions don't include a compiler with C11
> atomics.
> >>> I think Stephen is onto something here...
> >>>
> >>> It is silly to add wrappers like this, if the only purpose is to
> support
> >> compilers and distributions that don't properly support an official
> C standard
> >> which is nearly a decade old. The quality and quantity of the DPDK
> >> documentation for these functions (including examples, discussions
> on Stack
> >> Overflow, etc.) will be inferior to the documentation of the
> standard C11
> >> atomics, which increases the probability of incorrect use.
> >>
> >>
> >> What's being used in DPDK today, and what's being wrapped here, is
> not
> >> standard C11 atomics - it's a bunch of GCC built-ins. Nothing in the
> __
> >> namespace is in the standard. It's reserved for the implementation
> (e.g.
> >> compiler).
> > I have tried to understand what it mean by 'built-ins', but I have
> not got a good answer. So, does it mean that the built-in function
> (same symbol and API interface) may not be available in another C
> compiler? IMO, this is what matters for DPDK.
> > Currently, the same built-in functions are available in GCC and
> Clang.
> 
> 
>  From what I understand, "built-ins" is GCC terminology for
> non-standard, implementation-specific intrinsic functions, built into
> the compiler. They all reside in the __* namespace.
> 
> 
> Since GCC is the industry standard, other compilers are likely to
> follow, including built-in functions.
> 

Timeline:

December 2011: The C11 standard was published [http://www.open-std.org/jtc1/sc22/wg14/www/standards.html].

March 2012: GCC 4.7 was released, introducing the __atomic built-ins [https://gcc.gnu.org/gcc-4.7/changes.html, https://www.gnu.org/software/gcc/gcc-4.7/].

March 2013: GCC 4.8 was released [https://www.gnu.org/software/gcc/gcc-4.8/].

April 2014: GCC 4.9 was released, introducing C11 atomics (incl. <stdatomic.h>) [https://gcc.gnu.org/gcc-4.9/changes.html, https://www.gnu.org/software/gcc/gcc-4.9/].

June 2014: RHEL7 was released [https://access.redhat.com/articles/3078]. (RHEL7 Beta was released in December 2013, which probably explains why the GA release doesn’t include GCC 4.9.)

May 2019 (i.e. one year ago): RHEL8 was released [https://access.redhat.com/articles/3078].


RHEL7 includes GCC 4.8 only [https://access.redhat.com/solutions/19458], and apparently RHEL7 has not been updated to GCC 4.9 with any of its minor releases.

Should the DPDK project be stuck on "industry standard" GCC atomics, unable to use the decade old "official standard" C11 atomics, only because we want to support a six year old enterprise Linux distribution? Red Hat released a new enterprise version a year ago... perhaps it's time for their customers to upgrade, if they want to use the latest and greatest version of DPDK.

Are all the other tools required for building DPDK (in the required versions) included in RHEL7, or do we require developers to install/upgrade any other tools anyway? If so, why not also GCC? DPDK can be used in a cross compilation environment, so we are not requiring RHEL7 users to replace their GCC 4.7 default compiler.


Furthermore, the DPDK Documentation specifies GCC 4.9+ as a system requirement [https://doc.dpdk.org/guides/linux_gsg/sys_reqs.html#compilation-of-the-dpdk]. If we are stuck on GCC 4.8, the documentation should be updated.


> >>
> >>> And if some compiler generates code that is suboptimal for a user,
> then it
> >> should be the choice of the user to either accept it or use a better
> compiler.
> >> Using a suboptimal compiler will not only affect the user's DPDK
> applications,
> >> but all applications developed by the user. And if he accepts it for
> his other
> >> applications, he will also accept it for his DPDK applications.
> >>> We could introduce some sort of marker or standardized comment to
> >> indicate when functions only exist for backwards compatibility with
> ancient
> >> compilers and similar, with a reference to documentation describing
> why. And
> >> when the documented preconditions are no longer relevant, e.g. when
> those
> >> particular enterprise Linux distributions become obsolete, these
> functions
> >> become obsolete too, and should be removed. However, getting rid of
> >> obsolete cruft will break the ABI. In other words: Added cruft will
> never be
> >> removed again, so think twice before adding.

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-13 14:06  0%       ` Hemant Agrawal (OSS)
@ 2020-05-14  7:13  3%         ` Ray Kinsella
  2020-05-14  9:53  0%           ` Hemant Agrawal (OSS)
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-14  7:13 UTC (permalink / raw)
  To: Hemant Agrawal (OSS); +Cc: dev

Hi Hemant,

So validate_abi.sh has been somewhat deprecated - it may be removed in future.
To run the libabigail abi checks, you need to run the magic command.

DPDK_ABI_REF_DIR=/build/dpdk/reference/ DPDK_ABI_REF_VERSION=v20.02 ./devtools/test-meson-builds.sh

DPDK_ABI_REF_DIR - needs an absolute path, for reasons that are still unclear to me. 
DPDK_ABI_REF_VERSION - you need to use the last DPDK release.

Thanks, 

Ray K

On 13/05/2020 15:06, Hemant Agrawal (OSS) wrote:
> Hi Ray,
> 	I could not find validate_abi using libabigail.abignore.  Am I missing something. 
> Though check_abi.sh uses it. 
> 
> When I am checking with validate_abi.sh, I still see warnings.
> 
> Regards,
> Hemant
> 
>> -----Original Message-----
>> From: Hemant Agrawal <hemant.agrawal@nxp.com>
>> Sent: Wednesday, May 13, 2020 6:58 PM
>> To: dev@dpdk.org; david.marchand@redhat.com; mdr@ashroe.eu
>> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>
>> Subject: [PATCH v3 01/12] common/dpaax: move internal symbols into
>> INTERNAL section
>>
>> This patch moves the internal symbols to INTERNAL sections so that any
>> change in them is not reported as ABI breakage.
>>
>> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
>> ---
>>  devtools/libabigail.abignore                      |  3 +++
>>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>>  drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
>>  4 files changed, 23 insertions(+), 1 deletion(-)
>>
>> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index
>> c9ee73cb3c..b1488d5549 100644
>> --- a/devtools/libabigail.abignore
>> +++ b/devtools/libabigail.abignore
>> @@ -48,3 +48,6 @@
>>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
>> [suppress_variable]
>>          name = rte_crypto_aead_algorithm_strings
>> +; Ignore moving DPAAx stable functions to INTERNAL tag [suppress_file]
>> +	file_name_regexp = ^librte_common_dpaax\.
>> diff --git a/drivers/common/dpaax/dpaa_of.h
>> b/drivers/common/dpaax/dpaa_of.h index 960b421766..38d91a1afe 100644
>> --- a/drivers/common/dpaax/dpaa_of.h
>> +++ b/drivers/common/dpaax/dpaa_of.h
>> @@ -24,6 +24,7 @@
>>  #include <limits.h>
>>  #include <rte_common.h>
>>  #include <dpaa_list.h>
>> +#include <rte_compat.h>
>>
>>  #ifndef OF_INIT_DEFAULT_PATH
>>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
>> @@ -102,6 +103,7 @@ struct dt_file {
>>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];
>>  };
>>
>> +__rte_internal
>>  const struct device_node *of_find_compatible_node(
>>  					const struct device_node *from,
>>  					const char *type __rte_unused,
>> @@ -113,32 +115,44 @@ const struct device_node
>> *of_find_compatible_node(
>>  		dev_node != NULL; \
>>  		dev_node = of_find_compatible_node(dev_node, type,
>> compatible))
>>
>> +__rte_internal
>>  const void *of_get_property(const struct device_node *from, const char
>> *name,
>>  			    size_t *lenp) __attribute__((nonnull(2)));
>> +__rte_internal
>>  bool of_device_is_available(const struct device_node *dev_node);
>>
>> +
>> +__rte_internal
>>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
>>
>> +__rte_internal
>>  const struct device_node *of_get_parent(const struct device_node
>> *dev_node);
>>
>> +__rte_internal
>>  const struct device_node *of_get_next_child(const struct device_node
>> *dev_node,
>>  					    const struct device_node *prev);
>>
>> +__rte_internal
>>  const void *of_get_mac_address(const struct device_node *np);
>>
>>  #define for_each_child_node(parent, child) \
>>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
>>  			child = of_get_next_child(parent, child))
>>
>> +
>> +__rte_internal
>>  uint32_t of_n_addr_cells(const struct device_node *dev_node);  uint32_t
>> of_n_size_cells(const struct device_node *dev_node);
>>
>> +__rte_internal
>>  const uint32_t *of_get_address(const struct device_node *dev_node, size_t
>> idx,
>>  			       uint64_t *size, uint32_t *flags);
>>
>> +__rte_internal
>>  uint64_t of_translate_address(const struct device_node *dev_node,
>>  			      const uint32_t *addr) __attribute__((nonnull));
>>
>> +__rte_internal
>>  bool of_device_is_compatible(const struct device_node *dev_node,
>>  			     const char *compatible);
>>
>> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct
>> device_node *dev_node,
>>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers,
>> etc.
>>   * The path should usually be "/proc/device-tree".
>>   */
>> +__rte_internal
>>  int of_init_path(const char *dt_path);
>>
>>  /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
>> diff --git a/drivers/common/dpaax/dpaax_iova_table.h
>> b/drivers/common/dpaax/dpaax_iova_table.h
>> index fc3b9e7a8f..230fba8ba0 100644
>> --- a/drivers/common/dpaax/dpaax_iova_table.h
>> +++ b/drivers/common/dpaax/dpaax_iova_table.h
>> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
>> #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
>>
>>  /* APIs exposed */
>> +__rte_internal
>>  int dpaax_iova_table_populate(void);
>> +__rte_internal
>>  void dpaax_iova_table_depopulate(void);
>> +__rte_internal
>>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
>> +__rte_internal
>>  void dpaax_iova_table_dump(void);
>>
>>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
>> diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map
>> b/drivers/common/dpaax/rte_common_dpaax_version.map
>> index f72eba761d..ad2b2b3fec 100644
>> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
>> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
>> @@ -1,4 +1,4 @@
>> -DPDK_20.0 {
>> +INTERNAL {
>>  	global:
>>
>>  	dpaax_iova_table_depopulate;
>> --
>> 2.17.1
> 

^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v2 1/2] common/octeontx2: move internal symbols to INTERNAL section
  2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
  2020-05-13  1:04  3%   ` [dpdk-dev] [PATCH v2 2/2] mempool/octeontx2: " pbhagavatula
  2020-05-13  9:55  3%   ` [dpdk-dev] [PATCH v3 1/2] common/octeontx2: " pbhagavatula
@ 2020-05-14  7:02  0%   ` Ray Kinsella
  2 siblings, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-14  7:02 UTC (permalink / raw)
  To: pbhagavatula, jerinj, aostruszka, Neil Horman, Nithin Dabilpuram,
	Anoob Joseph
  Cc: thomas, dev



On 13/05/2020 02:04, pbhagavatula@marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Move the internal symbols to INTERNAL sections so that any
> change in them is not reported as ABI breakage.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  v2 Changes:
>  - Sort version map alphabetically
>  - Add libabigail ignore tag for OCTEONTX2
> 
>  devtools/libabigail.abignore                  |  4 +++
>  drivers/common/octeontx2/otx2_common.h        |  8 ++++++
>  drivers/common/octeontx2/otx2_dev.h           |  3 +++
>  drivers/common/octeontx2/otx2_irq.h           |  3 +++
>  drivers/common/octeontx2/otx2_mbox.h          |  6 +++++
>  drivers/common/octeontx2/otx2_sec_idev.h      |  6 +++++
>  .../rte_common_octeontx2_version.map          | 26 ++++++-------------
>  7 files changed, 38 insertions(+), 18 deletions(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
> index c9ee73cb3..dfe346db4 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -48,3 +48,7 @@
>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
>  [suppress_variable]
>          name = rte_crypto_aead_algorithm_strings
> +
> +; Ignore moving internal OCTEONTX2 stable functions to INTERNAL tag
> +[suppress_file]
> +	soname_regexp = librte_common_octeontx2.*
> diff --git a/drivers/common/octeontx2/otx2_common.h b/drivers/common/octeontx2/otx2_common.h
> index e62cdea07..174702687 100644
> --- a/drivers/common/octeontx2/otx2_common.h
> +++ b/drivers/common/octeontx2/otx2_common.h
> @@ -62,13 +62,21 @@ struct otx2_idev_cfg {
>  	};
>  };
> 
> +__rte_internal
>  struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
> +__rte_internal
>  void otx2_sso_pf_func_set(uint16_t sso_pf_func);
> +__rte_internal
>  uint16_t otx2_sso_pf_func_get(void);
> +__rte_internal
>  uint16_t otx2_npa_pf_func_get(void);
> +__rte_internal
>  struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
> +__rte_internal
>  void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
> +__rte_internal
>  int otx2_npa_lf_active(void *dev);
> +__rte_internal
>  int otx2_npa_lf_obj_ref(void);
> 
>  /* Log */
> diff --git a/drivers/common/octeontx2/otx2_dev.h b/drivers/common/octeontx2/otx2_dev.h
> index 13b75e118..cd4fe517d 100644
> --- a/drivers/common/octeontx2/otx2_dev.h
> +++ b/drivers/common/octeontx2/otx2_dev.h
> @@ -94,6 +94,7 @@ struct otx2_dev {
>  	OTX2_DEV;
>  };
> 
> +__rte_internal
>  int otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev);
> 
>  /* Common dev init and fini routines */
> @@ -116,7 +117,9 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
>  	return otx2_dev_priv_init(pci_dev, otx2_dev);
>  }
> 
> +__rte_internal
>  void otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev);
> +__rte_internal
>  int otx2_dev_active_vfs(void *otx2_dev);
> 
>  #define RVU_PFVF_PF_SHIFT	10
> diff --git a/drivers/common/octeontx2/otx2_irq.h b/drivers/common/octeontx2/otx2_irq.h
> index 9d326276e..0683cf554 100644
> --- a/drivers/common/octeontx2/otx2_irq.h
> +++ b/drivers/common/octeontx2/otx2_irq.h
> @@ -16,10 +16,13 @@ typedef struct {
>  	uint64_t bits[MAX_VFPF_DWORD_BITS];
>  } otx2_intr_t;
> 
> +__rte_internal
>  int otx2_register_irq(struct rte_intr_handle *intr_handle,
>  		      rte_intr_callback_fn cb, void *data, unsigned int vec);
> +__rte_internal
>  void otx2_unregister_irq(struct rte_intr_handle *intr_handle,
>  			 rte_intr_callback_fn cb, void *data, unsigned int vec);
> +__rte_internal
>  int otx2_disable_irqs(struct rte_intr_handle *intr_handle);
> 
>  #endif /* _OTX2_IRQ_H_ */
> diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
> index 80778a0be..7fa4276e9 100644
> --- a/drivers/common/octeontx2/otx2_mbox.h
> +++ b/drivers/common/octeontx2/otx2_mbox.h
> @@ -1617,19 +1617,25 @@ struct tim_enable_rsp {
>  	uint32_t __otx2_io currentbucket;
>  };
> 
> +__rte_internal
>  const char *otx2_mbox_id2name(uint16_t id);
>  int otx2_mbox_id2size(uint16_t id);
>  void otx2_mbox_reset(struct otx2_mbox *mbox, int devid);
>  int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base,
>  		   int direction, int ndevsi, uint64_t intr_offset);
>  void otx2_mbox_fini(struct otx2_mbox *mbox);
> +__rte_internal
>  void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid);
> +__rte_internal
>  int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid);
>  int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo);
> +__rte_internal
>  int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg);
> +__rte_internal
>  int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg,
>  			  uint32_t tmo);
>  int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid);
> +__rte_internal
>  struct mbox_msghdr *otx2_mbox_alloc_msg_rsp(struct otx2_mbox *mbox, int devid,
>  					    int size, int size_rsp);
> 
> diff --git a/drivers/common/octeontx2/otx2_sec_idev.h b/drivers/common/octeontx2/otx2_sec_idev.h
> index c681f5094..89cdaf66a 100644
> --- a/drivers/common/octeontx2/otx2_sec_idev.h
> +++ b/drivers/common/octeontx2/otx2_sec_idev.h
> @@ -22,16 +22,22 @@ struct otx2_sec_idev_cfg {
>  	rte_spinlock_t tx_cpt_lock;
>  };
> 
> +__rte_internal
>  uint8_t otx2_eth_dev_is_sec_capable(struct rte_eth_dev *eth_dev);
> 
> +__rte_internal
>  int otx2_sec_idev_cfg_init(int port_id);
> 
> +__rte_internal
>  int otx2_sec_idev_tx_cpt_qp_add(uint16_t port_id, struct otx2_cpt_qp *qp);
> 
> +__rte_internal
>  int otx2_sec_idev_tx_cpt_qp_remove(struct otx2_cpt_qp *qp);
> 
> +__rte_internal
>  int otx2_sec_idev_tx_cpt_qp_put(struct otx2_cpt_qp *qp);
> 
> +__rte_internal
>  int otx2_sec_idev_tx_cpt_qp_get(uint16_t port_id, struct otx2_cpt_qp **qp);
> 
>  #endif /* _OTX2_SEC_IDEV_H_ */
> diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
> index 01279c339..7621a59ad 100644
> --- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
> +++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
> @@ -1,13 +1,15 @@
> -DPDK_20.0 {
> +INTERNAL {
>  	global:
> 
>  	otx2_dev_active_vfs;
>  	otx2_dev_fini;
>  	otx2_dev_priv_init;
>  	otx2_disable_irqs;
> +	otx2_eth_dev_is_sec_capable;
>  	otx2_intra_dev_get_cfg;
>  	otx2_logtype_base;
>  	otx2_logtype_dpi;
> +	otx2_logtype_ep;
>  	otx2_logtype_mbox;
>  	otx2_logtype_nix;
>  	otx2_logtype_npa;
> @@ -27,26 +29,14 @@ DPDK_20.0 {
>  	otx2_npa_pf_func_get;
>  	otx2_npa_set_defaults;
>  	otx2_register_irq;
> -	otx2_sso_pf_func_get;
> -	otx2_sso_pf_func_set;
> -	otx2_unregister_irq;
> -
> -	local: *;
> -};
> -
> -DPDK_21 {
> -	global:
> -
> -	otx2_eth_dev_is_sec_capable;
>  	otx2_sec_idev_cfg_init;
>  	otx2_sec_idev_tx_cpt_qp_add;
> -	otx2_sec_idev_tx_cpt_qp_remove;
>  	otx2_sec_idev_tx_cpt_qp_get;
>  	otx2_sec_idev_tx_cpt_qp_put;
> -} DPDK_20.0;
> -
> -EXPERIMENTAL {
> -	global:
> +	otx2_sec_idev_tx_cpt_qp_remove;
> +	otx2_sso_pf_func_get;
> +	otx2_sso_pf_func_set;
> +	otx2_unregister_irq;
> 
> -	otx2_logtype_ep;
> +	local: *;
>  };
> --
> 2.17.1
> 

Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v1] doc: fix typos and errors in abi policy doc
  2020-05-13 10:43 36% [dpdk-dev] [PATCH v1] doc: fix typos and errors in abi policy doc Gaetan Rivet
@ 2020-05-14  6:40  4% ` Ray Kinsella
  2020-05-19  9:46  4%   ` Thomas Monjalon
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-14  6:40 UTC (permalink / raw)
  To: Gaetan Rivet, dev; +Cc: Neil Horman, Mcnamara, John, Marko Kovacevic

CC: John + Marko

Gaetan,

Looks good, thank you for the tidy up.

On 13/05/2020 11:43, Gaetan Rivet wrote:
> Some errors in the document:
> 
>   * API instead of ABI once.
> 
> Some typos:
> 
>   * __rte_depreciated instead of __rte_deprecated.
>   * missing ```` around value.
>   * inconsistent reference to major ABI version, most
>     of the time described without the minor appended, except once.
> 
> Verbosity and grammar:
> 
>   * Long sentences that would be better cut short.
>   * Comma abuse.
>   * 'May' used where 'can' seems more fitting.
> 
> I'm not a native speaker though, so grain of salt applies.
> 
> Fixes: fdf7471cccb8 ("doc: introduce major ABI versions")
> Cc: Ray Kinsella <mdr@ashroe.eu>
> cc: Neil Horman <nhorman@tuxdriver.com>
> Signed-off-by: Gaetan Rivet <grive@u256.net>
> ---
>  doc/guides/contributing/abi_policy.rst | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
> 
> diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
> index 05ca95980..2198519d9 100644
> --- a/doc/guides/contributing/abi_policy.rst
> +++ b/doc/guides/contributing/abi_policy.rst
> @@ -220,19 +220,18 @@ Examples of ABI Changes
>  The following are examples of allowable ABI changes occurring between
>  declarations of major ABI versions.
>  
> -* DPDK 19.11 release, defines the function ``rte_foo()``, and ``rte_foo()``
> -  as part of the major ABI version ``20``.
> +* DPDK 19.11 release defines the function ``rte_foo()`` ; ``rte_foo()``
> +  is part of the major ABI version ``20``.
>  
> -* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``, and
> -  this is not a problem as long as the symbol ``rte_foo@DPDK20`` is
> +* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``.
> +  This is not a problem as long as the symbol ``rte_foo@DPDK20`` is
>    preserved through :ref:`abi_versioning`.
>  
>    - The new function may be marked with the ``__rte_experimental`` tag for a
>      number of releases, as described in the section :ref:`experimental_apis`.
>  
> -  - Once ``rte_foo(uint8_t bar)`` becomes non-experimental ``rte_foo()`` is then
> -    declared as ``__rte_depreciated``, with an associated deprecation notice
> -    provided.
> +  - Once ``rte_foo(uint8_t bar)`` becomes non-experimental, ``rte_foo()`` is
> +    declared as ``__rte_deprecated`` and an deprecation notice is provided.
>  
>  * DPDK 19.11 is not re-released to include ``rte_foo(uint8_t bar)``, the new
>    version of ``rte_foo`` only exists from DPDK 20.02 onwards as described in the
> @@ -242,13 +241,13 @@ declarations of major ABI versions.
>    rte_baz()``. This function may or may not exist in the DPDK 20.05 release.
>  
>  * An application ``dPacket`` wishes to use ``rte_foo(uint8_t bar)``, before the
> -  declaration of the DPDK ``21`` major API version. The application can only
> +  declaration of the DPDK ``21`` major ABI version. The application can only
>    ensure its runtime dependencies are met by specifying ``DPDK (>= 20.2)`` as
> -  an explicit package dependency, as the soname only may only indicate the
> +  an explicit package dependency, as the soname can only indicate the
>    supported major ABI version.
>  
>  * At the release of DPDK 20.11, the function ``rte_foo(uint8_t bar)`` becomes
> -  formally part of then new major ABI version DPDK 21.0 and ``rte_foo()`` may be
> +  formally part of then new major ABI version DPDK ``21`` and ``rte_foo()`` may be
>    removed.
>  
>  .. _deprecation_notices:
> @@ -322,6 +321,6 @@ Libraries
>  
>  Libraries marked as ``experimental`` are entirely not considered part of an ABI
>  version, and may change without warning at any time. Experimental libraries
> -always have a major version of ``0`` to indicate they exist outside of
> +always have a major ABI version of ``0`` to indicate they exist outside of
>  :ref:`abi_versioning` , with the minor version incremented with each ABI change
>  to library.
> 

Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-13 19:40  0%             ` Honnappa Nagarahalli
@ 2020-05-13 20:17  0%               ` Mattias Rönnblom
  2020-05-14  8:34  0%                 ` Morten Brørup
  0 siblings, 1 reply; 200+ results
From: Mattias Rönnblom @ 2020-05-13 20:17 UTC (permalink / raw)
  To: Honnappa Nagarahalli, Morten Brørup, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen

On 2020-05-13 21:40, Honnappa Nagarahalli wrote:
> <snip>
>
>>>> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
>>>>
>>>> On Tue, May 12, 2020 at 4:03 pm, Phil Yang <mailto:phil.yang@arm.com>
>>>> wrote:
>>>>
>>>> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
>>>>
>>>>
>>>> What is the purpose of having rte_atomic at all?
>>>> Is this level of indirection really helping?
>>>> [HONNAPPA] (not sure why this email has html format, converted to
>>>> text
>>>> format)
>>>> I believe you meant, why not use the __atomic_xxx built-ins directly?
>>>> The only reason for now is handling of
>>>> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is equivalent
>>>> to rte_smp_mb which has an optimized implementation for x86.
>>>> According to Konstantin, the compiler does not generate optimal code.
>>>> Wrapping that built-in alone is going to be confusing.
>>>>
>>>> The wrappers also allow us to have our own implementation using
>>>> inline assembly for compilers versions that do not support C11 atomic
>>>> built- ins. But, I do not know if there is a need to support those versions.
>>> If I recall correctly, someone mentioned that one (or more) of the aging
>> enterprise Linux distributions don't include a compiler with C11 atomics.
>>> I think Stephen is onto something here...
>>>
>>> It is silly to add wrappers like this, if the only purpose is to support
>> compilers and distributions that don't properly support an official C standard
>> which is nearly a decade old. The quality and quantity of the DPDK
>> documentation for these functions (including examples, discussions on Stack
>> Overflow, etc.) will be inferior to the documentation of the standard C11
>> atomics, which increases the probability of incorrect use.
>>
>>
>> What's being used in DPDK today, and what's being wrapped here, is not
>> standard C11 atomics - it's a bunch of GCC built-ins. Nothing in the __
>> namespace is in the standard. It's reserved for the implementation (e.g.
>> compiler).
> I have tried to understand what it mean by 'built-ins', but I have not got a good answer. So, does it mean that the built-in function (same symbol and API interface) may not be available in another C compiler? IMO, this is what matters for DPDK.
> Currently, the same built-in functions are available in GCC and Clang.


 From what I understand, "built-ins" is GCC terminology for 
non-standard, implementation-specific intrinsic functions, built into 
the compiler. They all reside in the __* namespace.


Since GCC is the industry standard, other compilers are likely to 
follow, including built-in functions.

>>
>>> And if some compiler generates code that is suboptimal for a user, then it
>> should be the choice of the user to either accept it or use a better compiler.
>> Using a suboptimal compiler will not only affect the user's DPDK applications,
>> but all applications developed by the user. And if he accepts it for his other
>> applications, he will also accept it for his DPDK applications.
>>> We could introduce some sort of marker or standardized comment to
>> indicate when functions only exist for backwards compatibility with ancient
>> compilers and similar, with a reference to documentation describing why. And
>> when the documented preconditions are no longer relevant, e.g. when those
>> particular enterprise Linux distributions become obsolete, these functions
>> become obsolete too, and should be removed. However, getting rid of
>> obsolete cruft will break the ABI. In other words: Added cruft will never be
>> removed again, so think twice before adding.
>>>
>>> Med venlig hilsen / kind regards
>>> - Morten Brørup
>>>
>>>
>>>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-13 19:04  0%           ` Mattias Rönnblom
@ 2020-05-13 19:40  0%             ` Honnappa Nagarahalli
  2020-05-13 20:17  0%               ` Mattias Rönnblom
  0 siblings, 1 reply; 200+ results
From: Honnappa Nagarahalli @ 2020-05-13 19:40 UTC (permalink / raw)
  To: Mattias Rönnblom, Morten Brørup, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen, Honnappa Nagarahalli, nd

<snip>

> >>
> >> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
> >>
> >> On Tue, May 12, 2020 at 4:03 pm, Phil Yang <mailto:phil.yang@arm.com>
> >> wrote:
> >>
> >> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
> >>
> >>
> >> What is the purpose of having rte_atomic at all?
> >> Is this level of indirection really helping?
> >> [HONNAPPA] (not sure why this email has html format, converted to
> >> text
> >> format)
> >> I believe you meant, why not use the __atomic_xxx built-ins directly?
> >> The only reason for now is handling of
> >> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is equivalent
> >> to rte_smp_mb which has an optimized implementation for x86.
> >> According to Konstantin, the compiler does not generate optimal code.
> >> Wrapping that built-in alone is going to be confusing.
> >>
> >> The wrappers also allow us to have our own implementation using
> >> inline assembly for compilers versions that do not support C11 atomic
> >> built- ins. But, I do not know if there is a need to support those versions.
> > If I recall correctly, someone mentioned that one (or more) of the aging
> enterprise Linux distributions don't include a compiler with C11 atomics.
> >
> > I think Stephen is onto something here...
> >
> > It is silly to add wrappers like this, if the only purpose is to support
> compilers and distributions that don't properly support an official C standard
> which is nearly a decade old. The quality and quantity of the DPDK
> documentation for these functions (including examples, discussions on Stack
> Overflow, etc.) will be inferior to the documentation of the standard C11
> atomics, which increases the probability of incorrect use.
> 
> 
> What's being used in DPDK today, and what's being wrapped here, is not
> standard C11 atomics - it's a bunch of GCC built-ins. Nothing in the __
> namespace is in the standard. It's reserved for the implementation (e.g.
> compiler).
I have tried to understand what it mean by 'built-ins', but I have not got a good answer. So, does it mean that the built-in function (same symbol and API interface) may not be available in another C compiler? IMO, this is what matters for DPDK.
Currently, the same built-in functions are available in GCC and Clang.

> 
> 
> > And if some compiler generates code that is suboptimal for a user, then it
> should be the choice of the user to either accept it or use a better compiler.
> Using a suboptimal compiler will not only affect the user's DPDK applications,
> but all applications developed by the user. And if he accepts it for his other
> applications, he will also accept it for his DPDK applications.
> >
> > We could introduce some sort of marker or standardized comment to
> indicate when functions only exist for backwards compatibility with ancient
> compilers and similar, with a reference to documentation describing why. And
> when the documented preconditions are no longer relevant, e.g. when those
> particular enterprise Linux distributions become obsolete, these functions
> become obsolete too, and should be removed. However, getting rid of
> obsolete cruft will break the ABI. In other words: Added cruft will never be
> removed again, so think twice before adding.
> >
> >
> > Med venlig hilsen / kind regards
> > - Morten Brørup
> >
> >
> >


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-13  8:57  3%         ` Morten Brørup
  2020-05-13 15:30  0%           ` Honnappa Nagarahalli
@ 2020-05-13 19:04  0%           ` Mattias Rönnblom
  2020-05-13 19:40  0%             ` Honnappa Nagarahalli
  1 sibling, 1 reply; 200+ results
From: Mattias Rönnblom @ 2020-05-13 19:04 UTC (permalink / raw)
  To: Morten Brørup, Honnappa Nagarahalli, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, harry.van.haaren, erik.g.carrillo, nd,
	David Christensen

On 2020-05-13 10:57, Morten Brørup wrote:
>> From: Honnappa Nagarahalli [mailto:Honnappa.Nagarahalli@arm.com]
>> Sent: Tuesday, May 12, 2020 9:24 PM
>>
>> <snip>
>>
>> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
>>
>> On Tue, May 12, 2020 at 4:03 pm, Phil Yang <mailto:phil.yang@arm.com>
>> wrote:
>>
>> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
>>
>>
>> What is the purpose of having rte_atomic at all?
>> Is this level of indirection really helping?
>> [HONNAPPA] (not sure why this email has html format, converted to text
>> format)
>> I believe you meant, why not use the __atomic_xxx built-ins directly?
>> The only reason for now is handling of
>> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is equivalent to
>> rte_smp_mb which has an optimized implementation for x86. According to
>> Konstantin, the compiler does not generate optimal code. Wrapping that
>> built-in alone is going to be confusing.
>>
>> The wrappers also allow us to have our own implementation using inline
>> assembly for compilers versions that do not support C11 atomic built-
>> ins. But, I do not know if there is a need to support those versions.
> If I recall correctly, someone mentioned that one (or more) of the aging enterprise Linux distributions don't include a compiler with C11 atomics.
>
> I think Stephen is onto something here...
>
> It is silly to add wrappers like this, if the only purpose is to support compilers and distributions that don't properly support an official C standard which is nearly a decade old. The quality and quantity of the DPDK documentation for these functions (including examples, discussions on Stack Overflow, etc.) will be inferior to the documentation of the standard C11 atomics, which increases the probability of incorrect use.


What's being used in DPDK today, and what's being wrapped here, is not 
standard C11 atomics - it's a bunch of GCC built-ins. Nothing in the __ 
namespace is in the standard. It's reserved for the implementation (e.g. 
compiler).


> And if some compiler generates code that is suboptimal for a user, then it should be the choice of the user to either accept it or use a better compiler. Using a suboptimal compiler will not only affect the user's DPDK applications, but all applications developed by the user. And if he accepts it for his other applications, he will also accept it for his DPDK applications.
>
> We could introduce some sort of marker or standardized comment to indicate when functions only exist for backwards compatibility with ancient compilers and similar, with a reference to documentation describing why. And when the documented preconditions are no longer relevant, e.g. when those particular enterprise Linux distributions become obsolete, these functions become obsolete too, and should be removed. However, getting rid of obsolete cruft will break the ABI. In other words: Added cruft will never be removed again, so think twice before adding.
>
>
> Med venlig hilsen / kind regards
> - Morten Brørup
>
>
>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH] meter: provide experimental alias of API for old apps
  2020-05-13 16:30  4%   ` Thomas Monjalon
@ 2020-05-13 17:37  0%     ` Ferruh Yigit
  0 siblings, 0 replies; 200+ results
From: Ferruh Yigit @ 2020-05-13 17:37 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Ray Kinsella, Neil Horman, Cristian Dumitrescu, Eelco Chaudron,
	dev, David Marchand, Luca Boccassi, Bruce Richardson, Ian Stokes,
	Andrzej Ostruszka

On 5/13/2020 5:30 PM, Thomas Monjalon wrote:
> I think the title should be about ABI, not API.
> 
> 13/05/2020 14:11, Ferruh Yigit:
>> Duplicate the existing and versioned symbol as experimental.
> 
> Would be good to explain the case of the meter lib you are addressing.
> If I understand well, you consider we "broke" the experimental ABI
> during 20.02 when moving symbols from EXPERIMENTAL to DPDK_20.0.1
> (and to DPDK_21 during 20.05).
> That's why you want to add back the EXPERIMENTAL symbol as an alias
> of the symbol in the next ABI (21).

Yes, this is the case, I can try again to clarify.

Btw, I wasn't following that bit, how we are mitigating the affect of the
DPDK_20.0.1 -> DPDK_21 change to applications?


> 
> 
>> This is to prevent DPDK maturing experimental API breaking old
>> applications using that experimental API.
>> The relevant process update is captured in:
>> https://patches.dpdk.org/patch/65863/
>>
>> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>>
>> Updated the 'check-experimental-syms.sh' buildtool, which was
>> complaining that the symbol is in EXPERIMENTAL tag in .map file but it
>> is not in the .experimental section (__rte_experimental tag is missing).
>> Updated tool in a way it won't complain if the symbol in the
>> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>>
>> Enabled function versioning for meson build for the library.
>>
>> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
> 
> Even if it's never backported, it would be more correct to add Cc: stable
> to indicate it is fixing previous release (20.02 here).

As you said original patch is after LTS, but yes I can add the tag.
(Although not having stable tag implies the fix is not in this release, it also
may mean backport is not requested as been in this case.)

> 
> 
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> [...]
>> --- a/lib/librte_meter/rte_meter_version.map
>> +++ b/lib/librte_meter/rte_meter_version.map
>> @@ -20,4 +20,12 @@ DPDK_21 {
>>  	rte_meter_trtcm_rfc4115_color_blind_check;
>>  	rte_meter_trtcm_rfc4115_config;
>>  	rte_meter_trtcm_rfc4115_profile_config;
>> +
>>  } DPDK_20.0;
>> +
>> +EXPERIMENTAL {
>> +       global:
>> +
>> +	rte_meter_trtcm_rfc4115_config;
>> +	rte_meter_trtcm_rfc4115_profile_config;
>> +};
>>
> 
> 
> 
> 
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH] meter: provide experimental alias of API for old apps
  @ 2020-05-13 16:30  4%   ` Thomas Monjalon
  2020-05-13 17:37  0%     ` Ferruh Yigit
                       ` (4 subsequent siblings)
  5 siblings, 1 reply; 200+ results
From: Thomas Monjalon @ 2020-05-13 16:30 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Ray Kinsella, Neil Horman, Cristian Dumitrescu, Eelco Chaudron,
	dev, David Marchand, Luca Boccassi, Bruce Richardson, Ian Stokes,
	Andrzej Ostruszka

I think the title should be about ABI, not API.

13/05/2020 14:11, Ferruh Yigit:
> Duplicate the existing and versioned symbol as experimental.

Would be good to explain the case of the meter lib you are addressing.
If I understand well, you consider we "broke" the experimental ABI
during 20.02 when moving symbols from EXPERIMENTAL to DPDK_20.0.1
(and to DPDK_21 during 20.05).
That's why you want to add back the EXPERIMENTAL symbol as an alias
of the symbol in the next ABI (21).


> This is to prevent DPDK maturing experimental API breaking old
> applications using that experimental API.
> The relevant process update is captured in:
> https://patches.dpdk.org/patch/65863/
> 
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
> 
> Updated the 'check-experimental-syms.sh' buildtool, which was
> complaining that the symbol is in EXPERIMENTAL tag in .map file but it
> is not in the .experimental section (__rte_experimental tag is missing).
> Updated tool in a way it won't complain if the symbol in the
> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
> 
> Enabled function versioning for meson build for the library.
> 
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")

Even if it's never backported, it would be more correct to add Cc: stable
to indicate it is fixing previous release (20.02 here).


> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
[...]
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
>  	rte_meter_trtcm_rfc4115_color_blind_check;
>  	rte_meter_trtcm_rfc4115_config;
>  	rte_meter_trtcm_rfc4115_profile_config;
> +
>  } DPDK_20.0;
> +
> +EXPERIMENTAL {
> +       global:
> +
> +	rte_meter_trtcm_rfc4115_config;
> +	rte_meter_trtcm_rfc4115_profile_config;
> +};
> 






^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  2020-05-13  8:57  3%         ` Morten Brørup
@ 2020-05-13 15:30  0%           ` Honnappa Nagarahalli
  2020-05-13 19:04  0%           ` Mattias Rönnblom
  1 sibling, 0 replies; 200+ results
From: Honnappa Nagarahalli @ 2020-05-13 15:30 UTC (permalink / raw)
  To: Morten Brørup, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, mattias.ronnblom, harry.van.haaren,
	erik.g.carrillo, nd, David Christensen, Honnappa Nagarahalli, nd

<snip>
> > Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
> >
> > On Tue, May 12, 2020 at 4:03 pm, Phil Yang <mailto:phil.yang@arm.com>
> > wrote:
> >
> > parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
> >
> >
> > What is the purpose of having rte_atomic at all?
> > Is this level of indirection really helping?
> > [HONNAPPA] (not sure why this email has html format, converted to text
> > format)
> > I believe you meant, why not use the __atomic_xxx built-ins directly?
> > The only reason for now is handling of
> > __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is equivalent to
> > rte_smp_mb which has an optimized implementation for x86. According to
> > Konstantin, the compiler does not generate optimal code. Wrapping that
> > built-in alone is going to be confusing.
> >
> > The wrappers also allow us to have our own implementation using inline
> > assembly for compilers versions that do not support C11 atomic built-
> > ins. But, I do not know if there is a need to support those versions.
> 
> If I recall correctly, someone mentioned that one (or more) of the aging
> enterprise Linux distributions don't include a compiler with C11 atomics.
I searched through the mailing list yesterday and I could not find anyone mentioning about compilers not supporting C11 built-ins. However, the C11 atomic APIs (as defined in stdatomic.h) are supported in later versions of the compilers. So, using C11 built-ins gives us better coverage with older compilers (including the ones being used in Intel CI which were the oldest versions mentioned on the mailing list).
IMO, we should not be worried about compilers that do not support C11.

> 
> I think Stephen is onto something here...
> 
> It is silly to add wrappers like this, if the only purpose is to support compilers
> and distributions that don't properly support an official C standard which is
> nearly a decade old. The quality and quantity of the DPDK documentation for
> these functions (including examples, discussions on Stack Overflow, etc.) will
> be inferior to the documentation of the standard C11 atomics, which
> increases the probability of incorrect use.
I agree. I do not want to add them for the sake of adding them. But, I do think that we need to solve the issues in DPDK (if they affect performance) which could be due to tools. As Konstantin suggested, we could do the wrappers only for the __atomic_thread_fence built-in. This will make life lot easier.

> 
> And if some compiler generates code that is suboptimal for a user, then it
> should be the choice of the user to either accept it or use a better compiler.
> Using a suboptimal compiler will not only affect the user's DPDK applications,
> but all applications developed by the user. And if he accepts it for his other
> applications, he will also accept it for his DPDK applications.
> 
> We could introduce some sort of marker or standardized comment to indicate
> when functions only exist for backwards compatibility with ancient compilers
> and similar, with a reference to documentation describing why. And when the
> documented preconditions are no longer relevant, e.g. when those particular
> enterprise Linux distributions become obsolete, these functions become
> obsolete too, and should be removed. However, getting rid of obsolete cruft
> will break the ABI. In other words: Added cruft will never be removed again,
> so think twice before adding.
> 
> 
> Med venlig hilsen / kind regards
> - Morten Brørup
> 
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-13 14:06  0%       ` Hemant Agrawal (OSS)
  2020-05-14  7:13  3%         ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Hemant Agrawal (OSS) @ 2020-05-13 14:06 UTC (permalink / raw)
  To: mdr; +Cc: dev

Hi Ray,
	I could not find validate_abi using libabigail.abignore.  Am I missing something. 
Though check_abi.sh uses it. 

When I am checking with validate_abi.sh, I still see warnings.

Regards,
Hemant

> -----Original Message-----
> From: Hemant Agrawal <hemant.agrawal@nxp.com>
> Sent: Wednesday, May 13, 2020 6:58 PM
> To: dev@dpdk.org; david.marchand@redhat.com; mdr@ashroe.eu
> Cc: Hemant Agrawal <hemant.agrawal@nxp.com>
> Subject: [PATCH v3 01/12] common/dpaax: move internal symbols into
> INTERNAL section
> 
> This patch moves the internal symbols to INTERNAL sections so that any
> change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  devtools/libabigail.abignore                      |  3 +++
>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>  drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
>  4 files changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index
> c9ee73cb3c..b1488d5549 100644
> --- a/devtools/libabigail.abignore
> +++ b/devtools/libabigail.abignore
> @@ -48,3 +48,6 @@
>          changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
> [suppress_variable]
>          name = rte_crypto_aead_algorithm_strings
> +; Ignore moving DPAAx stable functions to INTERNAL tag [suppress_file]
> +	file_name_regexp = ^librte_common_dpaax\.
> diff --git a/drivers/common/dpaax/dpaa_of.h
> b/drivers/common/dpaax/dpaa_of.h index 960b421766..38d91a1afe 100644
> --- a/drivers/common/dpaax/dpaa_of.h
> +++ b/drivers/common/dpaax/dpaa_of.h
> @@ -24,6 +24,7 @@
>  #include <limits.h>
>  #include <rte_common.h>
>  #include <dpaa_list.h>
> +#include <rte_compat.h>
> 
>  #ifndef OF_INIT_DEFAULT_PATH
>  #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
> @@ -102,6 +103,7 @@ struct dt_file {
>  	uint64_t buf[OF_FILE_BUF_MAX >> 3];
>  };
> 
> +__rte_internal
>  const struct device_node *of_find_compatible_node(
>  					const struct device_node *from,
>  					const char *type __rte_unused,
> @@ -113,32 +115,44 @@ const struct device_node
> *of_find_compatible_node(
>  		dev_node != NULL; \
>  		dev_node = of_find_compatible_node(dev_node, type,
> compatible))
> 
> +__rte_internal
>  const void *of_get_property(const struct device_node *from, const char
> *name,
>  			    size_t *lenp) __attribute__((nonnull(2)));
> +__rte_internal
>  bool of_device_is_available(const struct device_node *dev_node);
> 
> +
> +__rte_internal
>  const struct device_node *of_find_node_by_phandle(uint64_t ph);
> 
> +__rte_internal
>  const struct device_node *of_get_parent(const struct device_node
> *dev_node);
> 
> +__rte_internal
>  const struct device_node *of_get_next_child(const struct device_node
> *dev_node,
>  					    const struct device_node *prev);
> 
> +__rte_internal
>  const void *of_get_mac_address(const struct device_node *np);
> 
>  #define for_each_child_node(parent, child) \
>  	for (child = of_get_next_child(parent, NULL); child != NULL; \
>  			child = of_get_next_child(parent, child))
> 
> +
> +__rte_internal
>  uint32_t of_n_addr_cells(const struct device_node *dev_node);  uint32_t
> of_n_size_cells(const struct device_node *dev_node);
> 
> +__rte_internal
>  const uint32_t *of_get_address(const struct device_node *dev_node, size_t
> idx,
>  			       uint64_t *size, uint32_t *flags);
> 
> +__rte_internal
>  uint64_t of_translate_address(const struct device_node *dev_node,
>  			      const uint32_t *addr) __attribute__((nonnull));
> 
> +__rte_internal
>  bool of_device_is_compatible(const struct device_node *dev_node,
>  			     const char *compatible);
> 
> @@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct
> device_node *dev_node,
>   * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers,
> etc.
>   * The path should usually be "/proc/device-tree".
>   */
> +__rte_internal
>  int of_init_path(const char *dt_path);
> 
>  /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
> diff --git a/drivers/common/dpaax/dpaax_iova_table.h
> b/drivers/common/dpaax/dpaax_iova_table.h
> index fc3b9e7a8f..230fba8ba0 100644
> --- a/drivers/common/dpaax/dpaax_iova_table.h
> +++ b/drivers/common/dpaax/dpaax_iova_table.h
> @@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
> #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
> 
>  /* APIs exposed */
> +__rte_internal
>  int dpaax_iova_table_populate(void);
> +__rte_internal
>  void dpaax_iova_table_depopulate(void);
> +__rte_internal
>  int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
> +__rte_internal
>  void dpaax_iova_table_dump(void);
> 
>  static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
> diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map
> b/drivers/common/dpaax/rte_common_dpaax_version.map
> index f72eba761d..ad2b2b3fec 100644
> --- a/drivers/common/dpaax/rte_common_dpaax_version.map
> +++ b/drivers/common/dpaax/rte_common_dpaax_version.map
> @@ -1,4 +1,4 @@
> -DPDK_20.0 {
> +INTERNAL {
>  	global:
> 
>  	dpaax_iova_table_depopulate;
> --
> 2.17.1


^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH v3 07/12] net/dpaa: move internal symbols into INTERNAL section
                         ` (5 preceding siblings ...)
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 06/12] net/dpaa2: " Hemant Agrawal
@ 2020-05-13 13:27  3%     ` Hemant Agrawal
    7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..3df144dc8d 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,16 @@
 DPDK_20.0 {
 	global:
 
+	rte_pmd_dpaa_set_tx_loopback;
+
+	local: *;
+};
+
+INTERNAL {
+	global:
+
 	dpaa_eth_eventq_attach;
 	dpaa_eth_eventq_detach;
-	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v3 06/12] net/dpaa2: move internal symbols into INTERNAL section
                         ` (4 preceding siblings ...)
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 05/12] crypto: " Hemant Agrawal
@ 2020-05-13 13:27  3%     ` Hemant Agrawal
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 07/12] net/dpaa: " Hemant Agrawal
    7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.h            | 2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..78ea74e058 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_eth_eventq_attach;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v3 05/12] crypto: move internal symbols into INTERNAL section
                         ` (3 preceding siblings ...)
  2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 04/12] bus/dpaa: " Hemant Agrawal
@ 2020-05-13 13:27  3%     ` Hemant Agrawal
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 06/12] net/dpaa2: " Hemant Agrawal
                       ` (2 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                           | 2 ++
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 2 +-
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 4 +---
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 5c69a72a82..ebdfe87040 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -57,3 +57,5 @@
 	file_name_regexp = ^librte_bus_fslmc\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_dpaa\.
+[suppress_file]
+	file_name_regexp = ^librte_pmd_dpaa\.
diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..aed07fb371 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,6 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v3 04/12] bus/dpaa: move internal symbols into INTERNAL section
                         ` (2 preceding siblings ...)
  2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 03/12] bus/fslmc: " Hemant Agrawal
@ 2020-05-13 13:27  1%     ` Hemant Agrawal
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 05/12] crypto: " Hemant Agrawal
                       ` (3 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore              |  2 ++
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  6 +++++
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  7 +----
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 8 files changed, 81 insertions(+), 6 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 6b4579f45d..5c69a72a82 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -55,3 +55,5 @@
 	file_name_regexp = ^librte_mempool_dpaa\.
 [suppress_file]
 	file_name_regexp = ^librte_bus_fslmc\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_dpaa\.
diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..30ec63a09d 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,8 +67,12 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
 
 void qman_clear_irq(void);
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..f4947fac41 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +13,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -51,7 +50,6 @@ DPDK_20.0 {
 	qm_channel_pool1;
 	qman_alloc_cgrid_range;
 	qman_alloc_pool_range;
-	qman_clear_irq;
 	qman_create_cgr;
 	qman_create_fq;
 	qman_dca_index;
@@ -87,10 +85,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v3 03/12] bus/fslmc: move internal symbols into INTERNAL section
    2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 02/12] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-13 13:27  1%     ` Hemant Agrawal
  2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 04/12] bus/dpaa: " Hemant Agrawal
                       ` (4 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

This patch also removes two symbols, which were not used
anywhere else i.e. rte_fslmc_vfio_dmamap & dpaa2_get_qbman_swp

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                  |  2 +
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  4 +-
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 15 files changed, 99 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 4a5241073e..6b4579f45d 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -53,3 +53,5 @@
 	file_name_regexp = ^librte_common_dpaax\.
 [suppress_file]
 	file_name_regexp = ^librte_mempool_dpaa\.
+[suppress_file]
+	file_name_regexp = ^librte_bus_fslmc\.
diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..04e61156c3 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +11,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,7 +100,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
 
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v3 02/12] mempool/dpaa2: move internal symbols into INTERNAL section
    2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
@ 2020-05-13 13:27  3%     ` Hemant Agrawal
  2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 03/12] bus/fslmc: " Hemant Agrawal
                       ` (5 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
--
v3: add entry in libabigail.abinore file
---
 devtools/libabigail.abignore                        | 2 ++
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 2 +-
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index b1488d5549..4a5241073e 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -51,3 +51,5 @@
 ; Ignore moving DPAAx stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_dpaax\.
+[suppress_file]
+	file_name_regexp = ^librte_mempool_dpaa\.
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..142547ee38 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-13 13:27  3%     ` Hemant Agrawal
  2020-05-13 14:06  0%       ` Hemant Agrawal (OSS)
  2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 02/12] mempool/dpaa2: " Hemant Agrawal
                       ` (6 subsequent siblings)
  7 siblings, 1 reply; 200+ results
From: Hemant Agrawal @ 2020-05-13 13:27 UTC (permalink / raw)
  To: dev, david.marchand, mdr; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 devtools/libabigail.abignore                      |  3 +++
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3c..b1488d5549 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,6 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+; Ignore moving DPAAx stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_dpaax\.
diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..ad2b2b3fec 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [RFC v2] hash: unify crc32 API header for x86 and ARM
  2020-05-13  3:04  3%   ` Ruifeng Wang
@ 2020-05-13 13:22  0%     ` Ananyev, Konstantin
  0 siblings, 0 replies; 200+ results
From: Ananyev, Konstantin @ 2020-05-13 13:22 UTC (permalink / raw)
  To: Ruifeng Wang, pbhagavatula, jerinj, Van Haaren, Harry, Wang,
	Yipeng1, Gobriel, Sameh, Richardson, Bruce
  Cc: dev, nd

> 
> > -----Original Message-----
> > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > Sent: Wednesday, May 13, 2020 4:40 AM
> > To: jerinj@marvell.com; konstantin.ananyev@intel.com;
> > harry.van.haaren@intel.com; Yipeng Wang <yipeng1.wang@intel.com>;
> > Sameh Gobriel <sameh.gobriel@intel.com>; Bruce Richardson
> > <bruce.richardson@intel.com>; Ruifeng Wang <Ruifeng.Wang@arm.com>
> > Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> > Subject: [dpdk-dev] [RFC v2] hash: unify crc32 API header for x86 and ARM
> >
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > Merge crc32 hash calculation public API headers for x86 and ARM.
> > Select the best available CRC32 algorithm when unsupported algorithm on a
> > given CPU architecture is requested by an application.
> >
> > Previously, if an application directly includes `rte_crc_arm64.h` without
> > including `rte_hash_crc.h` it will fail to compile.
> > Although, `rte_crc_arm64.h` is no longer needed make it a dummy file for
> > ABI purposes.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > ---
> >  v2 Changes:
> >  - Don't remove `rte_crc_arm64.h` for ABI purposes.
> >  - Revert function pointer approach for performance reasons.
> >  - Select the best available algorithm based on the arch when user passes an
> > unsupported crc32 algorithm.
> >
> Maybe split the patch? Changes to select the best available algorithm can be a separate one.
> 
> More ifdefs are added. Is it possible to have arch specific rte_hash_crc_xx implementations
> like what was done in rte_crc_arm64.h, and include specific headers according to arch in rte_hash.crc.h?

Same thought.

> For ABI purpose, rte_crc_arm64.h can be kept and it only includes the new arm64 specific header.
> 
> >  app/test/test_hash.c            |   6 ++
> >  lib/librte_hash/meson.build     |   6 +-
> >  lib/librte_hash/rte_crc_arm64.h | 175 +-------------------------------
> > lib/librte_hash/rte_hash_crc.h  | 153 ++++++++++++++++++++--------
> >  4 files changed, 122 insertions(+), 218 deletions(-)
> >
> > diff --git a/app/test/test_hash.c b/app/test/test_hash.c index
> > afa3a1a3c..7bd457dac 100644
> > --- a/app/test/test_hash.c
> > +++ b/app/test/test_hash.c
> > @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
> >  	}
> >
> >  	/* Resetting to best available algorithm */
> > +#if defined RTE_ARCH_X86
> >  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> > +#elif defined RTE_ARCH_ARM64
> > +	rte_hash_crc_set_alg(CRC32_ARM64);
> > +#else
> > +	rte_hash_crc_set_alg(CRC32_SW);
> > +#endif
> >
> >  	if (i == CRC32_ITERATIONS)
> >  		return 0;
> > diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build index
> > 6ab46ae9d..8a3cf2f64 100644
> > --- a/lib/librte_hash/meson.build
> > +++ b/lib/librte_hash/meson.build
> > @@ -1,12 +1,14 @@
> >  # SPDX-License-Identifier: BSD-3-Clause  # Copyright(c) 2017 Intel
> > Corporation
> >
> > -headers = files('rte_crc_arm64.h',
> > -	'rte_fbk_hash.h',
> > +headers = files('rte_fbk_hash.h',
> >  	'rte_hash_crc.h',
> >  	'rte_hash.h',
> >  	'rte_jhash.h',
> >  	'rte_thash.h')
> > +if dpdk_conf.has('RTE_ARCH_ARM64')
> > +	headers += files('rte_crc_arm64.h')
> > +endif
> >
> >  sources = files('rte_cuckoo_hash.c', 'rte_fbk_hash.c')  deps += ['ring'] diff --
> > git a/lib/librte_hash/rte_crc_arm64.h b/lib/librte_hash/rte_crc_arm64.h
> > index b4628cfc0..adfcafc7d 100644
> > --- a/lib/librte_hash/rte_crc_arm64.h
> > +++ b/lib/librte_hash/rte_crc_arm64.h
> > @@ -5,179 +5,6 @@
> >  #ifndef _RTE_CRC_ARM64_H_
> >  #define _RTE_CRC_ARM64_H_
> >
> > -/**
> > - * @file
> > - *
> > - * RTE CRC arm64 Hash
> > - */
> > -
> > -#ifdef __cplusplus
> > -extern "C" {
> > -#endif
> > -
> > -#include <stdint.h>
> > -#include <rte_cpuflags.h>
> > -#include <rte_branch_prediction.h>
> > -#include <rte_common.h>
> > -
> > -static inline uint32_t
> > -crc32c_arm64_u8(uint8_t data, uint32_t init_val) -{
> > -	__asm__ volatile(
> > -			"crc32cb %w[crc], %w[crc], %w[value]"
> > -			: [crc] "+r" (init_val)
> > -			: [value] "r" (data));
> > -	return init_val;
> > -}
> > -
> > -static inline uint32_t
> > -crc32c_arm64_u16(uint16_t data, uint32_t init_val) -{
> > -	__asm__ volatile(
> > -			"crc32ch %w[crc], %w[crc], %w[value]"
> > -			: [crc] "+r" (init_val)
> > -			: [value] "r" (data));
> > -	return init_val;
> > -}
> > -
> > -static inline uint32_t
> > -crc32c_arm64_u32(uint32_t data, uint32_t init_val) -{
> > -	__asm__ volatile(
> > -			"crc32cw %w[crc], %w[crc], %w[value]"
> > -			: [crc] "+r" (init_val)
> > -			: [value] "r" (data));
> > -	return init_val;
> > -}
> > -
> > -static inline uint32_t
> > -crc32c_arm64_u64(uint64_t data, uint32_t init_val) -{
> > -	__asm__ volatile(
> > -			"crc32cx %w[crc], %w[crc], %x[value]"
> > -			: [crc] "+r" (init_val)
> > -			: [value] "r" (data));
> > -	return init_val;
> > -}
> > -
> > -/**
> > - * Allow or disallow use of arm64 SIMD instrinsics for CRC32 hash
> > - * calculation.
> > - *
> > - * @param alg
> > - *   An OR of following flags:
> > - *   - (CRC32_SW) Don't use arm64 crc intrinsics
> > - *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
> > - *
> > - */
> > -static inline void
> > -rte_hash_crc_set_alg(uint8_t alg)
> > -{
> > -	switch (alg) {
> > -	case CRC32_ARM64:
> > -		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
> > -			alg = CRC32_SW;
> > -		/* fall-through */
> > -	case CRC32_SW:
> > -		crc32_alg = alg;
> > -		/* fall-through */
> > -	default:
> > -		break;
> > -	}
> > -}
> > -
> > -/* Setting the best available algorithm */
> > -RTE_INIT(rte_hash_crc_init_alg)
> > -{
> > -	rte_hash_crc_set_alg(CRC32_ARM64);
> > -}
> > -
> > -/**
> > - * Use single crc32 instruction to perform a hash on a 1 byte value.
> > - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> > - * not supported
> > - *
> > - * @param data
> > - *   Data to perform hash on.
> > - * @param init_val
> > - *   Value to initialise hash generator.
> > - * @return
> > - *   32bit calculated hash value.
> > - */
> > -static inline uint32_t
> > -rte_hash_crc_1byte(uint8_t data, uint32_t init_val) -{
> > -	if (likely(crc32_alg & CRC32_ARM64))
> > -		return crc32c_arm64_u8(data, init_val);
> > -
> > -	return crc32c_1byte(data, init_val);
> > -}
> > -
> > -/**
> > - * Use single crc32 instruction to perform a hash on a 2 bytes value.
> > - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> > - * not supported
> > - *
> > - * @param data
> > - *   Data to perform hash on.
> > - * @param init_val
> > - *   Value to initialise hash generator.
> > - * @return
> > - *   32bit calculated hash value.
> > - */
> > -static inline uint32_t
> > -rte_hash_crc_2byte(uint16_t data, uint32_t init_val) -{
> > -	if (likely(crc32_alg & CRC32_ARM64))
> > -		return crc32c_arm64_u16(data, init_val);
> > -
> > -	return crc32c_2bytes(data, init_val);
> > -}
> > -
> > -/**
> > - * Use single crc32 instruction to perform a hash on a 4 byte value.
> > - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> > - * not supported
> > - *
> > - * @param data
> > - *   Data to perform hash on.
> > - * @param init_val
> > - *   Value to initialise hash generator.
> > - * @return
> > - *   32bit calculated hash value.
> > - */
> > -static inline uint32_t
> > -rte_hash_crc_4byte(uint32_t data, uint32_t init_val) -{
> > -	if (likely(crc32_alg & CRC32_ARM64))
> > -		return crc32c_arm64_u32(data, init_val);
> > -
> > -	return crc32c_1word(data, init_val);
> > -}
> > -
> > -/**
> > - * Use single crc32 instruction to perform a hash on a 8 byte value.
> > - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> > - * not supported
> > - *
> > - * @param data
> > - *   Data to perform hash on.
> > - * @param init_val
> > - *   Value to initialise hash generator.
> > - * @return
> > - *   32bit calculated hash value.
> > - */
> > -static inline uint32_t
> > -rte_hash_crc_8byte(uint64_t data, uint32_t init_val) -{
> > -	if (likely(crc32_alg == CRC32_ARM64))
> > -		return crc32c_arm64_u64(data, init_val);
> > -
> > -	return crc32c_2words(data, init_val);
> > -}
> > -
> > -#ifdef __cplusplus
> > -}
> > -#endif
> > +#include "rte_hash_crc.h"
> >
> >  #endif /* _RTE_CRC_ARM64_H_ */
> > diff --git a/lib/librte_hash/rte_hash_crc.h b/lib/librte_hash/rte_hash_crc.h
> > index cf28031b3..eaba70c12 100644
> > --- a/lib/librte_hash/rte_hash_crc.h
> > +++ b/lib/librte_hash/rte_hash_crc.h
> > @@ -16,10 +16,12 @@ extern "C" {
> >  #endif
> >
> >  #include <stdint.h>
> > -#include <rte_config.h>
> > -#include <rte_cpuflags.h>
> > +
> >  #include <rte_branch_prediction.h>
> >  #include <rte_common.h>
> > +#include <rte_config.h>
> > +#include <rte_cpuflags.h>
> > +#include <rte_log.h>
> >
> >  /* Lookup tables for software implementation of CRC32C */  static const
> > uint32_t crc32c_tables[8][256] = {{ @@ -322,7 +324,7 @@
> > crc32c_2bytes(uint16_t data, uint32_t init_val)  }
> >
> >  static inline uint32_t
> > -crc32c_1word(uint32_t data, uint32_t init_val)
> > +crc32c_4bytes(uint32_t data, uint32_t init_val)
> >  {
> >  	uint32_t crc, term1, term2;
> >  	crc = init_val;
> > @@ -336,7 +338,7 @@ crc32c_1word(uint32_t data, uint32_t init_val)  }
> >
> >  static inline uint32_t
> > -crc32c_2words(uint64_t data, uint32_t init_val)
> > +crc32c_8bytes(uint64_t data, uint32_t init_val)
> >  {
> >  	uint32_t crc, term1, term2;
> >  	union {
> > @@ -358,6 +360,48 @@ crc32c_2words(uint64_t data, uint32_t init_val)
> >  	return crc;
> >  }
> >
> > +#if defined(RTE_ARCH_ARM64) &&
> > defined(RTE_MACHINE_CPUFLAG_CRC32)
> > +static inline uint32_t
> > +crc32c_arm64_u8(uint8_t data, uint32_t init_val) {
> > +	__asm__ volatile(
> > +			"crc32cb %w[crc], %w[crc], %w[value]"
> > +			: [crc] "+r" (init_val)
> > +			: [value] "r" (data));
> > +	return init_val;
> > +}
> > +
> > +static inline uint32_t
> > +crc32c_arm64_u16(uint16_t data, uint32_t init_val) {
> > +	__asm__ volatile(
> > +			"crc32ch %w[crc], %w[crc], %w[value]"
> > +			: [crc] "+r" (init_val)
> > +			: [value] "r" (data));
> > +	return init_val;
> > +}
> > +
> > +static inline uint32_t
> > +crc32c_arm64_u32(uint32_t data, uint32_t init_val) {
> > +	__asm__ volatile(
> > +			"crc32cw %w[crc], %w[crc], %w[value]"
> > +			: [crc] "+r" (init_val)
> > +			: [value] "r" (data));
> > +	return init_val;
> > +}
> > +
> > +static inline uint32_t
> > +crc32c_arm64_u64(uint64_t data, uint32_t init_val) {
> > +	__asm__ volatile(
> > +			"crc32cx %w[crc], %w[crc], %x[value]"
> > +			: [crc] "+r" (init_val)
> > +			: [value] "r" (data));
> > +	return init_val;
> > +}
> > +#endif
> > +
> >  #if defined(RTE_ARCH_X86)
> >  static inline uint32_t
> >  crc32c_sse42_u8(uint8_t data, uint32_t init_val) @@ -424,42 +468,69 @@
> > crc32c_sse42_u64(uint64_t data, uint64_t init_val)
> >
> >  static uint8_t crc32_alg = CRC32_SW;
> >
> > -#if defined(RTE_ARCH_ARM64) &&
> > defined(RTE_MACHINE_CPUFLAG_CRC32)
> > -#include "rte_crc_arm64.h"
> > -#else
> > -
> >  /**
> > - * Allow or disallow use of SSE4.2 instrinsics for CRC32 hash
> > + * Allow or disallow use of SSE4.2/ARMv8 instrinsics for CRC32 hash
> >   * calculation.
> >   *
> >   * @param alg
> >   *   An OR of following flags:
> > - *   - (CRC32_SW) Don't use SSE4.2 intrinsics
> > + *   - (CRC32_SW) Don't use SSE4.2 intrinsics (default non-[x86/ARMv8])
> >   *   - (CRC32_SSE42) Use SSE4.2 intrinsics if available
> > - *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default)
> > - *
> > + *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default x86)
> > + *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
> >   */
> >  static inline void
> >  rte_hash_crc_set_alg(uint8_t alg)
> >  {
> > -#if defined(RTE_ARCH_X86)
> > -	if (alg == CRC32_SSE42_x64 &&
> > -			!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
> > -		alg = CRC32_SSE42;
> > +	switch (alg) {
> > +	case CRC32_SSE42_x64:
> > +	case CRC32_SSE42:
> > +#if defined RTE_ARCH_X86
> > +		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
> > +			crc32_alg = CRC32_SSE42;
> > +		else
> > +			crc32_alg = alg;
> > +#endif
> > +#if defined RTE_ARCH_ARM64
> > +		RTE_LOG(WARNING, HASH,
> > +			"Incorrect CRC32 algorithm requested setting best"
> > +			"available algorithm on the architecture\n");
> > +		rte_hash_crc_set_alg(CRC32_ARM64);
> > +#endif
> > +		break;
> > +	case CRC32_ARM64:
> > +#if defined RTE_ARCH_ARM64
> > +		if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
> > +			crc32_alg = CRC32_ARM64;
> >  #endif
> > -	crc32_alg = alg;
> > +#if defined RTE_ARCH_X86
> > +		RTE_LOG(WARNING, HASH,
> > +			"Incorrect CRC32 algorithm requested setting best"
> > +			"available algorithm on the architecture\n");
> > +		rte_hash_crc_set_alg(CRC32_SSE42_x64);
> > +#endif
> > +		break;
> > +	case CRC32_SW:
> > +	default:
> > +		crc32_alg = CRC32_SW;
> > +	break;
> > +	}
> >  }
> >
> >  /* Setting the best available algorithm */
> >  RTE_INIT(rte_hash_crc_init_alg)
> >  {
> > +#if defined RTE_ARCH_X86
> >  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> > +#elif defined RTE_ARCH_ARM64
> > +	rte_hash_crc_set_alg(CRC32_ARM64);
> > +#else
> > +	rte_hash_crc_set_alg(CRC32_SW);
> > +#endif
> >  }
> >
> >  /**
> > - * Use single crc32 instruction to perform a hash on a byte value.
> > - * Fall back to software crc32 implementation in case SSE4.2 is
> > - * not supported
> > + * Calculate crc32 hash value of 1bytes.
> >   *
> >   * @param data
> >   *   Data to perform hash on.
> > @@ -474,15 +545,15 @@ rte_hash_crc_1byte(uint8_t data, uint32_t init_val)
> > #if defined RTE_ARCH_X86
> >  	if (likely(crc32_alg & CRC32_SSE42))
> >  		return crc32c_sse42_u8(data, init_val);
> > +#elif defined RTE_ARCH_ARM64
> > +	if (likely(crc32_alg & CRC32_ARM64))
> > +		return crc32c_arm64_u8(data, init_val);
> >  #endif
> > -
> >  	return crc32c_1byte(data, init_val);
> >  }
> >
> >  /**
> > - * Use single crc32 instruction to perform a hash on a 2 bytes value.
> > - * Fall back to software crc32 implementation in case SSE4.2 is
> > - * not supported
> > + * Calculate crc32 hash value of 2bytes.
> >   *
> >   * @param data
> >   *   Data to perform hash on.
> > @@ -497,15 +568,15 @@ rte_hash_crc_2byte(uint16_t data, uint32_t init_val)
> > #if defined RTE_ARCH_X86
> >  	if (likely(crc32_alg & CRC32_SSE42))
> >  		return crc32c_sse42_u16(data, init_val);
> > +#elif defined RTE_ARCH_ARM64
> > +	if (likely(crc32_alg & CRC32_ARM64))
> > +		return crc32c_arm64_u16(data, init_val);
> >  #endif
> > -
> >  	return crc32c_2bytes(data, init_val);
> >  }
> >
> >  /**
> > - * Use single crc32 instruction to perform a hash on a 4 byte value.
> > - * Fall back to software crc32 implementation in case SSE4.2 is
> > - * not supported
> > + * Calculate crc32 hash value of 4bytes.
> >   *
> >   * @param data
> >   *   Data to perform hash on.
> > @@ -520,15 +591,15 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
> > #if defined RTE_ARCH_X86
> >  	if (likely(crc32_alg & CRC32_SSE42))
> >  		return crc32c_sse42_u32(data, init_val);
> > +#elif defined RTE_ARCH_ARM64
> > +	if (likely(crc32_alg & CRC32_ARM64))
> > +		return crc32c_arm64_u32(data, init_val);
> >  #endif
> > -
> > -	return crc32c_1word(data, init_val);
> > +	return crc32c_4bytes(data, init_val);
> >  }
> >
> >  /**
> > - * Use single crc32 instruction to perform a hash on a 8 byte value.
> > - * Fall back to software crc32 implementation in case SSE4.2 is
> > - * not supported
> > + * Calculate crc32 hash value of 8bytes.
> >   *
> >   * @param data
> >   *   Data to perform hash on.
> > @@ -540,21 +611,19 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
> > static inline uint32_t  rte_hash_crc_8byte(uint64_t data, uint32_t init_val)  { -
> > #ifdef RTE_ARCH_X86_64
> > -	if (likely(crc32_alg == CRC32_SSE42_x64))
> > +#if defined RTE_ARCH_X86_64
> > +	if (likely(crc32_alg & CRC32_SSE42_x64))
> >  		return crc32c_sse42_u64(data, init_val); -#endif
> > -
> > -#if defined RTE_ARCH_X86
> > +#elif defined RTE_ARCH_X86
> >  	if (likely(crc32_alg & CRC32_SSE42))
> >  		return crc32c_sse42_u64_mimic(data, init_val);
> > +#elif defined RTE_ARCH_ARM64
> > +	if (likely(crc32_alg & CRC32_ARM64))
> > +		return crc32c_arm64_u64(data, init_val);
> >  #endif
> > -
> > -	return crc32c_2words(data, init_val);
> > +	return crc32c_8bytes(data, init_val);
> >  }
> >
> > -#endif
> > -
> >  /**
> >   * Calculate CRC32 hash on user-supplied byte array.
> >   *
> > --
> > 2.17.1


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v2 01/12] common/dpaax: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
                     ` (5 preceding siblings ...)
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 09/12] net/dpaa: " Hemant Agrawal
@ 2020-05-13 12:44  4%   ` Thomas Monjalon
    7 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-13 12:44 UTC (permalink / raw)
  To: Hemant Agrawal; +Cc: dev, david.marchand, mdr

12/05/2020 16:00, Hemant Agrawal:
> This patch moves the internal symbols to INTERNAL sections
> so that any change in them is not reported as ABI breakage.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
> ---
>  drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
>  drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
>  drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
>  3 files changed, 20 insertions(+), 1 deletion(-)

It is missing an exception in devtools/libabigail.abignore.
Are you running ABI check on those patches?

+Cc Ray, maintainer of ABI stuff.



^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH v1] doc: fix typos and errors in abi policy doc
@ 2020-05-13 10:43 36% Gaetan Rivet
  2020-05-14  6:40  4% ` Ray Kinsella
  0 siblings, 1 reply; 200+ results
From: Gaetan Rivet @ 2020-05-13 10:43 UTC (permalink / raw)
  To: dev; +Cc: Ray Kinsella, Neil Horman

Some errors in the document:

  * API instead of ABI once.

Some typos:

  * __rte_depreciated instead of __rte_deprecated.
  * missing ```` around value.
  * inconsistent reference to major ABI version, most
    of the time described without the minor appended, except once.

Verbosity and grammar:

  * Long sentences that would be better cut short.
  * Comma abuse.
  * 'May' used where 'can' seems more fitting.

I'm not a native speaker though, so grain of salt applies.

Fixes: fdf7471cccb8 ("doc: introduce major ABI versions")
Cc: Ray Kinsella <mdr@ashroe.eu>
cc: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Gaetan Rivet <grive@u256.net>
---
 doc/guides/contributing/abi_policy.rst | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
index 05ca95980..2198519d9 100644
--- a/doc/guides/contributing/abi_policy.rst
+++ b/doc/guides/contributing/abi_policy.rst
@@ -220,19 +220,18 @@ Examples of ABI Changes
 The following are examples of allowable ABI changes occurring between
 declarations of major ABI versions.
 
-* DPDK 19.11 release, defines the function ``rte_foo()``, and ``rte_foo()``
-  as part of the major ABI version ``20``.
+* DPDK 19.11 release defines the function ``rte_foo()`` ; ``rte_foo()``
+  is part of the major ABI version ``20``.
 
-* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``, and
-  this is not a problem as long as the symbol ``rte_foo@DPDK20`` is
+* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``.
+  This is not a problem as long as the symbol ``rte_foo@DPDK20`` is
   preserved through :ref:`abi_versioning`.
 
   - The new function may be marked with the ``__rte_experimental`` tag for a
     number of releases, as described in the section :ref:`experimental_apis`.
 
-  - Once ``rte_foo(uint8_t bar)`` becomes non-experimental ``rte_foo()`` is then
-    declared as ``__rte_depreciated``, with an associated deprecation notice
-    provided.
+  - Once ``rte_foo(uint8_t bar)`` becomes non-experimental, ``rte_foo()`` is
+    declared as ``__rte_deprecated`` and an deprecation notice is provided.
 
 * DPDK 19.11 is not re-released to include ``rte_foo(uint8_t bar)``, the new
   version of ``rte_foo`` only exists from DPDK 20.02 onwards as described in the
@@ -242,13 +241,13 @@ declarations of major ABI versions.
   rte_baz()``. This function may or may not exist in the DPDK 20.05 release.
 
 * An application ``dPacket`` wishes to use ``rte_foo(uint8_t bar)``, before the
-  declaration of the DPDK ``21`` major API version. The application can only
+  declaration of the DPDK ``21`` major ABI version. The application can only
   ensure its runtime dependencies are met by specifying ``DPDK (>= 20.2)`` as
-  an explicit package dependency, as the soname only may only indicate the
+  an explicit package dependency, as the soname can only indicate the
   supported major ABI version.
 
 * At the release of DPDK 20.11, the function ``rte_foo(uint8_t bar)`` becomes
-  formally part of then new major ABI version DPDK 21.0 and ``rte_foo()`` may be
+  formally part of then new major ABI version DPDK ``21`` and ``rte_foo()`` may be
   removed.
 
 .. _deprecation_notices:
@@ -322,6 +321,6 @@ Libraries
 
 Libraries marked as ``experimental`` are entirely not considered part of an ABI
 version, and may change without warning at any time. Experimental libraries
-always have a major version of ``0`` to indicate they exist outside of
+always have a major ABI version of ``0`` to indicate they exist outside of
 :ref:`abi_versioning` , with the minor version incremented with each ABI change
 to library.
-- 
2.26.2


^ permalink raw reply	[relevance 36%]

* [dpdk-dev] [PATCH v1] doc: remove deprecation notice about old devargs changes
@ 2020-05-13 10:42  4% Gaetan Rivet
  0 siblings, 0 replies; 200+ results
From: Gaetan Rivet @ 2020-05-13 10:42 UTC (permalink / raw)
  To: dev

When modifying the rte_devargs implementation, a deprecation notice was
done for v18.11, regarding internal rte_devargs structure and exposed
functions.

Most of the changes were part of v18.11, but the notice was not removed.

Signed-off-by: Gaetan Rivet <grive@u256.net>
---
 doc/guides/rel_notes/deprecation.rst | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index 20aa745b7..d49a329fa 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -23,17 +23,6 @@ Deprecation Notices
 * eal: The function ``rte_eal_remote_launch`` will return new error codes
   after read or write error on the pipe, instead of calling ``rte_panic``.
 
-* eal: both declaring and identifying devices will be streamlined in v18.11.
-  New functions will appear to query a specific port from buses, classes of
-  device and device drivers. Device declaration will be made coherent with the
-  new scheme of device identification.
-  As such, ``rte_devargs`` device representation will change.
-
-  - The enum ``rte_devtype`` was used to identify a bus and will disappear.
-  - Functions previously deprecated will change or disappear:
-
-    + ``rte_eal_devargs_type_count``
-
 * eal: The ``rte_logs`` struct and global symbol will be made private to
   remove it from the externally visible ABI and allow it to be updated in the
   future.
-- 
2.26.2


^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH v3 2/2] mempool/octeontx2: move internal symbols to INTERNAL section
  2020-05-13  9:55  3%   ` [dpdk-dev] [PATCH v3 1/2] common/octeontx2: " pbhagavatula
@ 2020-05-13  9:55  3%     ` pbhagavatula
  0 siblings, 0 replies; 200+ results
From: pbhagavatula @ 2020-05-13  9:55 UTC (permalink / raw)
  To: jerinj, aostruszka, thomas, david.marchand, mdr, Neil Horman,
	Nithin Dabilpuram
  Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 devtools/libabigail.abignore                                | 4 +++-
 drivers/mempool/octeontx2/otx2_mempool.h                    | 2 ++
 drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 39a76fe9a..e2ca73db2 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -49,6 +49,8 @@
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
 
-; Ignore moving internal OCTEONTX2 stable functions to INTERNAL tag
+; Ignore moving OCTEONTX2 stable functions to INTERNAL tag
 [suppress_file]
 	file_name_regexp = ^librte_common_octeontx2\.
+[suppress_file]
+	file_name_regexp = ^librte_mempool_octeontx2\.
diff --git a/drivers/mempool/octeontx2/otx2_mempool.h b/drivers/mempool/octeontx2/otx2_mempool.h
index adcc0db24..8aa548248 100644
--- a/drivers/mempool/octeontx2/otx2_mempool.h
+++ b/drivers/mempool/octeontx2/otx2_mempool.h
@@ -206,7 +206,9 @@ npa_lf_aura_op_range_set(uint64_t aura_handle, uint64_t start_iova,
 }
 
 /* NPA LF */
+__rte_internal
 int otx2_npa_lf_init(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_npa_lf_fini(void);
 
 /* IRQ */
diff --git a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
index d4f81aed8..e6887ceb8 100644
--- a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
+++ b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	otx2_npa_lf_fini;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v3 1/2] common/octeontx2: move internal symbols to INTERNAL section
  2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
  2020-05-13  1:04  3%   ` [dpdk-dev] [PATCH v2 2/2] mempool/octeontx2: " pbhagavatula
@ 2020-05-13  9:55  3%   ` pbhagavatula
  2020-05-13  9:55  3%     ` [dpdk-dev] [PATCH v3 2/2] mempool/octeontx2: " pbhagavatula
  2020-05-14  7:02  0%   ` [dpdk-dev] [PATCH v2 1/2] common/octeontx2: " Ray Kinsella
  2 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2020-05-13  9:55 UTC (permalink / raw)
  To: jerinj, aostruszka, thomas, david.marchand, mdr, Neil Horman,
	Nithin Dabilpuram, Anoob Joseph
  Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v3 Changes:
  - Use `file_name_regexp` insted of `soname_regexp` in supress list for
  backward compatibility of libabigail.

 v2 Changes:
  - Sort version map alphabetically
  - Add libabigail ignore tag for OCTEONTX2

 devtools/libabigail.abignore                  |  4 +++
 drivers/common/octeontx2/otx2_common.h        |  8 ++++++
 drivers/common/octeontx2/otx2_dev.h           |  3 +++
 drivers/common/octeontx2/otx2_irq.h           |  3 +++
 drivers/common/octeontx2/otx2_mbox.h          |  6 +++++
 drivers/common/octeontx2/otx2_sec_idev.h      |  6 +++++
 .../rte_common_octeontx2_version.map          | 26 ++++++-------------
 7 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3..39a76fe9a 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,7 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+
+; Ignore moving internal OCTEONTX2 stable functions to INTERNAL tag
+[suppress_file]
+	file_name_regexp = ^librte_common_octeontx2\.
diff --git a/drivers/common/octeontx2/otx2_common.h b/drivers/common/octeontx2/otx2_common.h
index e62cdea07..174702687 100644
--- a/drivers/common/octeontx2/otx2_common.h
+++ b/drivers/common/octeontx2/otx2_common.h
@@ -62,13 +62,21 @@ struct otx2_idev_cfg {
 	};
 };

+__rte_internal
 struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
+__rte_internal
 void otx2_sso_pf_func_set(uint16_t sso_pf_func);
+__rte_internal
 uint16_t otx2_sso_pf_func_get(void);
+__rte_internal
 uint16_t otx2_npa_pf_func_get(void);
+__rte_internal
 struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
+__rte_internal
 void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
+__rte_internal
 int otx2_npa_lf_active(void *dev);
+__rte_internal
 int otx2_npa_lf_obj_ref(void);

 /* Log */
diff --git a/drivers/common/octeontx2/otx2_dev.h b/drivers/common/octeontx2/otx2_dev.h
index 13b75e118..cd4fe517d 100644
--- a/drivers/common/octeontx2/otx2_dev.h
+++ b/drivers/common/octeontx2/otx2_dev.h
@@ -94,6 +94,7 @@ struct otx2_dev {
 	OTX2_DEV;
 };

+__rte_internal
 int otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev);

 /* Common dev init and fini routines */
@@ -116,7 +117,9 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
 	return otx2_dev_priv_init(pci_dev, otx2_dev);
 }

+__rte_internal
 void otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_dev_active_vfs(void *otx2_dev);

 #define RVU_PFVF_PF_SHIFT	10
diff --git a/drivers/common/octeontx2/otx2_irq.h b/drivers/common/octeontx2/otx2_irq.h
index 9d326276e..0683cf554 100644
--- a/drivers/common/octeontx2/otx2_irq.h
+++ b/drivers/common/octeontx2/otx2_irq.h
@@ -16,10 +16,13 @@ typedef struct {
 	uint64_t bits[MAX_VFPF_DWORD_BITS];
 } otx2_intr_t;

+__rte_internal
 int otx2_register_irq(struct rte_intr_handle *intr_handle,
 		      rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 void otx2_unregister_irq(struct rte_intr_handle *intr_handle,
 			 rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 int otx2_disable_irqs(struct rte_intr_handle *intr_handle);

 #endif /* _OTX2_IRQ_H_ */
diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
index 80778a0be..7fa4276e9 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -1617,19 +1617,25 @@ struct tim_enable_rsp {
 	uint32_t __otx2_io currentbucket;
 };

+__rte_internal
 const char *otx2_mbox_id2name(uint16_t id);
 int otx2_mbox_id2size(uint16_t id);
 void otx2_mbox_reset(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base,
 		   int direction, int ndevsi, uint64_t intr_offset);
 void otx2_mbox_fini(struct otx2_mbox *mbox);
+__rte_internal
 void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid);
+__rte_internal
 int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo);
+__rte_internal
 int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg);
+__rte_internal
 int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg,
 			  uint32_t tmo);
 int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid);
+__rte_internal
 struct mbox_msghdr *otx2_mbox_alloc_msg_rsp(struct otx2_mbox *mbox, int devid,
 					    int size, int size_rsp);

diff --git a/drivers/common/octeontx2/otx2_sec_idev.h b/drivers/common/octeontx2/otx2_sec_idev.h
index c681f5094..89cdaf66a 100644
--- a/drivers/common/octeontx2/otx2_sec_idev.h
+++ b/drivers/common/octeontx2/otx2_sec_idev.h
@@ -22,16 +22,22 @@ struct otx2_sec_idev_cfg {
 	rte_spinlock_t tx_cpt_lock;
 };

+__rte_internal
 uint8_t otx2_eth_dev_is_sec_capable(struct rte_eth_dev *eth_dev);

+__rte_internal
 int otx2_sec_idev_cfg_init(int port_id);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_add(uint16_t port_id, struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_remove(struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_put(struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_get(uint16_t port_id, struct otx2_cpt_qp **qp);

 #endif /* _OTX2_SEC_IDEV_H_ */
diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
index 01279c339..7621a59ad 100644
--- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
+++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
@@ -1,13 +1,15 @@
-DPDK_20.0 {
+INTERNAL {
 	global:

 	otx2_dev_active_vfs;
 	otx2_dev_fini;
 	otx2_dev_priv_init;
 	otx2_disable_irqs;
+	otx2_eth_dev_is_sec_capable;
 	otx2_intra_dev_get_cfg;
 	otx2_logtype_base;
 	otx2_logtype_dpi;
+	otx2_logtype_ep;
 	otx2_logtype_mbox;
 	otx2_logtype_nix;
 	otx2_logtype_npa;
@@ -27,26 +29,14 @@ DPDK_20.0 {
 	otx2_npa_pf_func_get;
 	otx2_npa_set_defaults;
 	otx2_register_irq;
-	otx2_sso_pf_func_get;
-	otx2_sso_pf_func_set;
-	otx2_unregister_irq;
-
-	local: *;
-};
-
-DPDK_21 {
-	global:
-
-	otx2_eth_dev_is_sec_capable;
 	otx2_sec_idev_cfg_init;
 	otx2_sec_idev_tx_cpt_qp_add;
-	otx2_sec_idev_tx_cpt_qp_remove;
 	otx2_sec_idev_tx_cpt_qp_get;
 	otx2_sec_idev_tx_cpt_qp_put;
-} DPDK_20.0;
-
-EXPERIMENTAL {
-	global:
+	otx2_sec_idev_tx_cpt_qp_remove;
+	otx2_sso_pf_func_get;
+	otx2_sso_pf_func_set;
+	otx2_unregister_irq;

-	otx2_logtype_ep;
+	local: *;
 };
--
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
  @ 2020-05-13  8:57  3%         ` Morten Brørup
  2020-05-13 15:30  0%           ` Honnappa Nagarahalli
  2020-05-13 19:04  0%           ` Mattias Rönnblom
  0 siblings, 2 replies; 200+ results
From: Morten Brørup @ 2020-05-13  8:57 UTC (permalink / raw)
  To: Honnappa Nagarahalli, Stephen Hemminger, Phil Yang
  Cc: thomas, dev, bruce.richardson, ferruh.yigit, hemant.agrawal,
	jerinj, ktraynor, konstantin.ananyev, maxime.coquelin,
	olivier.matz, mattias.ronnblom, harry.van.haaren,
	erik.g.carrillo, nd, David Christensen

> From: Honnappa Nagarahalli [mailto:Honnappa.Nagarahalli@arm.com]
> Sent: Tuesday, May 12, 2020 9:24 PM
> 
> <snip>
> 
> Subject: Re: [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics
> 
> On Tue, May 12, 2020 at 4:03 pm, Phil Yang <mailto:phil.yang@arm.com>
> wrote:
> 
> parameter. Signed-off-by: Phil Yang <mailto:phil.yang@arm.com>
> 
> 
> What is the purpose of having rte_atomic at all?
> Is this level of indirection really helping?
> [HONNAPPA] (not sure why this email has html format, converted to text
> format)
> I believe you meant, why not use the __atomic_xxx built-ins directly?
> The only reason for now is handling of
> __atomic_thread_fence(__ATOMIC_SEQ_CST) for x86. This is equivalent to
> rte_smp_mb which has an optimized implementation for x86. According to
> Konstantin, the compiler does not generate optimal code. Wrapping that
> built-in alone is going to be confusing.
> 
> The wrappers also allow us to have our own implementation using inline
> assembly for compilers versions that do not support C11 atomic built-
> ins. But, I do not know if there is a need to support those versions.

If I recall correctly, someone mentioned that one (or more) of the aging enterprise Linux distributions don't include a compiler with C11 atomics.

I think Stephen is onto something here...

It is silly to add wrappers like this, if the only purpose is to support compilers and distributions that don't properly support an official C standard which is nearly a decade old. The quality and quantity of the DPDK documentation for these functions (including examples, discussions on Stack Overflow, etc.) will be inferior to the documentation of the standard C11 atomics, which increases the probability of incorrect use.

And if some compiler generates code that is suboptimal for a user, then it should be the choice of the user to either accept it or use a better compiler. Using a suboptimal compiler will not only affect the user's DPDK applications, but all applications developed by the user. And if he accepts it for his other applications, he will also accept it for his DPDK applications.

We could introduce some sort of marker or standardized comment to indicate when functions only exist for backwards compatibility with ancient compilers and similar, with a reference to documentation describing why. And when the documented preconditions are no longer relevant, e.g. when those particular enterprise Linux distributions become obsolete, these functions become obsolete too, and should be removed. However, getting rid of obsolete cruft will break the ABI. In other words: Added cruft will never be removed again, so think twice before adding.


Med venlig hilsen / kind regards
- Morten Brørup




^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [Bug 471] failing to build test from app/test
@ 2020-05-13  8:24  3% bugzilla
  0 siblings, 0 replies; 200+ results
From: bugzilla @ 2020-05-13  8:24 UTC (permalink / raw)
  To: dev

https://bugs.dpdk.org/show_bug.cgi?id=471

            Bug ID: 471
           Summary: failing to build test from app/test
           Product: DPDK
           Version: 20.05
          Hardware: x86
                OS: Linux
            Status: UNCONFIRMED
          Severity: critical
          Priority: Normal
         Component: other
          Assignee: dev@dpdk.org
          Reporter: vipin.varghese@intel.com
  Target Milestone: ---

DPDK:20.05-rc2
Linux:4.15.0-99-generic 
GCC: Ubuntu 7.5.0-3ubuntu1~18.04
Distribution: Ubuntu 18.04.4 LTS

Steps:
1. fetch from git the right version of DPDK.
2. default build for `x86_64-native-linuxapp-gcc`
3. move to the directory `$RTE_SDK/app/test`
4. execute make

Error Log:
```
t# make
  CC commands.o
commands.c: In function ‘cmd_dump_parsed’:
commands.c:137:3: error: ‘rte_malloc_dump_heaps’ is deprecated: Symbol is not
yet part of stable ABI [-Werror=deprecated-declarations]
   rte_malloc_dump_heaps(stdout);
   ^~~~~~~~~~~~~~~~~~~~~
In file included from commands.c:31:0:
/home/saesrv02/Downloads/dpdksrc/dpdk/x86_64-native-linuxapp-gcc/include/rte_malloc.h:524:1:
note: declared here
 rte_malloc_dump_heaps(FILE *f);
 ^~~~~~~~~~~~~~~~~~~~~
commands.c: At top level:
cc1: error: unrecognized command line option ‘-Wno-address-of-packed-member’
[-Werror]
cc1: all warnings being treated as errors
/home/saesrv02/Downloads/dpdksrc/dpdk/mk/internal/rte.compile-pre.mk:114:
recipe for target 'commands.o' failed
make: *** [commands.o] Error 1

```

-- 
You are receiving this mail because:
You are the assignee for the bug.

^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [RFC v2] hash: unify crc32 API header for x86 and ARM
  2020-05-12 20:40  3% ` [dpdk-dev] [RFC v2] " pbhagavatula
@ 2020-05-13  3:04  3%   ` Ruifeng Wang
  2020-05-13 13:22  0%     ` Ananyev, Konstantin
  0 siblings, 1 reply; 200+ results
From: Ruifeng Wang @ 2020-05-13  3:04 UTC (permalink / raw)
  To: pbhagavatula, jerinj, konstantin.ananyev, harry.van.haaren,
	Yipeng Wang, Sameh Gobriel, Bruce Richardson
  Cc: dev, nd


> -----Original Message-----
> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Wednesday, May 13, 2020 4:40 AM
> To: jerinj@marvell.com; konstantin.ananyev@intel.com;
> harry.van.haaren@intel.com; Yipeng Wang <yipeng1.wang@intel.com>;
> Sameh Gobriel <sameh.gobriel@intel.com>; Bruce Richardson
> <bruce.richardson@intel.com>; Ruifeng Wang <Ruifeng.Wang@arm.com>
> Cc: dev@dpdk.org; Pavan Nikhilesh <pbhagavatula@marvell.com>
> Subject: [dpdk-dev] [RFC v2] hash: unify crc32 API header for x86 and ARM
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Merge crc32 hash calculation public API headers for x86 and ARM.
> Select the best available CRC32 algorithm when unsupported algorithm on a
> given CPU architecture is requested by an application.
> 
> Previously, if an application directly includes `rte_crc_arm64.h` without
> including `rte_hash_crc.h` it will fail to compile.
> Although, `rte_crc_arm64.h` is no longer needed make it a dummy file for
> ABI purposes.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  v2 Changes:
>  - Don't remove `rte_crc_arm64.h` for ABI purposes.
>  - Revert function pointer approach for performance reasons.
>  - Select the best available algorithm based on the arch when user passes an
> unsupported crc32 algorithm.
> 
Maybe split the patch? Changes to select the best available algorithm can be a separate one.

More ifdefs are added. Is it possible to have arch specific rte_hash_crc_xx implementations
like what was done in rte_crc_arm64.h, and include specific headers according to arch in rte_hash.crc.h?
For ABI purpose, rte_crc_arm64.h can be kept and it only includes the new arm64 specific header.

>  app/test/test_hash.c            |   6 ++
>  lib/librte_hash/meson.build     |   6 +-
>  lib/librte_hash/rte_crc_arm64.h | 175 +-------------------------------
> lib/librte_hash/rte_hash_crc.h  | 153 ++++++++++++++++++++--------
>  4 files changed, 122 insertions(+), 218 deletions(-)
> 
> diff --git a/app/test/test_hash.c b/app/test/test_hash.c index
> afa3a1a3c..7bd457dac 100644
> --- a/app/test/test_hash.c
> +++ b/app/test/test_hash.c
> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>  	}
> 
>  	/* Resetting to best available algorithm */
> +#if defined RTE_ARCH_X86
>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> +#elif defined RTE_ARCH_ARM64
> +	rte_hash_crc_set_alg(CRC32_ARM64);
> +#else
> +	rte_hash_crc_set_alg(CRC32_SW);
> +#endif
> 
>  	if (i == CRC32_ITERATIONS)
>  		return 0;
> diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build index
> 6ab46ae9d..8a3cf2f64 100644
> --- a/lib/librte_hash/meson.build
> +++ b/lib/librte_hash/meson.build
> @@ -1,12 +1,14 @@
>  # SPDX-License-Identifier: BSD-3-Clause  # Copyright(c) 2017 Intel
> Corporation
> 
> -headers = files('rte_crc_arm64.h',
> -	'rte_fbk_hash.h',
> +headers = files('rte_fbk_hash.h',
>  	'rte_hash_crc.h',
>  	'rte_hash.h',
>  	'rte_jhash.h',
>  	'rte_thash.h')
> +if dpdk_conf.has('RTE_ARCH_ARM64')
> +	headers += files('rte_crc_arm64.h')
> +endif
> 
>  sources = files('rte_cuckoo_hash.c', 'rte_fbk_hash.c')  deps += ['ring'] diff --
> git a/lib/librte_hash/rte_crc_arm64.h b/lib/librte_hash/rte_crc_arm64.h
> index b4628cfc0..adfcafc7d 100644
> --- a/lib/librte_hash/rte_crc_arm64.h
> +++ b/lib/librte_hash/rte_crc_arm64.h
> @@ -5,179 +5,6 @@
>  #ifndef _RTE_CRC_ARM64_H_
>  #define _RTE_CRC_ARM64_H_
> 
> -/**
> - * @file
> - *
> - * RTE CRC arm64 Hash
> - */
> -
> -#ifdef __cplusplus
> -extern "C" {
> -#endif
> -
> -#include <stdint.h>
> -#include <rte_cpuflags.h>
> -#include <rte_branch_prediction.h>
> -#include <rte_common.h>
> -
> -static inline uint32_t
> -crc32c_arm64_u8(uint8_t data, uint32_t init_val) -{
> -	__asm__ volatile(
> -			"crc32cb %w[crc], %w[crc], %w[value]"
> -			: [crc] "+r" (init_val)
> -			: [value] "r" (data));
> -	return init_val;
> -}
> -
> -static inline uint32_t
> -crc32c_arm64_u16(uint16_t data, uint32_t init_val) -{
> -	__asm__ volatile(
> -			"crc32ch %w[crc], %w[crc], %w[value]"
> -			: [crc] "+r" (init_val)
> -			: [value] "r" (data));
> -	return init_val;
> -}
> -
> -static inline uint32_t
> -crc32c_arm64_u32(uint32_t data, uint32_t init_val) -{
> -	__asm__ volatile(
> -			"crc32cw %w[crc], %w[crc], %w[value]"
> -			: [crc] "+r" (init_val)
> -			: [value] "r" (data));
> -	return init_val;
> -}
> -
> -static inline uint32_t
> -crc32c_arm64_u64(uint64_t data, uint32_t init_val) -{
> -	__asm__ volatile(
> -			"crc32cx %w[crc], %w[crc], %x[value]"
> -			: [crc] "+r" (init_val)
> -			: [value] "r" (data));
> -	return init_val;
> -}
> -
> -/**
> - * Allow or disallow use of arm64 SIMD instrinsics for CRC32 hash
> - * calculation.
> - *
> - * @param alg
> - *   An OR of following flags:
> - *   - (CRC32_SW) Don't use arm64 crc intrinsics
> - *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
> - *
> - */
> -static inline void
> -rte_hash_crc_set_alg(uint8_t alg)
> -{
> -	switch (alg) {
> -	case CRC32_ARM64:
> -		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
> -			alg = CRC32_SW;
> -		/* fall-through */
> -	case CRC32_SW:
> -		crc32_alg = alg;
> -		/* fall-through */
> -	default:
> -		break;
> -	}
> -}
> -
> -/* Setting the best available algorithm */
> -RTE_INIT(rte_hash_crc_init_alg)
> -{
> -	rte_hash_crc_set_alg(CRC32_ARM64);
> -}
> -
> -/**
> - * Use single crc32 instruction to perform a hash on a 1 byte value.
> - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> - * not supported
> - *
> - * @param data
> - *   Data to perform hash on.
> - * @param init_val
> - *   Value to initialise hash generator.
> - * @return
> - *   32bit calculated hash value.
> - */
> -static inline uint32_t
> -rte_hash_crc_1byte(uint8_t data, uint32_t init_val) -{
> -	if (likely(crc32_alg & CRC32_ARM64))
> -		return crc32c_arm64_u8(data, init_val);
> -
> -	return crc32c_1byte(data, init_val);
> -}
> -
> -/**
> - * Use single crc32 instruction to perform a hash on a 2 bytes value.
> - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> - * not supported
> - *
> - * @param data
> - *   Data to perform hash on.
> - * @param init_val
> - *   Value to initialise hash generator.
> - * @return
> - *   32bit calculated hash value.
> - */
> -static inline uint32_t
> -rte_hash_crc_2byte(uint16_t data, uint32_t init_val) -{
> -	if (likely(crc32_alg & CRC32_ARM64))
> -		return crc32c_arm64_u16(data, init_val);
> -
> -	return crc32c_2bytes(data, init_val);
> -}
> -
> -/**
> - * Use single crc32 instruction to perform a hash on a 4 byte value.
> - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> - * not supported
> - *
> - * @param data
> - *   Data to perform hash on.
> - * @param init_val
> - *   Value to initialise hash generator.
> - * @return
> - *   32bit calculated hash value.
> - */
> -static inline uint32_t
> -rte_hash_crc_4byte(uint32_t data, uint32_t init_val) -{
> -	if (likely(crc32_alg & CRC32_ARM64))
> -		return crc32c_arm64_u32(data, init_val);
> -
> -	return crc32c_1word(data, init_val);
> -}
> -
> -/**
> - * Use single crc32 instruction to perform a hash on a 8 byte value.
> - * Fall back to software crc32 implementation in case arm64 crc intrinsics is
> - * not supported
> - *
> - * @param data
> - *   Data to perform hash on.
> - * @param init_val
> - *   Value to initialise hash generator.
> - * @return
> - *   32bit calculated hash value.
> - */
> -static inline uint32_t
> -rte_hash_crc_8byte(uint64_t data, uint32_t init_val) -{
> -	if (likely(crc32_alg == CRC32_ARM64))
> -		return crc32c_arm64_u64(data, init_val);
> -
> -	return crc32c_2words(data, init_val);
> -}
> -
> -#ifdef __cplusplus
> -}
> -#endif
> +#include "rte_hash_crc.h"
> 
>  #endif /* _RTE_CRC_ARM64_H_ */
> diff --git a/lib/librte_hash/rte_hash_crc.h b/lib/librte_hash/rte_hash_crc.h
> index cf28031b3..eaba70c12 100644
> --- a/lib/librte_hash/rte_hash_crc.h
> +++ b/lib/librte_hash/rte_hash_crc.h
> @@ -16,10 +16,12 @@ extern "C" {
>  #endif
> 
>  #include <stdint.h>
> -#include <rte_config.h>
> -#include <rte_cpuflags.h>
> +
>  #include <rte_branch_prediction.h>
>  #include <rte_common.h>
> +#include <rte_config.h>
> +#include <rte_cpuflags.h>
> +#include <rte_log.h>
> 
>  /* Lookup tables for software implementation of CRC32C */  static const
> uint32_t crc32c_tables[8][256] = {{ @@ -322,7 +324,7 @@
> crc32c_2bytes(uint16_t data, uint32_t init_val)  }
> 
>  static inline uint32_t
> -crc32c_1word(uint32_t data, uint32_t init_val)
> +crc32c_4bytes(uint32_t data, uint32_t init_val)
>  {
>  	uint32_t crc, term1, term2;
>  	crc = init_val;
> @@ -336,7 +338,7 @@ crc32c_1word(uint32_t data, uint32_t init_val)  }
> 
>  static inline uint32_t
> -crc32c_2words(uint64_t data, uint32_t init_val)
> +crc32c_8bytes(uint64_t data, uint32_t init_val)
>  {
>  	uint32_t crc, term1, term2;
>  	union {
> @@ -358,6 +360,48 @@ crc32c_2words(uint64_t data, uint32_t init_val)
>  	return crc;
>  }
> 
> +#if defined(RTE_ARCH_ARM64) &&
> defined(RTE_MACHINE_CPUFLAG_CRC32)
> +static inline uint32_t
> +crc32c_arm64_u8(uint8_t data, uint32_t init_val) {
> +	__asm__ volatile(
> +			"crc32cb %w[crc], %w[crc], %w[value]"
> +			: [crc] "+r" (init_val)
> +			: [value] "r" (data));
> +	return init_val;
> +}
> +
> +static inline uint32_t
> +crc32c_arm64_u16(uint16_t data, uint32_t init_val) {
> +	__asm__ volatile(
> +			"crc32ch %w[crc], %w[crc], %w[value]"
> +			: [crc] "+r" (init_val)
> +			: [value] "r" (data));
> +	return init_val;
> +}
> +
> +static inline uint32_t
> +crc32c_arm64_u32(uint32_t data, uint32_t init_val) {
> +	__asm__ volatile(
> +			"crc32cw %w[crc], %w[crc], %w[value]"
> +			: [crc] "+r" (init_val)
> +			: [value] "r" (data));
> +	return init_val;
> +}
> +
> +static inline uint32_t
> +crc32c_arm64_u64(uint64_t data, uint32_t init_val) {
> +	__asm__ volatile(
> +			"crc32cx %w[crc], %w[crc], %x[value]"
> +			: [crc] "+r" (init_val)
> +			: [value] "r" (data));
> +	return init_val;
> +}
> +#endif
> +
>  #if defined(RTE_ARCH_X86)
>  static inline uint32_t
>  crc32c_sse42_u8(uint8_t data, uint32_t init_val) @@ -424,42 +468,69 @@
> crc32c_sse42_u64(uint64_t data, uint64_t init_val)
> 
>  static uint8_t crc32_alg = CRC32_SW;
> 
> -#if defined(RTE_ARCH_ARM64) &&
> defined(RTE_MACHINE_CPUFLAG_CRC32)
> -#include "rte_crc_arm64.h"
> -#else
> -
>  /**
> - * Allow or disallow use of SSE4.2 instrinsics for CRC32 hash
> + * Allow or disallow use of SSE4.2/ARMv8 instrinsics for CRC32 hash
>   * calculation.
>   *
>   * @param alg
>   *   An OR of following flags:
> - *   - (CRC32_SW) Don't use SSE4.2 intrinsics
> + *   - (CRC32_SW) Don't use SSE4.2 intrinsics (default non-[x86/ARMv8])
>   *   - (CRC32_SSE42) Use SSE4.2 intrinsics if available
> - *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default)
> - *
> + *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default x86)
> + *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
>   */
>  static inline void
>  rte_hash_crc_set_alg(uint8_t alg)
>  {
> -#if defined(RTE_ARCH_X86)
> -	if (alg == CRC32_SSE42_x64 &&
> -			!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
> -		alg = CRC32_SSE42;
> +	switch (alg) {
> +	case CRC32_SSE42_x64:
> +	case CRC32_SSE42:
> +#if defined RTE_ARCH_X86
> +		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
> +			crc32_alg = CRC32_SSE42;
> +		else
> +			crc32_alg = alg;
> +#endif
> +#if defined RTE_ARCH_ARM64
> +		RTE_LOG(WARNING, HASH,
> +			"Incorrect CRC32 algorithm requested setting best"
> +			"available algorithm on the architecture\n");
> +		rte_hash_crc_set_alg(CRC32_ARM64);
> +#endif
> +		break;
> +	case CRC32_ARM64:
> +#if defined RTE_ARCH_ARM64
> +		if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
> +			crc32_alg = CRC32_ARM64;
>  #endif
> -	crc32_alg = alg;
> +#if defined RTE_ARCH_X86
> +		RTE_LOG(WARNING, HASH,
> +			"Incorrect CRC32 algorithm requested setting best"
> +			"available algorithm on the architecture\n");
> +		rte_hash_crc_set_alg(CRC32_SSE42_x64);
> +#endif
> +		break;
> +	case CRC32_SW:
> +	default:
> +		crc32_alg = CRC32_SW;
> +	break;
> +	}
>  }
> 
>  /* Setting the best available algorithm */
>  RTE_INIT(rte_hash_crc_init_alg)
>  {
> +#if defined RTE_ARCH_X86
>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> +#elif defined RTE_ARCH_ARM64
> +	rte_hash_crc_set_alg(CRC32_ARM64);
> +#else
> +	rte_hash_crc_set_alg(CRC32_SW);
> +#endif
>  }
> 
>  /**
> - * Use single crc32 instruction to perform a hash on a byte value.
> - * Fall back to software crc32 implementation in case SSE4.2 is
> - * not supported
> + * Calculate crc32 hash value of 1bytes.
>   *
>   * @param data
>   *   Data to perform hash on.
> @@ -474,15 +545,15 @@ rte_hash_crc_1byte(uint8_t data, uint32_t init_val)
> #if defined RTE_ARCH_X86
>  	if (likely(crc32_alg & CRC32_SSE42))
>  		return crc32c_sse42_u8(data, init_val);
> +#elif defined RTE_ARCH_ARM64
> +	if (likely(crc32_alg & CRC32_ARM64))
> +		return crc32c_arm64_u8(data, init_val);
>  #endif
> -
>  	return crc32c_1byte(data, init_val);
>  }
> 
>  /**
> - * Use single crc32 instruction to perform a hash on a 2 bytes value.
> - * Fall back to software crc32 implementation in case SSE4.2 is
> - * not supported
> + * Calculate crc32 hash value of 2bytes.
>   *
>   * @param data
>   *   Data to perform hash on.
> @@ -497,15 +568,15 @@ rte_hash_crc_2byte(uint16_t data, uint32_t init_val)
> #if defined RTE_ARCH_X86
>  	if (likely(crc32_alg & CRC32_SSE42))
>  		return crc32c_sse42_u16(data, init_val);
> +#elif defined RTE_ARCH_ARM64
> +	if (likely(crc32_alg & CRC32_ARM64))
> +		return crc32c_arm64_u16(data, init_val);
>  #endif
> -
>  	return crc32c_2bytes(data, init_val);
>  }
> 
>  /**
> - * Use single crc32 instruction to perform a hash on a 4 byte value.
> - * Fall back to software crc32 implementation in case SSE4.2 is
> - * not supported
> + * Calculate crc32 hash value of 4bytes.
>   *
>   * @param data
>   *   Data to perform hash on.
> @@ -520,15 +591,15 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
> #if defined RTE_ARCH_X86
>  	if (likely(crc32_alg & CRC32_SSE42))
>  		return crc32c_sse42_u32(data, init_val);
> +#elif defined RTE_ARCH_ARM64
> +	if (likely(crc32_alg & CRC32_ARM64))
> +		return crc32c_arm64_u32(data, init_val);
>  #endif
> -
> -	return crc32c_1word(data, init_val);
> +	return crc32c_4bytes(data, init_val);
>  }
> 
>  /**
> - * Use single crc32 instruction to perform a hash on a 8 byte value.
> - * Fall back to software crc32 implementation in case SSE4.2 is
> - * not supported
> + * Calculate crc32 hash value of 8bytes.
>   *
>   * @param data
>   *   Data to perform hash on.
> @@ -540,21 +611,19 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
> static inline uint32_t  rte_hash_crc_8byte(uint64_t data, uint32_t init_val)  { -
> #ifdef RTE_ARCH_X86_64
> -	if (likely(crc32_alg == CRC32_SSE42_x64))
> +#if defined RTE_ARCH_X86_64
> +	if (likely(crc32_alg & CRC32_SSE42_x64))
>  		return crc32c_sse42_u64(data, init_val); -#endif
> -
> -#if defined RTE_ARCH_X86
> +#elif defined RTE_ARCH_X86
>  	if (likely(crc32_alg & CRC32_SSE42))
>  		return crc32c_sse42_u64_mimic(data, init_val);
> +#elif defined RTE_ARCH_ARM64
> +	if (likely(crc32_alg & CRC32_ARM64))
> +		return crc32c_arm64_u64(data, init_val);
>  #endif
> -
> -	return crc32c_2words(data, init_val);
> +	return crc32c_8bytes(data, init_val);
>  }
> 
> -#endif
> -
>  /**
>   * Calculate CRC32 hash on user-supplied byte array.
>   *
> --
> 2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 2/2] mempool/octeontx2: move internal symbols to INTERNAL section
  2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
@ 2020-05-13  1:04  3%   ` pbhagavatula
  2020-05-13  9:55  3%   ` [dpdk-dev] [PATCH v3 1/2] common/octeontx2: " pbhagavatula
  2020-05-14  7:02  0%   ` [dpdk-dev] [PATCH v2 1/2] common/octeontx2: " Ray Kinsella
  2 siblings, 0 replies; 200+ results
From: pbhagavatula @ 2020-05-13  1:04 UTC (permalink / raw)
  To: jerinj, aostruszka, Ray Kinsella, Neil Horman, Nithin Dabilpuram
  Cc: thomas, dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 devtools/libabigail.abignore                                | 4 +++-
 drivers/mempool/octeontx2/otx2_mempool.h                    | 2 ++
 drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index dfe346db4..4a5e0cb01 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -49,6 +49,8 @@
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
 
-; Ignore moving internal OCTEONTX2 stable functions to INTERNAL tag
+; Ignore moving OCTEONTX2 stable functions to INTERNAL tag
 [suppress_file]
 	soname_regexp = librte_common_octeontx2.*
+[suppress_file]
+	soname_regexp = librte_mempool_octeontx2.*
diff --git a/drivers/mempool/octeontx2/otx2_mempool.h b/drivers/mempool/octeontx2/otx2_mempool.h
index adcc0db24..8aa548248 100644
--- a/drivers/mempool/octeontx2/otx2_mempool.h
+++ b/drivers/mempool/octeontx2/otx2_mempool.h
@@ -206,7 +206,9 @@ npa_lf_aura_op_range_set(uint64_t aura_handle, uint64_t start_iova,
 }
 
 /* NPA LF */
+__rte_internal
 int otx2_npa_lf_init(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_npa_lf_fini(void);
 
 /* IRQ */
diff --git a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
index d4f81aed8..e6887ceb8 100644
--- a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
+++ b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	otx2_npa_lf_fini;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 1/2] common/octeontx2: move internal symbols to INTERNAL section
  2020-05-11 10:00  3% [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section pbhagavatula
  2020-05-11 10:00  3% ` [dpdk-dev] [PATCH 2/2] mempool/octeontx2: " pbhagavatula
  2020-05-11 14:45  0% ` [dpdk-dev] [PATCH 1/2] common/octeontx2: " Thomas Monjalon
@ 2020-05-13  1:04  3% ` pbhagavatula
  2020-05-13  1:04  3%   ` [dpdk-dev] [PATCH v2 2/2] mempool/octeontx2: " pbhagavatula
                     ` (2 more replies)
  2 siblings, 3 replies; 200+ results
From: pbhagavatula @ 2020-05-13  1:04 UTC (permalink / raw)
  To: jerinj, aostruszka, Ray Kinsella, Neil Horman, Nithin Dabilpuram,
	Anoob Joseph
  Cc: thomas, dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v2 Changes:
 - Sort version map alphabetically
 - Add libabigail ignore tag for OCTEONTX2

 devtools/libabigail.abignore                  |  4 +++
 drivers/common/octeontx2/otx2_common.h        |  8 ++++++
 drivers/common/octeontx2/otx2_dev.h           |  3 +++
 drivers/common/octeontx2/otx2_irq.h           |  3 +++
 drivers/common/octeontx2/otx2_mbox.h          |  6 +++++
 drivers/common/octeontx2/otx2_sec_idev.h      |  6 +++++
 .../rte_common_octeontx2_version.map          | 26 ++++++-------------
 7 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index c9ee73cb3..dfe346db4 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -48,3 +48,7 @@
         changed_enumerators = RTE_CRYPTO_AEAD_LIST_END
 [suppress_variable]
         name = rte_crypto_aead_algorithm_strings
+
+; Ignore moving internal OCTEONTX2 stable functions to INTERNAL tag
+[suppress_file]
+	soname_regexp = librte_common_octeontx2.*
diff --git a/drivers/common/octeontx2/otx2_common.h b/drivers/common/octeontx2/otx2_common.h
index e62cdea07..174702687 100644
--- a/drivers/common/octeontx2/otx2_common.h
+++ b/drivers/common/octeontx2/otx2_common.h
@@ -62,13 +62,21 @@ struct otx2_idev_cfg {
 	};
 };

+__rte_internal
 struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
+__rte_internal
 void otx2_sso_pf_func_set(uint16_t sso_pf_func);
+__rte_internal
 uint16_t otx2_sso_pf_func_get(void);
+__rte_internal
 uint16_t otx2_npa_pf_func_get(void);
+__rte_internal
 struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
+__rte_internal
 void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
+__rte_internal
 int otx2_npa_lf_active(void *dev);
+__rte_internal
 int otx2_npa_lf_obj_ref(void);

 /* Log */
diff --git a/drivers/common/octeontx2/otx2_dev.h b/drivers/common/octeontx2/otx2_dev.h
index 13b75e118..cd4fe517d 100644
--- a/drivers/common/octeontx2/otx2_dev.h
+++ b/drivers/common/octeontx2/otx2_dev.h
@@ -94,6 +94,7 @@ struct otx2_dev {
 	OTX2_DEV;
 };

+__rte_internal
 int otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev);

 /* Common dev init and fini routines */
@@ -116,7 +117,9 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
 	return otx2_dev_priv_init(pci_dev, otx2_dev);
 }

+__rte_internal
 void otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_dev_active_vfs(void *otx2_dev);

 #define RVU_PFVF_PF_SHIFT	10
diff --git a/drivers/common/octeontx2/otx2_irq.h b/drivers/common/octeontx2/otx2_irq.h
index 9d326276e..0683cf554 100644
--- a/drivers/common/octeontx2/otx2_irq.h
+++ b/drivers/common/octeontx2/otx2_irq.h
@@ -16,10 +16,13 @@ typedef struct {
 	uint64_t bits[MAX_VFPF_DWORD_BITS];
 } otx2_intr_t;

+__rte_internal
 int otx2_register_irq(struct rte_intr_handle *intr_handle,
 		      rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 void otx2_unregister_irq(struct rte_intr_handle *intr_handle,
 			 rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 int otx2_disable_irqs(struct rte_intr_handle *intr_handle);

 #endif /* _OTX2_IRQ_H_ */
diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
index 80778a0be..7fa4276e9 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -1617,19 +1617,25 @@ struct tim_enable_rsp {
 	uint32_t __otx2_io currentbucket;
 };

+__rte_internal
 const char *otx2_mbox_id2name(uint16_t id);
 int otx2_mbox_id2size(uint16_t id);
 void otx2_mbox_reset(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base,
 		   int direction, int ndevsi, uint64_t intr_offset);
 void otx2_mbox_fini(struct otx2_mbox *mbox);
+__rte_internal
 void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid);
+__rte_internal
 int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo);
+__rte_internal
 int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg);
+__rte_internal
 int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg,
 			  uint32_t tmo);
 int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid);
+__rte_internal
 struct mbox_msghdr *otx2_mbox_alloc_msg_rsp(struct otx2_mbox *mbox, int devid,
 					    int size, int size_rsp);

diff --git a/drivers/common/octeontx2/otx2_sec_idev.h b/drivers/common/octeontx2/otx2_sec_idev.h
index c681f5094..89cdaf66a 100644
--- a/drivers/common/octeontx2/otx2_sec_idev.h
+++ b/drivers/common/octeontx2/otx2_sec_idev.h
@@ -22,16 +22,22 @@ struct otx2_sec_idev_cfg {
 	rte_spinlock_t tx_cpt_lock;
 };

+__rte_internal
 uint8_t otx2_eth_dev_is_sec_capable(struct rte_eth_dev *eth_dev);

+__rte_internal
 int otx2_sec_idev_cfg_init(int port_id);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_add(uint16_t port_id, struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_remove(struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_put(struct otx2_cpt_qp *qp);

+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_get(uint16_t port_id, struct otx2_cpt_qp **qp);

 #endif /* _OTX2_SEC_IDEV_H_ */
diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
index 01279c339..7621a59ad 100644
--- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
+++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
@@ -1,13 +1,15 @@
-DPDK_20.0 {
+INTERNAL {
 	global:

 	otx2_dev_active_vfs;
 	otx2_dev_fini;
 	otx2_dev_priv_init;
 	otx2_disable_irqs;
+	otx2_eth_dev_is_sec_capable;
 	otx2_intra_dev_get_cfg;
 	otx2_logtype_base;
 	otx2_logtype_dpi;
+	otx2_logtype_ep;
 	otx2_logtype_mbox;
 	otx2_logtype_nix;
 	otx2_logtype_npa;
@@ -27,26 +29,14 @@ DPDK_20.0 {
 	otx2_npa_pf_func_get;
 	otx2_npa_set_defaults;
 	otx2_register_irq;
-	otx2_sso_pf_func_get;
-	otx2_sso_pf_func_set;
-	otx2_unregister_irq;
-
-	local: *;
-};
-
-DPDK_21 {
-	global:
-
-	otx2_eth_dev_is_sec_capable;
 	otx2_sec_idev_cfg_init;
 	otx2_sec_idev_tx_cpt_qp_add;
-	otx2_sec_idev_tx_cpt_qp_remove;
 	otx2_sec_idev_tx_cpt_qp_get;
 	otx2_sec_idev_tx_cpt_qp_put;
-} DPDK_20.0;
-
-EXPERIMENTAL {
-	global:
+	otx2_sec_idev_tx_cpt_qp_remove;
+	otx2_sso_pf_func_get;
+	otx2_sso_pf_func_set;
+	otx2_unregister_irq;

-	otx2_logtype_ep;
+	local: *;
 };
--
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] Release candidate 20.05-rc2 ABI
  2020-05-12 16:41  7% ` [dpdk-dev] Release candidate 20.05-rc2 ABI Ray Kinsella
@ 2020-05-12 20:40  4%   ` Honnappa Nagarahalli
  0 siblings, 0 replies; 200+ results
From: Honnappa Nagarahalli @ 2020-05-12 20:40 UTC (permalink / raw)
  To: Ray Kinsella, thomas, dpdk-dev, Ananyev, Konstantin, Yipeng Wang,
	Richardson, Bruce, Declan Doherty, Nicolas Chautru, nd,
	Honnappa Nagarahalli
  Cc: nd

<snip>

> Subject: [dpdk-dev] Release candidate 20.05-rc2 ABI
> 
> Folks,
> 
> Few ABI observations based on the 20.05-rc2, (please correct me if I am
> wrong)
> 
> 1. rte_ring.h - struct rte_ring
> 
> Changes to the structure of rte_ring throws up a whole bunch of false
> positives that have been suppressed in libabigail.ignore. It is not used by end
> applications and should not be exposed in public headers.
> 
> Suggest that in the v20.11 timeframe we use the opportunity to use opaque
> pointers in librte_efd, librte_hash, librte_pmd_ring, librte_ring, librte_pdump
> to make this issue go away permanently.
lirte_hash already uses opaque pointer, though it is called rte_hash, the structure definition is not exposed to the application.
librte_ring, using opaque pointers does not help as it has inline APIs called from the application.

> 
> 2. rte_cryptodev_pmd.h - struct rte_cryptodev_ops
> 
> Similarly, changes to the structure of rte_cryptodev_ops are causing false
> positives, also suppressed in libabigail.ignore. It is not used by end
> applications and should not be exposed in public headers.
> 
> 3. rte_bbdev.h - struct rte_bbdev_driver_info
> 
> Similarly, changes to the structure rte_bbdev are causing false positives, also
> suppressed in libabigail.ignore. It is not used by end applications and should
> not be exposed in public headers.
> 
> Thanks,
> 
> Ray K
> 
> On 12/05/2020 03:22, Thomas Monjalon wrote:
> > A new DPDK release candidate is ready for testing:
> > 	https://git.dpdk.org/dpdk/tag/?id=v20.05-rc2
> >
> > There are 286 new patches in this snapshot.
> >
> > Release notes:
> > 	http://doc.dpdk.org/guides/rel_notes/release_20_05.html
> >
> > Highlights of 20.05-rc2:
> > 	- rte_graph
> > 	- telemetry rework
> > 	- ChaCha20-Poly1305 crypto algorithm
> >
> > The -rc3 should include only some bug fixes, simple cleanups, doc and
> > tooling. We have one week to complete this milestone.
> > Then one more week (allowing -rc4) should be needed before the release.
> >
> > Please test and report issues on bugs.dpdk.org.
> > As a community, we must close as many bugs as possible for -rc3.
> >
> > Thank you everyone
> >
> >

^ permalink raw reply	[relevance 4%]

* [dpdk-dev]  [RFC v2] hash: unify crc32 API header for x86 and ARM
      @ 2020-05-12 20:40  3% ` pbhagavatula
  2020-05-13  3:04  3%   ` Ruifeng Wang
  2 siblings, 1 reply; 200+ results
From: pbhagavatula @ 2020-05-12 20:40 UTC (permalink / raw)
  To: jerinj, konstantin.ananyev, harry.van.haaren, Yipeng Wang,
	Sameh Gobriel, Bruce Richardson, Ruifeng Wang
  Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Merge crc32 hash calculation public API headers for x86 and ARM.
Select the best available CRC32 algorithm when unsupported algorithm
on a given CPU architecture is requested by an application.

Previously, if an application directly includes `rte_crc_arm64.h` without
including `rte_hash_crc.h` it will fail to compile.
Although, `rte_crc_arm64.h` is no longer needed make it a dummy file for
ABI purposes.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v2 Changes:
 - Don't remove `rte_crc_arm64.h` for ABI purposes.
 - Revert function pointer approach for performance reasons.
 - Select the best available algorithm based on the arch when user passes an
 unsupported crc32 algorithm.

 app/test/test_hash.c            |   6 ++
 lib/librte_hash/meson.build     |   6 +-
 lib/librte_hash/rte_crc_arm64.h | 175 +-------------------------------
 lib/librte_hash/rte_hash_crc.h  | 153 ++++++++++++++++++++--------
 4 files changed, 122 insertions(+), 218 deletions(-)

diff --git a/app/test/test_hash.c b/app/test/test_hash.c
index afa3a1a3c..7bd457dac 100644
--- a/app/test/test_hash.c
+++ b/app/test/test_hash.c
@@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
 	}

 	/* Resetting to best available algorithm */
+#if defined RTE_ARCH_X86
 	rte_hash_crc_set_alg(CRC32_SSE42_x64);
+#elif defined RTE_ARCH_ARM64
+	rte_hash_crc_set_alg(CRC32_ARM64);
+#else
+	rte_hash_crc_set_alg(CRC32_SW);
+#endif

 	if (i == CRC32_ITERATIONS)
 		return 0;
diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build
index 6ab46ae9d..8a3cf2f64 100644
--- a/lib/librte_hash/meson.build
+++ b/lib/librte_hash/meson.build
@@ -1,12 +1,14 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017 Intel Corporation

-headers = files('rte_crc_arm64.h',
-	'rte_fbk_hash.h',
+headers = files('rte_fbk_hash.h',
 	'rte_hash_crc.h',
 	'rte_hash.h',
 	'rte_jhash.h',
 	'rte_thash.h')
+if dpdk_conf.has('RTE_ARCH_ARM64')
+	headers += files('rte_crc_arm64.h')
+endif

 sources = files('rte_cuckoo_hash.c', 'rte_fbk_hash.c')
 deps += ['ring']
diff --git a/lib/librte_hash/rte_crc_arm64.h b/lib/librte_hash/rte_crc_arm64.h
index b4628cfc0..adfcafc7d 100644
--- a/lib/librte_hash/rte_crc_arm64.h
+++ b/lib/librte_hash/rte_crc_arm64.h
@@ -5,179 +5,6 @@
 #ifndef _RTE_CRC_ARM64_H_
 #define _RTE_CRC_ARM64_H_

-/**
- * @file
- *
- * RTE CRC arm64 Hash
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-#include <rte_cpuflags.h>
-#include <rte_branch_prediction.h>
-#include <rte_common.h>
-
-static inline uint32_t
-crc32c_arm64_u8(uint8_t data, uint32_t init_val)
-{
-	__asm__ volatile(
-			"crc32cb %w[crc], %w[crc], %w[value]"
-			: [crc] "+r" (init_val)
-			: [value] "r" (data));
-	return init_val;
-}
-
-static inline uint32_t
-crc32c_arm64_u16(uint16_t data, uint32_t init_val)
-{
-	__asm__ volatile(
-			"crc32ch %w[crc], %w[crc], %w[value]"
-			: [crc] "+r" (init_val)
-			: [value] "r" (data));
-	return init_val;
-}
-
-static inline uint32_t
-crc32c_arm64_u32(uint32_t data, uint32_t init_val)
-{
-	__asm__ volatile(
-			"crc32cw %w[crc], %w[crc], %w[value]"
-			: [crc] "+r" (init_val)
-			: [value] "r" (data));
-	return init_val;
-}
-
-static inline uint32_t
-crc32c_arm64_u64(uint64_t data, uint32_t init_val)
-{
-	__asm__ volatile(
-			"crc32cx %w[crc], %w[crc], %x[value]"
-			: [crc] "+r" (init_val)
-			: [value] "r" (data));
-	return init_val;
-}
-
-/**
- * Allow or disallow use of arm64 SIMD instrinsics for CRC32 hash
- * calculation.
- *
- * @param alg
- *   An OR of following flags:
- *   - (CRC32_SW) Don't use arm64 crc intrinsics
- *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
- *
- */
-static inline void
-rte_hash_crc_set_alg(uint8_t alg)
-{
-	switch (alg) {
-	case CRC32_ARM64:
-		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
-			alg = CRC32_SW;
-		/* fall-through */
-	case CRC32_SW:
-		crc32_alg = alg;
-		/* fall-through */
-	default:
-		break;
-	}
-}
-
-/* Setting the best available algorithm */
-RTE_INIT(rte_hash_crc_init_alg)
-{
-	rte_hash_crc_set_alg(CRC32_ARM64);
-}
-
-/**
- * Use single crc32 instruction to perform a hash on a 1 byte value.
- * Fall back to software crc32 implementation in case arm64 crc intrinsics is
- * not supported
- *
- * @param data
- *   Data to perform hash on.
- * @param init_val
- *   Value to initialise hash generator.
- * @return
- *   32bit calculated hash value.
- */
-static inline uint32_t
-rte_hash_crc_1byte(uint8_t data, uint32_t init_val)
-{
-	if (likely(crc32_alg & CRC32_ARM64))
-		return crc32c_arm64_u8(data, init_val);
-
-	return crc32c_1byte(data, init_val);
-}
-
-/**
- * Use single crc32 instruction to perform a hash on a 2 bytes value.
- * Fall back to software crc32 implementation in case arm64 crc intrinsics is
- * not supported
- *
- * @param data
- *   Data to perform hash on.
- * @param init_val
- *   Value to initialise hash generator.
- * @return
- *   32bit calculated hash value.
- */
-static inline uint32_t
-rte_hash_crc_2byte(uint16_t data, uint32_t init_val)
-{
-	if (likely(crc32_alg & CRC32_ARM64))
-		return crc32c_arm64_u16(data, init_val);
-
-	return crc32c_2bytes(data, init_val);
-}
-
-/**
- * Use single crc32 instruction to perform a hash on a 4 byte value.
- * Fall back to software crc32 implementation in case arm64 crc intrinsics is
- * not supported
- *
- * @param data
- *   Data to perform hash on.
- * @param init_val
- *   Value to initialise hash generator.
- * @return
- *   32bit calculated hash value.
- */
-static inline uint32_t
-rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
-{
-	if (likely(crc32_alg & CRC32_ARM64))
-		return crc32c_arm64_u32(data, init_val);
-
-	return crc32c_1word(data, init_val);
-}
-
-/**
- * Use single crc32 instruction to perform a hash on a 8 byte value.
- * Fall back to software crc32 implementation in case arm64 crc intrinsics is
- * not supported
- *
- * @param data
- *   Data to perform hash on.
- * @param init_val
- *   Value to initialise hash generator.
- * @return
- *   32bit calculated hash value.
- */
-static inline uint32_t
-rte_hash_crc_8byte(uint64_t data, uint32_t init_val)
-{
-	if (likely(crc32_alg == CRC32_ARM64))
-		return crc32c_arm64_u64(data, init_val);
-
-	return crc32c_2words(data, init_val);
-}
-
-#ifdef __cplusplus
-}
-#endif
+#include "rte_hash_crc.h"

 #endif /* _RTE_CRC_ARM64_H_ */
diff --git a/lib/librte_hash/rte_hash_crc.h b/lib/librte_hash/rte_hash_crc.h
index cf28031b3..eaba70c12 100644
--- a/lib/librte_hash/rte_hash_crc.h
+++ b/lib/librte_hash/rte_hash_crc.h
@@ -16,10 +16,12 @@ extern "C" {
 #endif

 #include <stdint.h>
-#include <rte_config.h>
-#include <rte_cpuflags.h>
+
 #include <rte_branch_prediction.h>
 #include <rte_common.h>
+#include <rte_config.h>
+#include <rte_cpuflags.h>
+#include <rte_log.h>

 /* Lookup tables for software implementation of CRC32C */
 static const uint32_t crc32c_tables[8][256] = {{
@@ -322,7 +324,7 @@ crc32c_2bytes(uint16_t data, uint32_t init_val)
 }

 static inline uint32_t
-crc32c_1word(uint32_t data, uint32_t init_val)
+crc32c_4bytes(uint32_t data, uint32_t init_val)
 {
 	uint32_t crc, term1, term2;
 	crc = init_val;
@@ -336,7 +338,7 @@ crc32c_1word(uint32_t data, uint32_t init_val)
 }

 static inline uint32_t
-crc32c_2words(uint64_t data, uint32_t init_val)
+crc32c_8bytes(uint64_t data, uint32_t init_val)
 {
 	uint32_t crc, term1, term2;
 	union {
@@ -358,6 +360,48 @@ crc32c_2words(uint64_t data, uint32_t init_val)
 	return crc;
 }

+#if defined(RTE_ARCH_ARM64) && defined(RTE_MACHINE_CPUFLAG_CRC32)
+static inline uint32_t
+crc32c_arm64_u8(uint8_t data, uint32_t init_val)
+{
+	__asm__ volatile(
+			"crc32cb %w[crc], %w[crc], %w[value]"
+			: [crc] "+r" (init_val)
+			: [value] "r" (data));
+	return init_val;
+}
+
+static inline uint32_t
+crc32c_arm64_u16(uint16_t data, uint32_t init_val)
+{
+	__asm__ volatile(
+			"crc32ch %w[crc], %w[crc], %w[value]"
+			: [crc] "+r" (init_val)
+			: [value] "r" (data));
+	return init_val;
+}
+
+static inline uint32_t
+crc32c_arm64_u32(uint32_t data, uint32_t init_val)
+{
+	__asm__ volatile(
+			"crc32cw %w[crc], %w[crc], %w[value]"
+			: [crc] "+r" (init_val)
+			: [value] "r" (data));
+	return init_val;
+}
+
+static inline uint32_t
+crc32c_arm64_u64(uint64_t data, uint32_t init_val)
+{
+	__asm__ volatile(
+			"crc32cx %w[crc], %w[crc], %x[value]"
+			: [crc] "+r" (init_val)
+			: [value] "r" (data));
+	return init_val;
+}
+#endif
+
 #if defined(RTE_ARCH_X86)
 static inline uint32_t
 crc32c_sse42_u8(uint8_t data, uint32_t init_val)
@@ -424,42 +468,69 @@ crc32c_sse42_u64(uint64_t data, uint64_t init_val)

 static uint8_t crc32_alg = CRC32_SW;

-#if defined(RTE_ARCH_ARM64) && defined(RTE_MACHINE_CPUFLAG_CRC32)
-#include "rte_crc_arm64.h"
-#else
-
 /**
- * Allow or disallow use of SSE4.2 instrinsics for CRC32 hash
+ * Allow or disallow use of SSE4.2/ARMv8 instrinsics for CRC32 hash
  * calculation.
  *
  * @param alg
  *   An OR of following flags:
- *   - (CRC32_SW) Don't use SSE4.2 intrinsics
+ *   - (CRC32_SW) Don't use SSE4.2 intrinsics (default non-[x86/ARMv8])
  *   - (CRC32_SSE42) Use SSE4.2 intrinsics if available
- *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default)
- *
+ *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available (default x86)
+ *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
  */
 static inline void
 rte_hash_crc_set_alg(uint8_t alg)
 {
-#if defined(RTE_ARCH_X86)
-	if (alg == CRC32_SSE42_x64 &&
-			!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
-		alg = CRC32_SSE42;
+	switch (alg) {
+	case CRC32_SSE42_x64:
+	case CRC32_SSE42:
+#if defined RTE_ARCH_X86
+		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
+			crc32_alg = CRC32_SSE42;
+		else
+			crc32_alg = alg;
+#endif
+#if defined RTE_ARCH_ARM64
+		RTE_LOG(WARNING, HASH,
+			"Incorrect CRC32 algorithm requested setting best"
+			"available algorithm on the architecture\n");
+		rte_hash_crc_set_alg(CRC32_ARM64);
+#endif
+		break;
+	case CRC32_ARM64:
+#if defined RTE_ARCH_ARM64
+		if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
+			crc32_alg = CRC32_ARM64;
 #endif
-	crc32_alg = alg;
+#if defined RTE_ARCH_X86
+		RTE_LOG(WARNING, HASH,
+			"Incorrect CRC32 algorithm requested setting best"
+			"available algorithm on the architecture\n");
+		rte_hash_crc_set_alg(CRC32_SSE42_x64);
+#endif
+		break;
+	case CRC32_SW:
+	default:
+		crc32_alg = CRC32_SW;
+	break;
+	}
 }

 /* Setting the best available algorithm */
 RTE_INIT(rte_hash_crc_init_alg)
 {
+#if defined RTE_ARCH_X86
 	rte_hash_crc_set_alg(CRC32_SSE42_x64);
+#elif defined RTE_ARCH_ARM64
+	rte_hash_crc_set_alg(CRC32_ARM64);
+#else
+	rte_hash_crc_set_alg(CRC32_SW);
+#endif
 }

 /**
- * Use single crc32 instruction to perform a hash on a byte value.
- * Fall back to software crc32 implementation in case SSE4.2 is
- * not supported
+ * Calculate crc32 hash value of 1bytes.
  *
  * @param data
  *   Data to perform hash on.
@@ -474,15 +545,15 @@ rte_hash_crc_1byte(uint8_t data, uint32_t init_val)
 #if defined RTE_ARCH_X86
 	if (likely(crc32_alg & CRC32_SSE42))
 		return crc32c_sse42_u8(data, init_val);
+#elif defined RTE_ARCH_ARM64
+	if (likely(crc32_alg & CRC32_ARM64))
+		return crc32c_arm64_u8(data, init_val);
 #endif
-
 	return crc32c_1byte(data, init_val);
 }

 /**
- * Use single crc32 instruction to perform a hash on a 2 bytes value.
- * Fall back to software crc32 implementation in case SSE4.2 is
- * not supported
+ * Calculate crc32 hash value of 2bytes.
  *
  * @param data
  *   Data to perform hash on.
@@ -497,15 +568,15 @@ rte_hash_crc_2byte(uint16_t data, uint32_t init_val)
 #if defined RTE_ARCH_X86
 	if (likely(crc32_alg & CRC32_SSE42))
 		return crc32c_sse42_u16(data, init_val);
+#elif defined RTE_ARCH_ARM64
+	if (likely(crc32_alg & CRC32_ARM64))
+		return crc32c_arm64_u16(data, init_val);
 #endif
-
 	return crc32c_2bytes(data, init_val);
 }

 /**
- * Use single crc32 instruction to perform a hash on a 4 byte value.
- * Fall back to software crc32 implementation in case SSE4.2 is
- * not supported
+ * Calculate crc32 hash value of 4bytes.
  *
  * @param data
  *   Data to perform hash on.
@@ -520,15 +591,15 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
 #if defined RTE_ARCH_X86
 	if (likely(crc32_alg & CRC32_SSE42))
 		return crc32c_sse42_u32(data, init_val);
+#elif defined RTE_ARCH_ARM64
+	if (likely(crc32_alg & CRC32_ARM64))
+		return crc32c_arm64_u32(data, init_val);
 #endif
-
-	return crc32c_1word(data, init_val);
+	return crc32c_4bytes(data, init_val);
 }

 /**
- * Use single crc32 instruction to perform a hash on a 8 byte value.
- * Fall back to software crc32 implementation in case SSE4.2 is
- * not supported
+ * Calculate crc32 hash value of 8bytes.
  *
  * @param data
  *   Data to perform hash on.
@@ -540,21 +611,19 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val)
 static inline uint32_t
 rte_hash_crc_8byte(uint64_t data, uint32_t init_val)
 {
-#ifdef RTE_ARCH_X86_64
-	if (likely(crc32_alg == CRC32_SSE42_x64))
+#if defined RTE_ARCH_X86_64
+	if (likely(crc32_alg & CRC32_SSE42_x64))
 		return crc32c_sse42_u64(data, init_val);
-#endif
-
-#if defined RTE_ARCH_X86
+#elif defined RTE_ARCH_X86
 	if (likely(crc32_alg & CRC32_SSE42))
 		return crc32c_sse42_u64_mimic(data, init_val);
+#elif defined RTE_ARCH_ARM64
+	if (likely(crc32_alg & CRC32_ARM64))
+		return crc32c_arm64_u64(data, init_val);
 #endif
-
-	return crc32c_2words(data, init_val);
+	return crc32c_8bytes(data, init_val);
 }

-#endif
-
 /**
  * Calculate CRC32 hash on user-supplied byte array.
  *
--
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v3 0/4] add AESNI-MB rawdev for multi-function processing
  @ 2020-05-12 17:32  0%                   ` Coyle, David
  0 siblings, 0 replies; 200+ results
From: Coyle, David @ 2020-05-12 17:32 UTC (permalink / raw)
  To: Zhang, Roy Fan, Akhil Goyal, Doherty, Declan, Thomas Monjalon,
	Yigit, Ferruh, Trahe, Fiona
  Cc: techboard, dev, De Lara Guarch, Pablo, Ryan, Brendan,
	Hemant Agrawal, Anoob Joseph, Ruifeng Wang, Liron Himi,
	Nagadheeraj Rottela, Srikanth Jampala, Gagandeep Singh, Jay Zhou,
	Ravi Kumar, Richardson, Bruce, olivier.matz,
	honnappa.nagarahalli, Stephen Hemminger, alexr

Hi Fan & Akhil,

> -----Original Message-----
> From: Zhang, Roy Fan <roy.fan.zhang@intel.com>
> Sent: Friday, May 1, 2020 2:18 PM
> 
> Hi Akhil,
> 
> > -----Original Message-----
> > From: dev <dev-bounces@dpdk.org> On Behalf Of Akhil Goyal
> > Sent: Wednesday, April 22, 2020 2:44 PM
> > To: Coyle, David <david.coyle@intel.com>; Doherty, Declan
> > <declan.doherty@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>;
> > Yigit, Ferruh <ferruh.yigit@intel.com>; Trahe, Fiona
> > <fiona.trahe@intel.com>
> > Cc: techboard@dpdk.org; dev@dpdk.org; De Lara Guarch, Pablo
> > <pablo.de.lara.guarch@intel.com>; Ryan, Brendan
> > <brendan.ryan@intel.com>; Hemant Agrawal
> <hemant.agrawal@nxp.com>;
> > Anoob Joseph <anoobj@marvell.com>; Ruifeng Wang
> > <ruifeng.wang@arm.com>; Liron Himi <lironh@marvell.com>; Nagadheeraj
> > Rottela <rnagadheeraj@marvell.com>; Srikanth Jampala
> > <jsrikanth@marvell.com>; Gagandeep Singh <G.Singh@nxp.com>; Jay
> Zhou
> > <jianjay.zhou@huawei.com>; Ravi Kumar <ravi1.kumar@amd.com>;
> > Richardson, Bruce <bruce.richardson@intel.com>;
> > olivier.matz@6wind.com; honnappa.nagarahalli@arm.com; Stephen
> > Hemminger <stephen@networkplumber.org>; alexr@mellanox.com
> > Subject: Re: [dpdk-dev] [PATCH v3 0/4] add AESNI-MB rawdev for multi-
> > function processing
> ...
> > Yes, it is preferred, but it should be a union to
> > rte_crypto_sym_op/rte_crypto_asym_op.
> > Crypto_op->type as RTE_CRYPTO_OP_TYPE_SECURITY and sess_type as
> > RTE_CRYPTO_OP_SECURITY_SESSION The size of rte_crypto_op will remain
> > as is and there will be no ABI breakage I guess.
> >
> [Fan: with this way the PMD will have to do rte_crypto_op.type check, and
> then look into rte_security_op field, only when it find the security_op type is
> crypto_crc, it will process the security_op data. Would that being too many
> reads and checking for a single op? Can we create a new API for rte_security
> to process rte_security_ops for Crypto_CRC or future needs?] ...

[DC] If we were to add new enqueue/dequeue APIs to rte_security, then this may
cause extra churn and extra paths of code in a customer's application. For the
DOCSIS Crypto-CRC use-case which is currently supported by IPSecMB, only the
AES-DOCSISBPI cipher algorithm is supported. For these Crypto-CRC ops, they would
create rte_security sessions, attach these to rte_security_ops and enqueue/dequeue
using the new APIs in rte_security.

However, the customer may also be using the legacy DES-DOCSISBPI cipher algorithm
for some subscribers, and this algorithm is not supported in the chained Crypto-CRC
functionality in IPSecMB (and most likely never will be). So for these the customer
would need to create cryptodev sessions, attach these to rte_crypto_ops and enqueue/
dequeue with the cryptodev enq/deq APIs. That is 2 different paths of code now in
the application datapath, where some packets in a batch need to be enqueued through
rte_security and some need to be enqueued through cryptodev.

If rte_crypto_ops are always used and enqueued/dequeued through cryptodev, then the
only thing that changes is the type of session that is created and either the security session
or the cryptodev session gets attached to the crypto_op.

Now, we could add support to rte_security for DES-DOCSISBPI too, but it would not be a
combined operation with CRC - it would be a simple cipher operation going through
rte_security. But that, to me, does not seem like a good use of rte_security.

For DOCSIS Crypto-CRC, we may also want to take advantage of the
rte_cryptodev_sym_cpu_crypto_process() API which was added to cryptodev recently to
avoid the enqueue/dequeue overhead. A similar API would also then need to be added
to rte_security.

Taking all of the above into account, I feel keeping the normal cryptodev enqueue/dequeue
would be best. Having said all that, we do need to consider performance in the PMD of the
extra op type checks. Take aesni_mb PMD as an example. It would need to check
rte_crypto_op->type and if it's not RTE_CRYPTO_OP_TYPE_SECURITY, then it can assume
it's an RTE_CRYPTO_OP_TYPE_SYMMETRIC op and carry on as normal for existing symmetric
operations. Security ops will need some extra parsing but this is new functionality. The impact
on existing functionality of the extra checks would certainly need to be tested though, but as
all the op data will be in the same cache line, I don't see any major impact.

Akhil & Fan (& others), I would be interested to hear your feedback on this.

Regards,
David

> 
> Regards,
> Fan

^ permalink raw reply	[relevance 0%]

* [dpdk-dev] Release candidate 20.05-rc2 ABI
  @ 2020-05-12 16:41  7% ` Ray Kinsella
  2020-05-12 20:40  4%   ` Honnappa Nagarahalli
  0 siblings, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-12 16:41 UTC (permalink / raw)
  To: Thomas Monjalon, dpdk-dev, Ananyev, Konstantin, Yipeng Wang,
	Richardson, Bruce, Declan Doherty, Nicolas Chautru

Folks, 

Few ABI observations based on the 20.05-rc2,
(please correct me if I am wrong)

1. rte_ring.h - struct rte_ring

Changes to the structure of rte_ring throws up a whole bunch of false positives that 
have been suppressed in libabigail.ignore. It is not used by end applications 
and should not be exposed in public headers. 

Suggest that in the v20.11 timeframe we use the opportunity to use opaque pointers 
in librte_efd, librte_hash, librte_pmd_ring, librte_ring, librte_pdump to make this
issue go away permanently. 

2. rte_cryptodev_pmd.h - struct rte_cryptodev_ops

Similarly, changes to the structure of rte_cryptodev_ops are causing false 
positives, also suppressed in libabigail.ignore. It is not used by end applications 
and should not be exposed in public headers. 

3. rte_bbdev.h - struct rte_bbdev_driver_info

Similarly, changes to the structure rte_bbdev are causing false 
positives, also suppressed in libabigail.ignore. It is not used by end applications 
and should not be exposed in public headers. 

Thanks,

Ray K

On 12/05/2020 03:22, Thomas Monjalon wrote:
> A new DPDK release candidate is ready for testing:
> 	https://git.dpdk.org/dpdk/tag/?id=v20.05-rc2
> 
> There are 286 new patches in this snapshot.
> 
> Release notes:
> 	http://doc.dpdk.org/guides/rel_notes/release_20_05.html
> 
> Highlights of 20.05-rc2:
> 	- rte_graph
> 	- telemetry rework
> 	- ChaCha20-Poly1305 crypto algorithm
> 
> The -rc3 should include only some bug fixes, simple cleanups, doc
> and tooling. We have one week to complete this milestone.
> Then one more week (allowing -rc4) should be needed before the release.
> 
> Please test and report issues on bugs.dpdk.org.
> As a community, we must close as many bugs as possible for -rc3.
> 
> Thank you everyone
> 
> 

^ permalink raw reply	[relevance 7%]

* [dpdk-dev] [PATCH v2 09/12] net/dpaa: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
                     ` (4 preceding siblings ...)
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 08/12] net/dpaa2: " Hemant Agrawal
@ 2020-05-12 14:00  3%   ` Hemant Agrawal
  2020-05-13 12:44  4%   ` [dpdk-dev] [PATCH v2 01/12] common/dpaax: " Thomas Monjalon
    7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa/dpaa_ethdev.h            | 2 ++
 drivers/net/dpaa/rte_pmd_dpaa_version.map | 9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index af9fc2105d..7393a9df05 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -160,12 +160,14 @@ struct dpaa_if_stats {
 	uint64_t tund;		/**<Tx Undersized */
 };
 
+__rte_internal
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		u16 ch_id,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 			   int eth_rx_queue_id);
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index f403a1526d..3df144dc8d 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,9 +1,16 @@
 DPDK_20.0 {
 	global:
 
+	rte_pmd_dpaa_set_tx_loopback;
+
+	local: *;
+};
+
+INTERNAL {
+	global:
+
 	dpaa_eth_eventq_attach;
 	dpaa_eth_eventq_detach;
-	rte_pmd_dpaa_set_tx_loopback;
 
 	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 08/12] net/dpaa2: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
                     ` (3 preceding siblings ...)
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 07/12] crypto: " Hemant Agrawal
@ 2020-05-12 14:00  3%   ` Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 09/12] net/dpaa: " Hemant Agrawal
                     ` (2 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/net/dpaa2/dpaa2_ethdev.h            | 2 ++
 drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dpaa2/dpaa2_ethdev.h b/drivers/net/dpaa2/dpaa2_ethdev.h
index 2c49a7f01f..c7fb6539ff 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.h
+++ b/drivers/net/dpaa2/dpaa2_ethdev.h
@@ -164,11 +164,13 @@ int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
 
 int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv, void *blist);
 
+__rte_internal
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
 
+__rte_internal
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id);
 
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index f2bb793319..78ea74e058 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_eth_eventq_attach;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 06/12] bus/dpaa: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 02/12] mempool/dpaa2: " Hemant Agrawal
  2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 03/12] bus/fslmc: " Hemant Agrawal
@ 2020-05-12 14:00  1%   ` Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 07/12] crypto: " Hemant Agrawal
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/bus/dpaa/include/fsl_bman.h       |  6 +++++
 drivers/bus/dpaa/include/fsl_fman.h       | 27 +++++++++++++++++++
 drivers/bus/dpaa/include/fsl_qman.h       | 32 +++++++++++++++++++++++
 drivers/bus/dpaa/include/fsl_usd.h        |  6 +++++
 drivers/bus/dpaa/include/netcfg.h         |  2 ++
 drivers/bus/dpaa/rte_bus_dpaa_version.map |  7 +----
 drivers/bus/dpaa/rte_dpaa_bus.h           |  5 ++++
 7 files changed, 79 insertions(+), 6 deletions(-)

diff --git a/drivers/bus/dpaa/include/fsl_bman.h b/drivers/bus/dpaa/include/fsl_bman.h
index f9cd972153..82da2fcfe0 100644
--- a/drivers/bus/dpaa/include/fsl_bman.h
+++ b/drivers/bus/dpaa/include/fsl_bman.h
@@ -264,12 +264,14 @@ int bman_shutdown_pool(u32 bpid);
  * the structure provided by the caller can be released or reused after the
  * function returns.
  */
+__rte_internal
 struct bman_pool *bman_new_pool(const struct bman_pool_params *params);
 
 /**
  * bman_free_pool - Deallocates a Buffer Pool object
  * @pool: the pool object to release
  */
+__rte_internal
 void bman_free_pool(struct bman_pool *pool);
 
 /**
@@ -279,6 +281,7 @@ void bman_free_pool(struct bman_pool *pool);
  * The returned pointer refers to state within the pool object so must not be
  * modified and can no longer be read once the pool object is destroyed.
  */
+__rte_internal
 const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
 
 /**
@@ -289,6 +292,7 @@ const struct bman_pool_params *bman_get_params(const struct bman_pool *pool);
  * @flags: bit-mask of BMAN_RELEASE_FLAG_*** options
  *
  */
+__rte_internal
 int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -302,6 +306,7 @@ int bman_release(struct bman_pool *pool, const struct bm_buffer *bufs, u8 num,
  * The return value will be the number of buffers obtained from the pool, or a
  * negative error code if a h/w error or pool starvation was encountered.
  */
+__rte_internal
 int bman_acquire(struct bman_pool *pool, struct bm_buffer *bufs, u8 num,
 		 u32 flags);
 
@@ -317,6 +322,7 @@ int bman_query_pools(struct bm_pool_state *state);
  *
  * Return the number of the free buffers
  */
+__rte_internal
 u32 bman_query_free_buffers(struct bman_pool *pool);
 
 /**
diff --git a/drivers/bus/dpaa/include/fsl_fman.h b/drivers/bus/dpaa/include/fsl_fman.h
index 5705ebfdce..6c87c8db0d 100644
--- a/drivers/bus/dpaa/include/fsl_fman.h
+++ b/drivers/bus/dpaa/include/fsl_fman.h
@@ -7,6 +7,8 @@
 #ifndef __FSL_FMAN_H
 #define __FSL_FMAN_H
 
+#include <rte_compat.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -43,18 +45,23 @@ struct fm_status_t {
 } __rte_packed;
 
 /* Set MAC address for a particular interface */
+__rte_internal
 int fman_if_add_mac_addr(struct fman_if *p, uint8_t *eth, uint8_t addr_num);
 
 /* Remove a MAC address for a particular interface */
+__rte_internal
 void fman_if_clear_mac_addr(struct fman_if *p, uint8_t addr_num);
 
 /* Get the FMAN statistics */
+__rte_internal
 void fman_if_stats_get(struct fman_if *p, struct rte_eth_stats *stats);
 
 /* Reset the FMAN statistics */
+__rte_internal
 void fman_if_stats_reset(struct fman_if *p);
 
 /* Get all of the FMAN statistics */
+__rte_internal
 void fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n);
 
 /* Set ignore pause option for a specific interface */
@@ -64,32 +71,43 @@ void fman_if_set_rx_ignore_pause_frames(struct fman_if *p, bool enable);
 void fman_if_conf_max_frame_len(struct fman_if *p, unsigned int max_frame_len);
 
 /* Enable/disable Rx promiscuous mode on specified interface */
+__rte_internal
 void fman_if_promiscuous_enable(struct fman_if *p);
+__rte_internal
 void fman_if_promiscuous_disable(struct fman_if *p);
 
 /* Enable/disable Rx on specific interfaces */
+__rte_internal
 void fman_if_enable_rx(struct fman_if *p);
+__rte_internal
 void fman_if_disable_rx(struct fman_if *p);
 
 /* Enable/disable loopback on specific interfaces */
+__rte_internal
 void fman_if_loopback_enable(struct fman_if *p);
+__rte_internal
 void fman_if_loopback_disable(struct fman_if *p);
 
 /* Set buffer pool on specific interface */
+__rte_internal
 void fman_if_set_bp(struct fman_if *fm_if, unsigned int num, int bpid,
 		    size_t bufsize);
 
 /* Get Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_get_fc_threshold(struct fman_if *fm_if);
 
 /* Enable and Set Flow Control threshold parameters on specific interface */
+__rte_internal
 int fman_if_set_fc_threshold(struct fman_if *fm_if,
 			u32 high_water, u32 low_water, u32 bpid);
 
 /* Get Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_get_fc_quanta(struct fman_if *fm_if);
 
 /* Set Flow Control pause quanta on specific interface */
+__rte_internal
 int fman_if_set_fc_quanta(struct fman_if *fm_if, u16 pause_quanta);
 
 /* Set default error fqid on specific interface */
@@ -99,35 +117,44 @@ void fman_if_set_err_fqid(struct fman_if *fm_if, uint32_t err_fqid);
 int fman_if_get_ic_params(struct fman_if *fm_if, struct fman_if_ic_params *icp);
 
 /* Set IC transfer params */
+__rte_internal
 int fman_if_set_ic_params(struct fman_if *fm_if,
 			  const struct fman_if_ic_params *icp);
 
 /* Get interface fd->offset value */
+__rte_internal
 int fman_if_get_fdoff(struct fman_if *fm_if);
 
 /* Set interface fd->offset value */
+__rte_internal
 void fman_if_set_fdoff(struct fman_if *fm_if, uint32_t fd_offset);
 
 /* Get interface SG enable status value */
+__rte_internal
 int fman_if_get_sg_enable(struct fman_if *fm_if);
 
 /* Set interface SG support mode */
+__rte_internal
 void fman_if_set_sg(struct fman_if *fm_if, int enable);
 
 /* Get interface Max Frame length (MTU) */
 uint16_t fman_if_get_maxfrm(struct fman_if *fm_if);
 
 /* Set interface  Max Frame length (MTU) */
+__rte_internal
 void fman_if_set_maxfrm(struct fman_if *fm_if, uint16_t max_frm);
 
 /* Set interface next invoked action for dequeue operation */
 void fman_if_set_dnia(struct fman_if *fm_if, uint32_t nia);
 
 /* discard error packets on rx */
+__rte_internal
 void fman_if_discard_rx_errors(struct fman_if *fm_if);
 
+__rte_internal
 void fman_if_set_mcast_filter_table(struct fman_if *p);
 
+__rte_internal
 void fman_if_reset_mcast_filter_table(struct fman_if *p);
 
 int fman_if_add_hash_mac_addr(struct fman_if *p, uint8_t *eth);
diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h
index 1b3342e7e6..4411bb0a79 100644
--- a/drivers/bus/dpaa/include/fsl_qman.h
+++ b/drivers/bus/dpaa/include/fsl_qman.h
@@ -1314,6 +1314,7 @@ struct qman_cgr {
 #define QMAN_CGR_MODE_FRAME          0x00000001
 
 #ifdef CONFIG_FSL_QMAN_FQ_LOOKUP
+__rte_internal
 void qman_set_fq_lookup_table(void **table);
 #endif
 
@@ -1322,6 +1323,7 @@ void qman_set_fq_lookup_table(void **table);
  */
 int qman_get_portal_index(void);
 
+__rte_internal
 u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
 			void **bufs);
 
@@ -1333,6 +1335,7 @@ u32 qman_portal_dequeue(struct rte_event ev[], unsigned int poll_limit,
  * processed via qman_poll_***() functions). Returns zero for success, or
  * -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_add(u32 bits);
 
 /**
@@ -1340,6 +1343,7 @@ int qman_irqsource_add(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
 
 /**
@@ -1350,6 +1354,7 @@ int qman_fq_portal_irqsource_add(struct qman_portal *p, u32 bits);
  * instead be processed via qman_poll_***() functions. Returns zero for success,
  * or -EINVAL if the current CPU is sharing a portal hosted on another CPU.
  */
+__rte_internal
 int qman_irqsource_remove(u32 bits);
 
 /**
@@ -1357,6 +1362,7 @@ int qman_irqsource_remove(u32 bits);
  * takes portal (fq specific) as input rather than using the thread affined
  * portal.
  */
+__rte_internal
 int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
 
 /**
@@ -1369,6 +1375,7 @@ int qman_fq_portal_irqsource_remove(struct qman_portal *p, u32 bits);
  */
 u16 qman_affine_channel(int cpu);
 
+__rte_internal
 unsigned int qman_portal_poll_rx(unsigned int poll_limit,
 				 void **bufs, struct qman_portal *q);
 
@@ -1380,6 +1387,7 @@ unsigned int qman_portal_poll_rx(unsigned int poll_limit,
  *
  * This function will issue a volatile dequeue command to the QMAN.
  */
+__rte_internal
 int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
 
 /**
@@ -1390,6 +1398,7 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags);
  * is issued. It will keep returning NULL until there is no packet available on
  * the DQRR.
  */
+__rte_internal
 struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
 
 /**
@@ -1401,6 +1410,7 @@ struct qm_dqrr_entry *qman_dequeue(struct qman_fq *fq);
  * This will consume the DQRR enrey and make it available for next volatile
  * dequeue.
  */
+__rte_internal
 void qman_dqrr_consume(struct qman_fq *fq,
 		       struct qm_dqrr_entry *dq);
 
@@ -1414,6 +1424,7 @@ void qman_dqrr_consume(struct qman_fq *fq,
  * this function will return -EINVAL, otherwise the return value is >=0 and
  * represents the number of DQRR entries processed.
  */
+__rte_internal
 int qman_poll_dqrr(unsigned int limit);
 
 /**
@@ -1460,6 +1471,7 @@ void qman_start_dequeues(void);
  * (SDQCR). The requested pools are limited to those the portal has dequeue
  * access to.
  */
+__rte_internal
 void qman_static_dequeue_add(u32 pools, struct qman_portal *qm);
 
 /**
@@ -1507,6 +1519,7 @@ void qman_dca(const struct qm_dqrr_entry *dq, int park_request);
  * function must be called from the same CPU as that which processed the DQRR
  * entry in the first place.
  */
+__rte_internal
 void qman_dca_index(u8 index, int park_request);
 
 /**
@@ -1564,6 +1577,7 @@ void qman_set_dc_ern(qman_cb_dc_ern handler, int affine);
  * a frame queue object based on that, rather than assuming/requiring that it be
  * Out of Service.
  */
+__rte_internal
 int qman_create_fq(u32 fqid, u32 flags, struct qman_fq *fq);
 
 /**
@@ -1582,6 +1596,7 @@ void qman_destroy_fq(struct qman_fq *fq, u32 flags);
  * qman_fq_fqid - Queries the frame queue ID of a FQ object
  * @fq: the frame queue object to query
  */
+__rte_internal
 u32 qman_fq_fqid(struct qman_fq *fq);
 
 /**
@@ -1594,6 +1609,7 @@ u32 qman_fq_fqid(struct qman_fq *fq);
  * This captures the state, as seen by the driver, at the time the function
  * executes.
  */
+__rte_internal
 void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
 
 /**
@@ -1630,6 +1646,7 @@ void qman_fq_state(struct qman_fq *fq, enum qman_fq_state *state, u32 *flags);
  * context_a.address fields and will leave the stashing fields provided by the
  * user alone, otherwise it will zero out the context_a.stashing fields.
  */
+__rte_internal
 int qman_init_fq(struct qman_fq *fq, u32 flags, struct qm_mcc_initfq *opts);
 
 /**
@@ -1659,6 +1676,7 @@ int qman_schedule_fq(struct qman_fq *fq);
  * caller should be prepared to accept the callback as the function is called,
  * not only once it has returned.
  */
+__rte_internal
 int qman_retire_fq(struct qman_fq *fq, u32 *flags);
 
 /**
@@ -1668,6 +1686,7 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
  * The frame queue must be retired and empty, and if any order restoration list
  * was released as ERNs at the time of retirement, they must all be consumed.
  */
+__rte_internal
 int qman_oos_fq(struct qman_fq *fq);
 
 /**
@@ -1701,6 +1720,7 @@ int qman_query_fq_has_pkts(struct qman_fq *fq);
  * @fq: the frame queue object to be queried
  * @np: storage for the queried FQD fields
  */
+__rte_internal
 int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
 
 /**
@@ -1708,6 +1728,7 @@ int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
  * @fq: the frame queue object to be queried
  * @frm_cnt: number of frames in the queue
  */
+__rte_internal
 int qman_query_fq_frm_cnt(struct qman_fq *fq, u32 *frm_cnt);
 
 /**
@@ -1738,6 +1759,7 @@ int qman_query_wq(u8 query_dedicated, struct qm_mcr_querywq *wq);
  * callback, or by waiting for the QMAN_FQ_STATE_VDQCR bit to disappear from the
  * "flags" retrieved from qman_fq_state().
  */
+__rte_internal
 int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
 
 /**
@@ -1773,8 +1795,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
  * of an already busy hardware resource by throttling many of the to-be-dropped
  * enqueues "at the source".
  */
+__rte_internal
 int qman_enqueue(struct qman_fq *fq, const struct qm_fd *fd, u32 flags);
 
+__rte_internal
 int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
 		       int frames_to_send);
 
@@ -1788,6 +1812,7 @@ int qman_enqueue_multi(struct qman_fq *fq, const struct qm_fd *fd, u32 *flags,
  * This API is similar to qman_enqueue_multi(), but it takes fd which needs
  * to be processed by different frame queues.
  */
+__rte_internal
 int
 qman_enqueue_multi_fq(struct qman_fq *fq[], const struct qm_fd *fd,
 		      u32 *flags, int frames_to_send);
@@ -1876,6 +1901,7 @@ int qman_shutdown_fq(u32 fqid);
  * @fqid: the base FQID of the range to deallocate
  * @count: the number of FQIDs in the range
  */
+__rte_internal
 int qman_reserve_fqid_range(u32 fqid, unsigned int count);
 static inline int qman_reserve_fqid(u32 fqid)
 {
@@ -1895,6 +1921,7 @@ static inline int qman_reserve_fqid(u32 fqid)
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_pool_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_pool(u32 *result)
 {
@@ -1942,6 +1969,7 @@ void qman_seed_pool_range(u32 id, unsigned int count);
  * any unspecified parameters) will be used rather than a modify hw hardware
  * (which only modifies the specified parameters).
  */
+__rte_internal
 int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -1964,6 +1992,7 @@ int qman_create_cgr_to_dcp(struct qman_cgr *cgr, u32 flags, u16 dcp_portal,
  * is executed. This must be excuted on the same affine portal on which it was
  * created.
  */
+__rte_internal
 int qman_delete_cgr(struct qman_cgr *cgr);
 
 /**
@@ -1980,6 +2009,7 @@ int qman_delete_cgr(struct qman_cgr *cgr);
  * unspecified parameters) will be used rather than a modify hw hardware (which
  * only modifies the specified parameters).
  */
+__rte_internal
 int qman_modify_cgr(struct qman_cgr *cgr, u32 flags,
 		    struct qm_mcc_initcgr *opts);
 
@@ -2008,6 +2038,7 @@ int qman_query_congestion(struct qm_mcr_querycongestion *congestion);
  * than requested (though alignment will be as requested). If @partial is zero,
  * the return value will either be 'count' or negative.
  */
+__rte_internal
 int qman_alloc_cgrid_range(u32 *result, u32 count, u32 align, int partial);
 static inline int qman_alloc_cgrid(u32 *result)
 {
@@ -2021,6 +2052,7 @@ static inline int qman_alloc_cgrid(u32 *result)
  * @id: the base CGR ID of the range to deallocate
  * @count: the number of CGR IDs in the range
  */
+__rte_internal
 void qman_release_cgrid_range(u32 id, unsigned int count);
 static inline void qman_release_cgrid(u32 id)
 {
diff --git a/drivers/bus/dpaa/include/fsl_usd.h b/drivers/bus/dpaa/include/fsl_usd.h
index 263d9bb976..30ec63a09d 100644
--- a/drivers/bus/dpaa/include/fsl_usd.h
+++ b/drivers/bus/dpaa/include/fsl_usd.h
@@ -58,6 +58,7 @@ int bman_allocate_raw_portal(struct dpaa_raw_portal *portal);
 int bman_free_raw_portal(struct dpaa_raw_portal *portal);
 
 /* Obtain thread-local UIO file-descriptors */
+__rte_internal
 int qman_thread_fd(void);
 int bman_thread_fd(void);
 
@@ -66,8 +67,12 @@ int bman_thread_fd(void);
  * processing is complete. As such, it is essential to call this before going
  * into another blocking read/select/poll.
  */
+__rte_internal
 void qman_thread_irq(void);
+
+__rte_internal
 void bman_thread_irq(void);
+__rte_internal
 void qman_fq_portal_thread_irq(struct qman_portal *qp);
 
 void qman_clear_irq(void);
@@ -77,6 +82,7 @@ int qman_global_init(void);
 int bman_global_init(void);
 
 /* Direct portal create and destroy */
+__rte_internal
 struct qman_portal *fsl_qman_fq_portal_create(int *fd);
 int fsl_qman_fq_portal_destroy(struct qman_portal *qp);
 int fsl_qman_fq_portal_init(struct qman_portal *qp);
diff --git a/drivers/bus/dpaa/include/netcfg.h b/drivers/bus/dpaa/include/netcfg.h
index bf7bfae8cb..d7d1befd24 100644
--- a/drivers/bus/dpaa/include/netcfg.h
+++ b/drivers/bus/dpaa/include/netcfg.h
@@ -46,11 +46,13 @@ struct netcfg_interface {
  * cfg_file: FMC config XML file
  * Returns the configuration information in newly allocated memory.
  */
+__rte_internal
 struct netcfg_info *netcfg_acquire(void);
 
 /* cfg_ptr: configuration information pointer.
  * Frees the resources allocated by the configuration layer.
  */
+__rte_internal
 void netcfg_release(struct netcfg_info *cfg_ptr);
 
 #ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index e6ca4361e0..f4947fac41 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	bman_acquire;
@@ -13,7 +13,6 @@ DPDK_20.0 {
 	dpaa_logtype_pmd;
 	dpaa_netcfg;
 	dpaa_svr_family;
-	fman_ccsr_map_fd;
 	fman_dealloc_bufs_mask_hi;
 	fman_dealloc_bufs_mask_lo;
 	fman_if_add_mac_addr;
@@ -51,7 +50,6 @@ DPDK_20.0 {
 	qm_channel_pool1;
 	qman_alloc_cgrid_range;
 	qman_alloc_pool_range;
-	qman_clear_irq;
 	qman_create_cgr;
 	qman_create_fq;
 	qman_dca_index;
@@ -87,10 +85,7 @@ DPDK_20.0 {
 	qman_volatile_dequeue;
 	rte_dpaa_driver_register;
 	rte_dpaa_driver_unregister;
-	rte_dpaa_mem_ptov;
 	rte_dpaa_portal_fq_close;
 	rte_dpaa_portal_fq_init;
 	rte_dpaa_portal_init;
-
-	local: *;
 };
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index 373aca9785..d4aee132ef 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -158,6 +158,7 @@ rte_dpaa_mem_vtop(void *vaddr)
  *   A pointer to a rte_dpaa_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
 
 /**
@@ -167,6 +168,7 @@ void rte_dpaa_driver_register(struct rte_dpaa_driver *driver);
  *	A pointer to a rte_dpaa_driver structure describing the driver
  *	to be unregistered.
  */
+__rte_internal
 void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
 
 /**
@@ -178,10 +180,13 @@ void rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver);
  * @return
  *	0 in case of success, error otherwise
  */
+__rte_internal
 int rte_dpaa_portal_init(void *arg);
 
+__rte_internal
 int rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq);
 
+__rte_internal
 int rte_dpaa_portal_fq_close(struct qman_fq *fq);
 
 /**
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v2 07/12] crypto: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
                     ` (2 preceding siblings ...)
  2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 06/12] bus/dpaa: " Hemant Agrawal
@ 2020-05-12 14:00  3%   ` Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 08/12] net/dpaa2: " Hemant Agrawal
                     ` (3 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_event.h             | 5 +++--
 drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map | 2 +-
 drivers/crypto/dpaa_sec/dpaa_sec_event.h               | 8 ++++----
 drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map   | 4 +---
 4 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
index c779d5d837..675cbbb81d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_event.h
@@ -6,12 +6,13 @@
 #ifndef _DPAA2_SEC_EVENT_H_
 #define _DPAA2_SEC_EVENT_H_
 
-int
-dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		struct dpaa2_dpcon_dev *dpcon,
 		const struct rte_event *event);
 
+__rte_internal
 int dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 5952d645fd..1352f576e5 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_sec_eventq_attach;
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec_event.h b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
index 8d1a018096..0b09fa8f75 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec_event.h
+++ b/drivers/crypto/dpaa_sec/dpaa_sec_event.h
@@ -6,14 +6,14 @@
 #ifndef _DPAA_SEC_EVENT_H_
 #define _DPAA_SEC_EVENT_H_
 
-int
-dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
 		uint16_t ch_id,
 		const struct rte_event *event);
 
-int
-dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
+__rte_internal
+int dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 		int qp_id);
 
 #endif /* _DPAA_SEC_EVENT_H_ */
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index 8580fa13db..aed07fb371 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,8 +1,6 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa_sec_eventq_attach;
 	dpaa_sec_eventq_detach;
-
-	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 03/12] bus/fslmc: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 02/12] mempool/dpaa2: " Hemant Agrawal
@ 2020-05-12 14:00  1%   ` Hemant Agrawal
  2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 06/12] bus/dpaa: " Hemant Agrawal
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/bus/fslmc/fslmc_vfio.h                |  4 ++
 drivers/bus/fslmc/mc/fsl_dpbp.h               |  6 +++
 drivers/bus/fslmc/mc/fsl_dpci.h               |  3 ++
 drivers/bus/fslmc/mc/fsl_dpcon.h              |  2 +
 drivers/bus/fslmc/mc/fsl_dpdmai.h             |  8 ++++
 drivers/bus/fslmc/mc/fsl_dpio.h               |  9 ++++
 drivers/bus/fslmc/mc/fsl_dpmng.h              |  2 +
 drivers/bus/fslmc/mc/fsl_mc_cmd.h             |  1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.h      |  5 +++
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h       |  8 ++++
 .../bus/fslmc/qbman/include/fsl_qbman_debug.h |  3 ++
 .../fslmc/qbman/include/fsl_qbman_portal.h    | 41 +++++++++++++++++++
 drivers/bus/fslmc/rte_bus_fslmc_version.map   |  4 +-
 drivers/bus/fslmc/rte_fslmc.h                 |  4 ++
 14 files changed, 97 insertions(+), 3 deletions(-)

diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h
index c988121294..609e48aea3 100644
--- a/drivers/bus/fslmc/fslmc_vfio.h
+++ b/drivers/bus/fslmc/fslmc_vfio.h
@@ -41,7 +41,11 @@ typedef struct fslmc_vfio_container {
 } fslmc_vfio_container;
 
 extern char *fslmc_container;
+
+__rte_internal
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index);
+
+__rte_internal
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index);
 
 int rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle,
diff --git a/drivers/bus/fslmc/mc/fsl_dpbp.h b/drivers/bus/fslmc/mc/fsl_dpbp.h
index 9d405b42c4..7b537a21be 100644
--- a/drivers/bus/fslmc/mc/fsl_dpbp.h
+++ b/drivers/bus/fslmc/mc/fsl_dpbp.h
@@ -14,6 +14,7 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -42,10 +43,12 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t obj_id);
 
+__rte_internal
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -55,6 +58,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -70,6 +74,7 @@ struct dpbp_attr {
 	uint16_t bpid;
 };
 
+__rte_internal
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -88,6 +93,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index a0ee5bfe69..81fd3438aa 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -181,6 +181,7 @@ struct dpci_rx_queue_cfg {
 	int order_preservation_en;
 };
 
+__rte_internal
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -228,6 +229,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
 			 uint16_t *major_ver,
 			 uint16_t *minor_ver);
 
+__rte_internal
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -235,6 +237,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint8_t options,
 		 struct opr_cfg *cfg);
 
+__rte_internal
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index af81d51195..7caa6c68a1 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -20,6 +20,7 @@ struct fsl_mc_io;
  */
 #define DPCON_INVALID_DPIO_ID		(int)(-1)
 
+__rte_internal
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -77,6 +78,7 @@ struct dpcon_attr {
 	uint8_t num_priorities;
 };
 
+__rte_internal
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpdmai.h b/drivers/bus/fslmc/mc/fsl_dpdmai.h
index 40469cc139..e7e8a5dda9 100644
--- a/drivers/bus/fslmc/mc/fsl_dpdmai.h
+++ b/drivers/bus/fslmc/mc/fsl_dpdmai.h
@@ -23,11 +23,13 @@ struct fsl_mc_io;
  */
 #define DPDMAI_ALL_QUEUES	(uint8_t)(-1)
 
+__rte_internal
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
 		uint16_t *token);
 
+__rte_internal
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -54,10 +56,12 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint32_t object_id);
 
+__rte_internal
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token);
 
+__rte_internal
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token);
@@ -82,6 +86,7 @@ struct dpdmai_attr {
 	uint8_t num_of_queues;
 };
 
+__rte_internal
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -148,6 +153,7 @@ struct dpdmai_rx_queue_cfg {
 
 };
 
+__rte_internal
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -168,6 +174,7 @@ struct dpdmai_rx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -184,6 +191,7 @@ struct dpdmai_tx_queue_attr {
 	uint32_t fqid;
 };
 
+__rte_internal
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpio.h b/drivers/bus/fslmc/mc/fsl_dpio.h
index 3158f53191..92e97db94b 100644
--- a/drivers/bus/fslmc/mc/fsl_dpio.h
+++ b/drivers/bus/fslmc/mc/fsl_dpio.h
@@ -13,11 +13,13 @@
 
 struct fsl_mc_io;
 
+__rte_internal
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
 	      uint16_t *token);
 
+__rte_internal
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
@@ -57,10 +59,12 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint32_t object_id);
 
+__rte_internal
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token);
 
+__rte_internal
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token);
@@ -70,10 +74,12 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
 		    uint16_t token,
 		    int *en);
 
+__rte_internal
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token);
 
+__rte_internal
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -84,12 +90,14 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint16_t token,
 				  uint8_t *sdest);
 
+__rte_internal
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
 				    int dpcon_id,
 				    uint8_t *channel_index);
 
+__rte_internal
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
@@ -119,6 +127,7 @@ struct dpio_attr {
 	uint32_t clk;
 };
 
+__rte_internal
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/fsl_dpmng.h b/drivers/bus/fslmc/mc/fsl_dpmng.h
index 36c387af27..cdd8506625 100644
--- a/drivers/bus/fslmc/mc/fsl_dpmng.h
+++ b/drivers/bus/fslmc/mc/fsl_dpmng.h
@@ -34,6 +34,7 @@ struct mc_version {
 	uint32_t revision;
 };
 
+__rte_internal
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info);
@@ -48,6 +49,7 @@ struct mc_soc_version {
 	uint32_t pvr;
 };
 
+__rte_internal
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info);
diff --git a/drivers/bus/fslmc/mc/fsl_mc_cmd.h b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
index ac919610cf..06ea41a3b2 100644
--- a/drivers/bus/fslmc/mc/fsl_mc_cmd.h
+++ b/drivers/bus/fslmc/mc/fsl_mc_cmd.h
@@ -80,6 +80,7 @@ enum mc_cmd_status {
 
 #define MC_CMD_HDR_FLAGS_MASK	0xFF00FF00
 
+__rte_internal
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index 2829c93806..7c5966241a 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -36,20 +36,25 @@ extern uint8_t dpaa2_eqcr_size;
 extern struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
 
 /* Affine a DPIO portal to current processing thread */
+__rte_internal
 int dpaa2_affine_qbman_swp(void);
 
 /* Affine additional DPIO portal to current crypto processing thread */
+__rte_internal
 int dpaa2_affine_qbman_ethrx_swp(void);
 
 /* allocate memory for FQ - dq storage */
+__rte_internal
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free memory for FQ- dq storage */
+__rte_internal
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage);
 
 /* free the enqueue response descriptors */
+__rte_internal
 uint32_t
 dpaa2_free_eq_descriptors(void);
 
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 368fe7c688..33b191f823 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -426,11 +426,19 @@ void set_swp_active_dqs(uint16_t dpio_index, struct qbman_result *dqs)
 {
 	rte_global_active_dqs_list[dpio_index].global_active_dqs = dqs;
 }
+__rte_internal
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void);
+
+__rte_internal
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp);
+
+__rte_internal
 int dpaa2_dpbp_supported(void);
 
+__rte_internal
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void);
+
+__rte_internal
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci);
 
 #endif
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
index e010b1b6ae..328f2022fc 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_debug.h
@@ -24,7 +24,10 @@ uint8_t verb;
 	uint8_t reserved2[29];
 };
 
+__rte_internal
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r);
+
+__rte_internal
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r);
 uint32_t qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r);
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
index 88f0a99686..7ac0f82106 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_portal.h
@@ -117,6 +117,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p);
  * @p: the given software portal object.
  * @mask: The value to set in SWP_ISR register.
  */
+__rte_internal
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
 
 /**
@@ -286,6 +287,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled);
  * rather by specifying the index (from 0 to 15) that has been mapped to the
  * desired channel.
  */
+__rte_internal
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
 
 /* ------------------- */
@@ -325,6 +327,7 @@ enum qbman_pull_type_e {
  * default/starting state.
  * @d: the pull dequeue descriptor to be cleared.
  */
+__rte_internal
 void qbman_pull_desc_clear(struct qbman_pull_desc *d);
 
 /**
@@ -340,6 +343,7 @@ void qbman_pull_desc_clear(struct qbman_pull_desc *d);
  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
  * those writes to main-memory express a cache-warming attribute.
  */
+__rte_internal
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 uint64_t storage_phys,
@@ -349,6 +353,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
  * @d: the pull dequeue descriptor to be set.
  * @numframes: number of frames to be set, must be between 1 and 16, inclusive.
  */
+__rte_internal
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes);
 /**
@@ -372,6 +377,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token);
  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
  * @fqid: the frame queue index of the given FQ.
  */
+__rte_internal
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
 
 /**
@@ -407,6 +413,7 @@ void qbman_pull_desc_set_rad(struct qbman_pull_desc *d, int rad);
  * Return 0 for success, and -EBUSY if the software portal is not ready
  * to do pull dequeue.
  */
+__rte_internal
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
 
 /* -------------------------------- */
@@ -421,12 +428,14 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+__rte_internal
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
 
 /**
  * qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
  * @s: the software portal object.
  */
+__rte_internal
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
 
 /**
@@ -435,6 +444,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
  * @s: the software portal object.
  * @dq: the DQRR entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
 
 /**
@@ -442,6 +452,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
  * @s: the software portal object.
  * @dqrr_index: the DQRR index entry to be consumed.
  */
+__rte_internal
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
 
 /**
@@ -450,6 +461,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
  *
  * Return dqrr index.
  */
+__rte_internal
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
 
 /**
@@ -460,6 +472,7 @@ uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
  *
  * Return dqrr entry object.
  */
+__rte_internal
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
 
 /* ------------------------------------------------- */
@@ -485,6 +498,7 @@ struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq);
 
@@ -497,8 +511,10 @@ int qbman_result_has_new_result(struct qbman_swp *s,
  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
  * dequeue result.
  */
+__rte_internal
 int qbman_check_command_complete(struct qbman_result *dq);
 
+__rte_internal
 int qbman_check_new_result(struct qbman_result *dq);
 
 /* -------------------------------------------------------- */
@@ -624,6 +640,7 @@ int qbman_result_is_FQPN(const struct qbman_result *dq);
  *
  * Return the state field.
  */
+__rte_internal
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
 
 /**
@@ -658,6 +675,7 @@ static inline int qbman_result_DQ_is_pull_complete(
  *
  * Return seqnum.
  */
+__rte_internal
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
 
 /**
@@ -667,6 +685,7 @@ uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
  *
  * Return odpid.
  */
+__rte_internal
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
 
 /**
@@ -699,6 +718,7 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq);
  *
  * Return the frame queue context.
  */
+__rte_internal
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
 
 /**
@@ -707,6 +727,7 @@ uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
  *
  * Return the frame descriptor.
  */
+__rte_internal
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
 
 /* State-change notifications (FQDAN/CDAN/CSCN/...). */
@@ -717,6 +738,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
  *
  * Return the state in the notifiation.
  */
+__rte_internal
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
 
 /**
@@ -850,6 +872,7 @@ struct qbman_eq_response {
  * default/starting state.
  * @d: the given enqueue descriptor.
  */
+__rte_internal
 void qbman_eq_desc_clear(struct qbman_eq_desc *d);
 
 /* Exactly one of the following descriptor "actions" should be set. (Calling
@@ -870,6 +893,7 @@ void qbman_eq_desc_clear(struct qbman_eq_desc *d);
  * @response_success: 1 = enqueue with response always; 0 = enqueue with
  * rejections returned on a FQ.
  */
+__rte_internal
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
 /**
  * qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
@@ -881,6 +905,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
  * @incomplete: indiates whether this is the last fragments using the same
  * sequeue number.
  */
+__rte_internal
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete);
 
@@ -915,6 +940,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
  * data structure.) 'stash' controls whether or not the write to main-memory
  * expresses a cache-warming attribute.
  */
+__rte_internal
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				uint64_t storage_phys,
 				int stash);
@@ -929,6 +955,7 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
  * result "storage" before issuing an enqueue, and use any non-zero 'token'
  * value.
  */
+__rte_internal
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
 
 /**
@@ -944,6 +971,7 @@ void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
  * @d: the enqueue descriptor
  * @fqid: the id of the frame queue to be enqueued.
  */
+__rte_internal
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
 
 /**
@@ -953,6 +981,7 @@ void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
  * @qd_bin: the queuing destination bin
  * @qd_prio: the queuing destination priority.
  */
+__rte_internal
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio);
 
@@ -978,6 +1007,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable);
  * held-active (order-preserving) FQ, whether the FQ should be parked instead of
  * being rescheduled.)
  */
+__rte_internal
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park);
 
@@ -987,6 +1017,7 @@ void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
  *
  * Return the fd pointer.
  */
+__rte_internal
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
 
 /**
@@ -997,6 +1028,7 @@ struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
  * This value is set into the response id before the enqueue command, which,
  * get overwritten by qbman once the enqueue command is complete.
  */
+__rte_internal
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
 
 /**
@@ -1009,6 +1041,7 @@ void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
  * copied into the enqueue response to determine if the command has been
  * completed, and response has been updated.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
 
 /**
@@ -1017,6 +1050,7 @@ uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
  *
  * Return 0 when command is sucessful.
  */
+__rte_internal
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
 
 /**
@@ -1043,6 +1077,7 @@ int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 			       const struct qbman_eq_desc *d,
 			       const struct qbman_fd *fd,
@@ -1060,6 +1095,7 @@ int qbman_swp_enqueue_multiple(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 				  const struct qbman_eq_desc *d,
 				  struct qbman_fd **fd,
@@ -1076,6 +1112,7 @@ int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
  *
  * Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
  */
+__rte_internal
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 				    const struct qbman_eq_desc *d,
 				    const struct qbman_fd *fd,
@@ -1117,12 +1154,14 @@ struct qbman_release_desc {
  * default/starting state.
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_clear(struct qbman_release_desc *d);
 
 /**
  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
  * @d: the qbman release descriptor.
  */
+__rte_internal
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
 
 /**
@@ -1141,6 +1180,7 @@ void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable);
  *
  * Return 0 for success, -EBUSY if the release command ring is not ready.
  */
+__rte_internal
 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
 		      const uint64_t *buffers, unsigned int num_buffers);
 
@@ -1166,6 +1206,7 @@ int qbman_swp_release_thresh(struct qbman_swp *s, unsigned int thresh);
  * Return 0 for success, or negative error code if the acquire command
  * fails.
  */
+__rte_internal
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers);
 
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index fe45575046..04e61156c3 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaa2_affine_qbman_ethrx_swp;
@@ -11,7 +11,6 @@ DPDK_20.0 {
 	dpaa2_free_dpbp_dev;
 	dpaa2_free_dq_storage;
 	dpaa2_free_eq_descriptors;
-	dpaa2_get_qbman_swp;
 	dpaa2_io_portal;
 	dpaa2_svr_family;
 	dpaa2_virt_mode;
@@ -101,7 +100,6 @@ DPDK_20.0 {
 	rte_fslmc_driver_unregister;
 	rte_fslmc_get_device_count;
 	rte_fslmc_object_register;
-	rte_fslmc_vfio_dmamap;
 	rte_global_active_dqs_list;
 	rte_mcp_ptr_list;
 
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 96ba8dc259..5078b48ee1 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -162,6 +162,7 @@ RTE_DECLARE_PER_LCORE(struct dpaa2_portal_dqrr, dpaa2_held_bufs);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
 
 /**
@@ -171,6 +172,7 @@ void rte_fslmc_driver_register(struct rte_dpaa2_driver *driver);
  *   A pointer to a rte_dpaa2_driver structure describing the driver
  *   to be unregistered.
  */
+__rte_internal
 void rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver);
 
 /** Helper for DPAA2 device registration from driver (eth, crypto) instance */
@@ -189,6 +191,7 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  *   A pointer to a rte_dpaa_object structure describing the mc object
  *   to be registered.
  */
+__rte_internal
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
 /**
@@ -200,6 +203,7 @@ void rte_fslmc_object_register(struct rte_dpaa2_object *object);
  *   >=0 for count; 0 indicates either no device of the said type scanned or
  *   invalid device type.
  */
+__rte_internal
 uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
 
 /** Helper for DPAA2 object registration */
-- 
2.17.1


^ permalink raw reply	[relevance 1%]

* [dpdk-dev] [PATCH v2 02/12] mempool/dpaa2: move internal symbols into INTERNAL section
  2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
@ 2020-05-12 14:00  3%   ` Hemant Agrawal
  2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 03/12] bus/fslmc: " Hemant Agrawal
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/mempool/dpaa/rte_mempool_dpaa_version.map   | 2 +-
 drivers/mempool/dpaa2/dpaa2_hw_mempool.h            | 1 +
 drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map | 9 +++++++--
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 9eebaf7ffd..142547ee38 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	rte_dpaa_bpid_info;
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index fa0f2280d5..53fa1552d1 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -61,6 +61,7 @@ struct dpaa2_bp_info {
 
 extern struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 
+__rte_internal
 int rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 		       void **obj_table, unsigned int count);
 
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index cd4bc88273..686b024624 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,10 +1,15 @@
 DPDK_20.0 {
 	global:
 
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_mbuf_alloc_bulk;
 	rte_dpaa2_mbuf_from_buf_addr;
 	rte_dpaa2_mbuf_pool_bpid;
 
 	local: *;
 };
+
+INTERNAL {
+	global:
+
+	rte_dpaa2_bpid_info;
+	rte_dpaa2_mbuf_alloc_bulk;
+};
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH v2 01/12] common/dpaax: move internal symbols into INTERNAL section
  @ 2020-05-12 14:00  3% ` Hemant Agrawal
  2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 02/12] mempool/dpaa2: " Hemant Agrawal
                     ` (7 more replies)
  0 siblings, 8 replies; 200+ results
From: Hemant Agrawal @ 2020-05-12 14:00 UTC (permalink / raw)
  To: dev, david.marchand; +Cc: Hemant Agrawal

This patch moves the internal symbols to INTERNAL sections
so that any change in them is not reported as ABI breakage.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 drivers/common/dpaax/dpaa_of.h                    | 15 +++++++++++++++
 drivers/common/dpaax/dpaax_iova_table.h           |  4 ++++
 drivers/common/dpaax/rte_common_dpaax_version.map |  2 +-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/common/dpaax/dpaa_of.h b/drivers/common/dpaax/dpaa_of.h
index 960b421766..38d91a1afe 100644
--- a/drivers/common/dpaax/dpaa_of.h
+++ b/drivers/common/dpaax/dpaa_of.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <rte_common.h>
 #include <dpaa_list.h>
+#include <rte_compat.h>
 
 #ifndef OF_INIT_DEFAULT_PATH
 #define OF_INIT_DEFAULT_PATH "/proc/device-tree"
@@ -102,6 +103,7 @@ struct dt_file {
 	uint64_t buf[OF_FILE_BUF_MAX >> 3];
 };
 
+__rte_internal
 const struct device_node *of_find_compatible_node(
 					const struct device_node *from,
 					const char *type __rte_unused,
@@ -113,32 +115,44 @@ const struct device_node *of_find_compatible_node(
 		dev_node != NULL; \
 		dev_node = of_find_compatible_node(dev_node, type, compatible))
 
+__rte_internal
 const void *of_get_property(const struct device_node *from, const char *name,
 			    size_t *lenp) __attribute__((nonnull(2)));
+__rte_internal
 bool of_device_is_available(const struct device_node *dev_node);
 
+
+__rte_internal
 const struct device_node *of_find_node_by_phandle(uint64_t ph);
 
+__rte_internal
 const struct device_node *of_get_parent(const struct device_node *dev_node);
 
+__rte_internal
 const struct device_node *of_get_next_child(const struct device_node *dev_node,
 					    const struct device_node *prev);
 
+__rte_internal
 const void *of_get_mac_address(const struct device_node *np);
 
 #define for_each_child_node(parent, child) \
 	for (child = of_get_next_child(parent, NULL); child != NULL; \
 			child = of_get_next_child(parent, child))
 
+
+__rte_internal
 uint32_t of_n_addr_cells(const struct device_node *dev_node);
 uint32_t of_n_size_cells(const struct device_node *dev_node);
 
+__rte_internal
 const uint32_t *of_get_address(const struct device_node *dev_node, size_t idx,
 			       uint64_t *size, uint32_t *flags);
 
+__rte_internal
 uint64_t of_translate_address(const struct device_node *dev_node,
 			      const uint32_t *addr) __attribute__((nonnull));
 
+__rte_internal
 bool of_device_is_compatible(const struct device_node *dev_node,
 			     const char *compatible);
 
@@ -146,6 +160,7 @@ bool of_device_is_compatible(const struct device_node *dev_node,
  * subsystem that is device-tree-dependent. Eg. Qman/Bman, config layers, etc.
  * The path should usually be "/proc/device-tree".
  */
+__rte_internal
 int of_init_path(const char *dt_path);
 
 /* of_finish() allows a controlled tear-down of the device-tree layer, eg. if a
diff --git a/drivers/common/dpaax/dpaax_iova_table.h b/drivers/common/dpaax/dpaax_iova_table.h
index fc3b9e7a8f..230fba8ba0 100644
--- a/drivers/common/dpaax/dpaax_iova_table.h
+++ b/drivers/common/dpaax/dpaax_iova_table.h
@@ -61,9 +61,13 @@ extern struct dpaax_iova_table *dpaax_iova_table_p;
 #define DPAAX_MEM_SPLIT_MASK_OFF (DPAAX_MEM_SPLIT - 1) /**< Offset */
 
 /* APIs exposed */
+__rte_internal
 int dpaax_iova_table_populate(void);
+__rte_internal
 void dpaax_iova_table_depopulate(void);
+__rte_internal
 int dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length);
+__rte_internal
 void dpaax_iova_table_dump(void);
 
 static inline void *dpaax_iova_table_get_va(phys_addr_t paddr) __rte_hot;
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index f72eba761d..ad2b2b3fec 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	dpaax_iova_table_depopulate;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [PATCH v4 1/2] common/mlx5: add rte internal tag and avoid comparison
  @ 2020-05-12 10:52  0%   ` Raslan Darawsheh
  0 siblings, 0 replies; 200+ results
From: Raslan Darawsheh @ 2020-05-12 10:52 UTC (permalink / raw)
  To: Ophir Munk, dev, David Marchand
  Cc: Ray Kinsella, Matan Azrad, Thomas Monjalon

Hi,

> -----Original Message-----
> From: Ophir Munk <ophirmu@mellanox.com>
> Sent: Thursday, May 7, 2020 2:31 PM
> To: dev@dpdk.org; David Marchand <david.marchand@redhat.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>; Matan Azrad <matan@mellanox.com>;
> Raslan Darawsheh <rasland@mellanox.com>; Thomas Monjalon
> <thomas@monjalon.net>; Ophir Munk <ophirmu@mellanox.com>
> Subject: [PATCH v4 1/2] common/mlx5: add rte internal tag and avoid
> comparison
> 
> Move mlx5 symbols in the map file to the INTERNAL section and add
> __internal tags to their definitions.
> Those symbols were exported in 20.02 and now (20.05) they are removed.
> Avoid ABI comparison issues between 20.05/20.08 and 20.02 by adding the
> suppress_file directive to libabigail.abignore file. This directive will
> prevent loading mlx5 common symbols and no comparison will be
> performed.
> 
> In addition move symbols from the EXPERIMENTAL section to the INTERNAL
> section.
> 
> Fixes: 7b4f1e6bd367 ("common/mlx5: introduce common library")
> 
> Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
> Acked-by: Matan Azrad <matan@mellanox.com>
> ---
> v4:
> Move symbols from EXPERIMENTAL section to INTERNAL section
> 
>  devtools/libabigail.abignore                    |  7 ++++
>  drivers/common/mlx5/mlx5_common.h               |  3 ++
>  drivers/common/mlx5/mlx5_common_mp.h            | 14 +++----
>  drivers/common/mlx5/mlx5_common_mr.h            | 26 ++++++------
>  drivers/common/mlx5/mlx5_devx_cmds.h            | 23 +++++++++++
>  drivers/common/mlx5/mlx5_nl.h                   | 18 ++++++++-
>  drivers/common/mlx5/rte_common_mlx5_version.map | 53
> ++++++++++++-------------
>  7 files changed, 95 insertions(+), 49 deletions(-)


Series rebased and applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  2020-05-11  8:18  4%         ` Akhil Goyal
  2020-05-11 11:38  4%           ` Akhil Goyal
@ 2020-05-11 16:09  5%           ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-11 16:09 UTC (permalink / raw)
  To: Akhil Goyal, Arek Kusztal, dev
  Cc: fiona.trahe, ray.kinsella, bruce.richardson


Seems to be an issues on my side (see below).
Everything that the ABI Compliance Checker 2.3 complains about has already been reported and suppressed in libabigail.ignore.

Suggest you use libabigail going forward. 


Oddly enough

Fedora 31 / ABI Compliance Checker 2.3
[root@xyz abi-check]# abi-compliance-checker -l librte_cryptodev.so -old 24cd1b529/librte_cryptodev.so.dump -new 26c1ec175/librte_cryptodev.so.dumpPreparing, please wait ...
Comparing ABIs ...
Comparing APIs ...
Creating compatibility report ...
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
Report: compat_reports/librte_cryptodev.so/24cd1b529_to_26c1ec175/compat_report.html

Ubuntu 18.04/ ABI Compliance Checker 2.2

root@abc:/build/dpdk-next-crypto/abi-check# abi-compliance-checker -l librte_cryptodev.so -old 6ef23d92d/librte_cryptodev.so.dump -new 6488cc1cf/librte_cryptodev.so.dump
Preparing, please wait ...
Comparing ABIs ...
Comparing APIs ...
Creating compatibility report ...
Binary compatibility: 99.4%
Source compatibility: 100%
Total binary compatibility problems: 1, warnings: 1
Total source compatibility problems: 0, warnings: 0
Report: compat_reports/librte_cryptodev.so/6ef23d92d_to_6488cc1cf/compat_report.html

Ray K

On 11/05/2020 09:18, Akhil Goyal wrote:
> Hi Ray,
> 
> Previously, I only ran the script for the 2 patches.
> 
> ./devtools/validate-abi.sh <commit id previous to these two patches> HEAD
> 
> However when I run for v20.02 and HEAD, the list is quite big. I believe most of them are either experimental or internal PMD. But cryptodev is still there.
> 
> NOTICE: abi-compliance-checker returned 1
> NOTICE: ABI may be incompatible, check reports/logs for details.
> NOTICE: Incompatible list:  librte_bbdev.so librte_common_iavf.so librte_common_octeontx2.so librte_cryptodev.so librte_eal.so librte_efd.so librte_eventdev.so librte_hash.so librte_ipsec.so librte_meter.so librte_pdump.so librte_pmd_crypto_scheduler.so librte_pmd_dpaa2_sec.so librte_pmd_dpaa_sec.so librte_pmd_ring.so librte_ring.so librte_vhost.so
> 
> Regards,
> Akhil
> 
>> -----Original Message-----
>> From: Ray Kinsella <mdr@ashroe.eu>
>> Sent: Monday, May 11, 2020 1:18 PM
>> To: Akhil Goyal <akhil.goyal@nxp.com>; Arek Kusztal
>> <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
>> Cc: fiona.trahe@intel.com; ray.kinsella@intel.com; bruce.richardson@intel.com
>> Subject: Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get
>> function
>>
>> Hi Akhil,
>>
>> So 1st thing is that this that validate-abi uses "ABI Compliance Checker",
>> which does not use libabigail.ignore.
>>
>> So you will end up with different results compared to using libabigail as follows:
>>
>> DPDK_ABI_REF_DIR=<some absolute path>
>> DPDK_ABI_REF_VERSION=v20.02 ./devtools/test-meson-builds.sh
>>
>> I did check with the "ABI Compliance Checker" (I like this tool also), however I
>> got the following
>>
>> NOTICE: No error detected, ABI is compatible.
>> INFO: Logs are in /root/src/dpdk/abi-check/abi-check.log
>> INFO: HTML reports are in /root/src/dpdk/abi-check/compat_reports directory
>>
>> What references did you use with validate-abi.sh (I used v20.02 and HEAD).
>>
>> Ray K
>>
>> On 09/05/2020 22:11, Akhil Goyal wrote:
>>> Hi Ray/Arek,
>>>
>>> I still see Incompatible cryptodev even after update in the abignore list.
>>> I checked it with ./devtools/validate-abi.sh
>>> NOTICE: ABI may be incompatible, check reports/logs for details.
>>> NOTICE: Incompatible list:  librte_cryptodev.so
>>>
>>> Did I miss something?
>>>
>>>
>>>>
>>>> On 07/05/2020 11:57, Arek Kusztal wrote:
>>>>> This patch adds versioned function rte_cryptodev_info_get()
>>>>> to prevent some issues with ABI policy.
>>>>> Node v21 works in same way as before, returning driver capabilities
>>>>> directly to the API caller. These capabilities may include new elements
>>>>> not part of the v20 ABI.
>>>>> Node v20 function maintains compatibility with v20 ABI releases
>>>>> by stripping out elements not supported in v20 ABI. Because
>>>>> rte_cryptodev_info_get is called by other API functions,
>>>>> rte_cryptodev_sym_capability_get function is versioned the same way.
>>>>>
>>>>> Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
>>>>> ---
>>>>> v2:
>>>>> - changed version numbers of symbols to 20.0.2
>>>>> v3:
>>>>> - added v2/v3 informations
>>>>> - changed version numbers of symbols to 21
>>>>> v4:
>>>>> - fixed clang build by movind binding default symbol
>>>>> - implemented mailing list comments
>>>>> - added abidiff tool suppression entries
>>>>> v5:
>>>>> - fixed meson build
>>>>>
>>>>>  devtools/libabigail.abignore                   |   8 ++
>>>>>  lib/librte_cryptodev/meson.build               |   1 +
>>>>>  lib/librte_cryptodev/rte_cryptodev.c           | 147
>>>> ++++++++++++++++++++++++-
>>>>>  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
>>>>>  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
>>>>>  5 files changed, 191 insertions(+), 6 deletions(-)
>>>>>
>>>> [SNIP]
>>>>
>>>> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 5%]

* Re: [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section
  2020-05-11 10:00  3% [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section pbhagavatula
  2020-05-11 10:00  3% ` [dpdk-dev] [PATCH 2/2] mempool/octeontx2: " pbhagavatula
@ 2020-05-11 14:45  0% ` Thomas Monjalon
  2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
  2 siblings, 0 replies; 200+ results
From: Thomas Monjalon @ 2020-05-11 14:45 UTC (permalink / raw)
  To: Pavan Nikhilesh
  Cc: jerinj, Nithin Dabilpuram, Anoob Joseph, Ray Kinsella,
	Neil Horman, dev, david.marchand

11/05/2020 12:00, pbhagavatula@marvell.com:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> Move the internal symbols to INTERNAL sections so that any
> change in them is not reported as ABI breakage.
> 
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  drivers/common/octeontx2/otx2_common.h           |  8 ++++++++
>  drivers/common/octeontx2/otx2_dev.h              |  3 +++
>  drivers/common/octeontx2/otx2_irq.h              |  3 +++
>  drivers/common/octeontx2/otx2_mbox.h             |  6 ++++++
>  drivers/common/octeontx2/otx2_sec_idev.h         |  6 ++++++
>  .../octeontx2/rte_common_octeontx2_version.map   | 16 +++-------------
>  6 files changed, 29 insertions(+), 13 deletions(-)

You probably need to add an exception in libabigail.ignore file
for symbols moved from stable to internal.


> --- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
> +++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
> @@ -1,4 +1,4 @@
> -DPDK_20.0 {
> +INTERNAL {
>  	global:
>  
>  	otx2_dev_active_vfs;
> @@ -30,23 +30,13 @@ DPDK_20.0 {
>  	otx2_sso_pf_func_get;
>  	otx2_sso_pf_func_set;
>  	otx2_unregister_irq;
> -
> -	local: *;
> -};
> -
> -DPDK_21 {
> -	global:
> -
>  	otx2_eth_dev_is_sec_capable;
>  	otx2_sec_idev_cfg_init;
>  	otx2_sec_idev_tx_cpt_qp_add;
>  	otx2_sec_idev_tx_cpt_qp_remove;
>  	otx2_sec_idev_tx_cpt_qp_get;
>  	otx2_sec_idev_tx_cpt_qp_put;
> -} DPDK_20.0;
> -
> -EXPERIMENTAL {
> -	global:
> -
>  	otx2_logtype_ep;
> +
> +	local: *;
>  };

I think you should sort symbols in alphabetical way.




^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-11 12:10  0%             ` Ananyev, Konstantin
@ 2020-05-11 12:32  0%               ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2020-05-11 12:32 UTC (permalink / raw)
  To: Ananyev, Konstantin, Jerin Jacob Kollanukkaran, thomas, Wang,
	Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

>> >> >> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> >> >> >>
>> >> >> >> Merge crc32 hash calculation public API headers for x86 and
>> >ARM,
>> >> >> >> split implementations of x86 and ARM into their respective
>> >private
>> >> >> >> headers.
>> >> >> >> This reduces the ifdef code clutter while keeping current ABI
>> >> >intact.
>> >> >> >>
>> >> >> >> Although we install `rte_crc_arm64.h` it is not used in any of
>the
>> >lib
>> >> >or
>> >> >> >> drivers layers. All the libs and drivers use `rte_hash_crc.h`
>which
>> >> >falls
>> >> >> >> back to SW crc32 calculation for ARM platform.
>> >> >> >>
>> >> >> >> Signed-off-by: Pavan Nikhilesh
><pbhagavatula@marvell.com>
>> >> >> >> ---
>> >> >> >>
>> >> >> >>  Currently, if application incorrectly sets CRC32_ARM64 as
>crc32
>> >> >> >algorithm
>> >> >> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we
>> >fallback
>> >> >to
>> >> >> >algorithm
>> >> >> >>  set previously via `rte_hash_crc_set_alg()` instead of setting
>> >the
>> >> >best
>> >> >> >>  available.
>> >> >> >>  This behaviour should probably change to setting the best
>> >> >available
>> >> >> >algorithm
>> >> >> >>  and is up for discussion.
>> >> >> >>
>> >> >> >>  app/test/test_hash.c            |   6 +
>> >> >> >>  lib/librte_hash/Makefile        |   5 -
>> >> >> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
>> >> >> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
>> >> >> >>  lib/librte_hash/meson.build     |   3 +-
>> >> >> >>  lib/librte_hash/rte_crc_arm64.h | 183 --------------------------
>----
>> >> >> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++-------
>----
>> >---
>> >> >----
>> >> >> >-
>> >> >> >>  7 files changed, 219 insertions(+), 306 deletions(-)
>> >> >> >>  create mode 100644 lib/librte_hash/crc_arm64.h
>> >> >> >>  create mode 100644 lib/librte_hash/crc_x86.h
>> >> >> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
>> >> >> >>
>> >> >> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
>> >> >> >> index afa3a1a3c..7bd457dac 100644
>> >> >> >> --- a/app/test/test_hash.c
>> >> >> >> +++ b/app/test/test_hash.c
>> >> >> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>> >> >> >>  	}
>> >> >> >>
>> >> >> >>  	/* Resetting to best available algorithm */
>> >> >> >> +#if defined RTE_ARCH_X86
>> >> >> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> >> >> >> +#elif defined RTE_ARCH_ARM64
>> >> >> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> >> >> >> +#else
>> >> >> >> +	rte_hash_crc_set_alg(CRC32_SW);
>> >> >> >> +#endif
>> >> >> >>
>> >> >> >>  	if (i == CRC32_ITERATIONS)
>> >> >> >>  		return 0;
>> >> >> >> diff --git a/lib/librte_hash/Makefile
>b/lib/librte_hash/Makefile
>> >> >> >> index ec9f86499..f640afc42 100644
>> >> >> >> --- a/lib/librte_hash/Makefile
>> >> >> >> +++ b/lib/librte_hash/Makefile
>> >> >> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH)
>+=
>> >> >> >rte_fbk_hash.c
>> >> >> >>  # install this header file
>> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include :=
>rte_hash.h
>> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >> >rte_hash_crc.h
>> >> >> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
>> >> >> >> -ifneq ($(findstring
>> >RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
>> >> >> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >> >rte_crc_arm64.h
>> >> >> >> -endif
>> >> >> >> -endif
>> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >rte_jhash.h
>> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >rte_thash.h
>> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >> >rte_fbk_hash.h
>> >> >> >> diff --git a/lib/librte_hash/crc_arm64.h
>> >> >b/lib/librte_hash/crc_arm64.h
>> >> >> >> new file mode 100644
>> >> >> >> index 000000000..8e75f8297
>> >> >> >
>> >> >> >Wouldn't that break 'make  install T=...'?
>> >> >>
>> >> >> My bad I verified with meson and it was building fine.
>> >> >>
>> >> >> >As now rte_hash_crc.h includes not public headers (crc_x86.h,
>> >etc.).
>> >> >> >Same question about external apps, where they would get
>from
>> >> >these
>> >> >> >headers?
>> >> >>
>> >> >> I think in the next version we can directly have the arch specific
>> >> >functions
>> >> >> Implemented in rte_hash_crc.h. Since its pretty stable code and
>> >> >overhead of extra
>> >> >> ~120 lines.
>> >> >
>> >> >Ok... but why not then just leave arch specific headers, as they
>are
>> >right
>> >> >now?
>> >> >What is wrong with current approach?
>> >>
>> >> The problem is if any application directly includes only
>> >rte_crc_arm64.h
>> >> (completely legal) it will break the build.
>> >
>> >But we can probably mark rte_crc_arm64.h as internal, and warn
>users
>> >not to
>> >include it directly (same for rte_crc_x86.h and any other arch specific
>> >headers).
>>
>> Yes but I think merging them would be a cleaner, number of
>constructors would be
>> one and maybe we could select the best available algorithm on a
>given platform when
>> application requests unsupported one.
>
>Ok, but we can still have one constructor, and two (or more) different
>arch specific headers,
>that would be included into main header conditionally by  #ifdef
>RTE_ARCH_....
>
>>
>> As Yipeng mentioned do you thing having a indirect call instead of
>runtime branch be
>> depreciative in terms of performance?
>
>I think run-time branch by some global var would be much faster than
>indirect function call
>(at least on IA).
>

Ok, makes sense as in a tight loop the run-time branch would be hoisted out.
Let me draft a RFC v2.

>>
>> >
>> >>
>> >> Example:
>> >>
>> >> diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c
>> >> index 6a799556d..318670940 100644
>> >> --- a/lib/librte_efd/rte_efd.c
>> >> +++ b/lib/librte_efd/rte_efd.c
>> >> @@ -19,7 +19,7 @@
>> >>  #include <rte_memcpy.h>
>> >>  #include <rte_ring.h>
>> >>  #include <rte_jhash.h>
>> >> -#include <rte_hash_crc.h>
>> >> +#include <rte_crc_arm64.h>
>> >>  #include <rte_tailq.h>
>> >>
>> >>  #include "rte_efd.h"
>> >> (END)
>> >>
>> >> Causes:
>> >>
>> >> ../lib/librte_hash/rte_crc_arm64.h: In function
>> >'rte_hash_crc_set_alg':
>> >> ../lib/librte_hash/rte_crc_arm64.h:77:7: error: 'CRC32_ARM64'
>> >undeclared (first use in this function)
>> >>    77 |  case CRC32_ARM64:
>> >>       |       ^~~~~~~~~~~
>> >> ../lib/librte_hash/rte_crc_arm64.h:77:7: note: each undeclared
>> >identifier is reported only once for each function it appears in
>> >> ../lib/librte_hash/rte_crc_arm64.h:79:10: error: 'CRC32_SW'
>> >undeclared (first use in this function)
>> >>    79 |    alg = CRC32_SW;
>> >>       |          ^~~~~~~~
>> >> ../lib/librte_hash/rte_crc_arm64.h:82:3: error: 'crc32_alg'
>undeclared
>> >(first use in this function)
>> >>    82 |   crc32_alg = alg;
>> >>       |   ^~~~~~~~~
>> >> ../lib/librte_hash/rte_crc_arm64.h: In function
>> >'rte_hash_crc_init_alg':
>> >> ../lib/librte_hash/rte_crc_arm64.h:92:23: error: 'CRC32_ARM64'
>> >undeclared (first use in this function)
>> >>    92 |  rte_hash_crc_set_alg(CRC32_ARM64);
>> >>
>> >> Thanks,
>> >> Pavan.
>> >>
>> >>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-11 10:57  0%           ` Pavan Nikhilesh Bhagavatula
@ 2020-05-11 12:10  0%             ` Ananyev, Konstantin
  2020-05-11 12:32  0%               ` Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2020-05-11 12:10 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, thomas,
	Wang, Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

> 
> >> >> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> >> >>
> >> >> >> Merge crc32 hash calculation public API headers for x86 and
> >ARM,
> >> >> >> split implementations of x86 and ARM into their respective
> >private
> >> >> >> headers.
> >> >> >> This reduces the ifdef code clutter while keeping current ABI
> >> >intact.
> >> >> >>
> >> >> >> Although we install `rte_crc_arm64.h` it is not used in any of the
> >lib
> >> >or
> >> >> >> drivers layers. All the libs and drivers use `rte_hash_crc.h` which
> >> >falls
> >> >> >> back to SW crc32 calculation for ARM platform.
> >> >> >>
> >> >> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> >> >> ---
> >> >> >>
> >> >> >>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
> >> >> >algorithm
> >> >> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we
> >fallback
> >> >to
> >> >> >algorithm
> >> >> >>  set previously via `rte_hash_crc_set_alg()` instead of setting
> >the
> >> >best
> >> >> >>  available.
> >> >> >>  This behaviour should probably change to setting the best
> >> >available
> >> >> >algorithm
> >> >> >>  and is up for discussion.
> >> >> >>
> >> >> >>  app/test/test_hash.c            |   6 +
> >> >> >>  lib/librte_hash/Makefile        |   5 -
> >> >> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
> >> >> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
> >> >> >>  lib/librte_hash/meson.build     |   3 +-
> >> >> >>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
> >> >> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++-----------
> >---
> >> >----
> >> >> >-
> >> >> >>  7 files changed, 219 insertions(+), 306 deletions(-)
> >> >> >>  create mode 100644 lib/librte_hash/crc_arm64.h
> >> >> >>  create mode 100644 lib/librte_hash/crc_x86.h
> >> >> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
> >> >> >>
> >> >> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
> >> >> >> index afa3a1a3c..7bd457dac 100644
> >> >> >> --- a/app/test/test_hash.c
> >> >> >> +++ b/app/test/test_hash.c
> >> >> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
> >> >> >>  	}
> >> >> >>
> >> >> >>  	/* Resetting to best available algorithm */
> >> >> >> +#if defined RTE_ARCH_X86
> >> >> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> >> >> >> +#elif defined RTE_ARCH_ARM64
> >> >> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
> >> >> >> +#else
> >> >> >> +	rte_hash_crc_set_alg(CRC32_SW);
> >> >> >> +#endif
> >> >> >>
> >> >> >>  	if (i == CRC32_ITERATIONS)
> >> >> >>  		return 0;
> >> >> >> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
> >> >> >> index ec9f86499..f640afc42 100644
> >> >> >> --- a/lib/librte_hash/Makefile
> >> >> >> +++ b/lib/librte_hash/Makefile
> >> >> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
> >> >> >rte_fbk_hash.c
> >> >> >>  # install this header file
> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >> >rte_hash_crc.h
> >> >> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
> >> >> >> -ifneq ($(findstring
> >RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
> >> >> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >> >rte_crc_arm64.h
> >> >> >> -endif
> >> >> >> -endif
> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >rte_jhash.h
> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >rte_thash.h
> >> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >> >rte_fbk_hash.h
> >> >> >> diff --git a/lib/librte_hash/crc_arm64.h
> >> >b/lib/librte_hash/crc_arm64.h
> >> >> >> new file mode 100644
> >> >> >> index 000000000..8e75f8297
> >> >> >
> >> >> >Wouldn't that break 'make  install T=...'?
> >> >>
> >> >> My bad I verified with meson and it was building fine.
> >> >>
> >> >> >As now rte_hash_crc.h includes not public headers (crc_x86.h,
> >etc.).
> >> >> >Same question about external apps, where they would get from
> >> >these
> >> >> >headers?
> >> >>
> >> >> I think in the next version we can directly have the arch specific
> >> >functions
> >> >> Implemented in rte_hash_crc.h. Since its pretty stable code and
> >> >overhead of extra
> >> >> ~120 lines.
> >> >
> >> >Ok... but why not then just leave arch specific headers, as they are
> >right
> >> >now?
> >> >What is wrong with current approach?
> >>
> >> The problem is if any application directly includes only
> >rte_crc_arm64.h
> >> (completely legal) it will break the build.
> >
> >But we can probably mark rte_crc_arm64.h as internal, and warn users
> >not to
> >include it directly (same for rte_crc_x86.h and any other arch specific
> >headers).
> 
> Yes but I think merging them would be a cleaner, number of constructors would be
> one and maybe we could select the best available algorithm on a given platform when
> application requests unsupported one.

Ok, but we can still have one constructor, and two (or more) different arch specific headers,
that would be included into main header conditionally by  #ifdef RTE_ARCH_....

> 
> As Yipeng mentioned do you thing having a indirect call instead of runtime branch be
> depreciative in terms of performance?

I think run-time branch by some global var would be much faster than indirect function call
(at least on IA).

> 
> >
> >>
> >> Example:
> >>
> >> diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c
> >> index 6a799556d..318670940 100644
> >> --- a/lib/librte_efd/rte_efd.c
> >> +++ b/lib/librte_efd/rte_efd.c
> >> @@ -19,7 +19,7 @@
> >>  #include <rte_memcpy.h>
> >>  #include <rte_ring.h>
> >>  #include <rte_jhash.h>
> >> -#include <rte_hash_crc.h>
> >> +#include <rte_crc_arm64.h>
> >>  #include <rte_tailq.h>
> >>
> >>  #include "rte_efd.h"
> >> (END)
> >>
> >> Causes:
> >>
> >> ../lib/librte_hash/rte_crc_arm64.h: In function
> >'rte_hash_crc_set_alg':
> >> ../lib/librte_hash/rte_crc_arm64.h:77:7: error: 'CRC32_ARM64'
> >undeclared (first use in this function)
> >>    77 |  case CRC32_ARM64:
> >>       |       ^~~~~~~~~~~
> >> ../lib/librte_hash/rte_crc_arm64.h:77:7: note: each undeclared
> >identifier is reported only once for each function it appears in
> >> ../lib/librte_hash/rte_crc_arm64.h:79:10: error: 'CRC32_SW'
> >undeclared (first use in this function)
> >>    79 |    alg = CRC32_SW;
> >>       |          ^~~~~~~~
> >> ../lib/librte_hash/rte_crc_arm64.h:82:3: error: 'crc32_alg' undeclared
> >(first use in this function)
> >>    82 |   crc32_alg = alg;
> >>       |   ^~~~~~~~~
> >> ../lib/librte_hash/rte_crc_arm64.h: In function
> >'rte_hash_crc_init_alg':
> >> ../lib/librte_hash/rte_crc_arm64.h:92:23: error: 'CRC32_ARM64'
> >undeclared (first use in this function)
> >>    92 |  rte_hash_crc_set_alg(CRC32_ARM64);
> >>
> >> Thanks,
> >> Pavan.
> >>
> >>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  2020-05-11  8:18  4%         ` Akhil Goyal
@ 2020-05-11 11:38  4%           ` Akhil Goyal
  2020-05-11 16:09  5%           ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Akhil Goyal @ 2020-05-11 11:38 UTC (permalink / raw)
  To: Ray Kinsella, Arek Kusztal, dev, thomas
  Cc: fiona.trahe, ray.kinsella, bruce.richardson

Hi Ray,

I have applied the series on dpdk-next-crypto  as per your validation of ABI.

Thomas,
Please validate this series at your end before applying to master. I am not too sure on the ABI stuff.

Regards,
Akhil

> -----Original Message-----
> From: Akhil Goyal
> Sent: Monday, May 11, 2020 1:48 PM
> To: 'Ray Kinsella' <mdr@ashroe.eu>; Arek Kusztal
> <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> Cc: fiona.trahe@intel.com; ray.kinsella@intel.com; bruce.richardson@intel.com
> Subject: RE: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get
> function
> 
> Hi Ray,
> 
> Previously, I only ran the script for the 2 patches.
> 
> ./devtools/validate-abi.sh <commit id previous to these two patches> HEAD
> 
> However when I run for v20.02 and HEAD, the list is quite big. I believe most of
> them are either experimental or internal PMD. But cryptodev is still there.
> 
> NOTICE: abi-compliance-checker returned 1
> NOTICE: ABI may be incompatible, check reports/logs for details.
> NOTICE: Incompatible list:  librte_bbdev.so librte_common_iavf.so
> librte_common_octeontx2.so librte_cryptodev.so librte_eal.so librte_efd.so
> librte_eventdev.so librte_hash.so librte_ipsec.so librte_meter.so
> librte_pdump.so librte_pmd_crypto_scheduler.so librte_pmd_dpaa2_sec.so
> librte_pmd_dpaa_sec.so librte_pmd_ring.so librte_ring.so librte_vhost.so
> 
> Regards,
> Akhil
> 
> > -----Original Message-----
> > From: Ray Kinsella <mdr@ashroe.eu>
> > Sent: Monday, May 11, 2020 1:18 PM
> > To: Akhil Goyal <akhil.goyal@nxp.com>; Arek Kusztal
> > <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> > Cc: fiona.trahe@intel.com; ray.kinsella@intel.com;
> bruce.richardson@intel.com
> > Subject: Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get
> > function
> >
> > Hi Akhil,
> >
> > So 1st thing is that this that validate-abi uses "ABI Compliance Checker",
> > which does not use libabigail.ignore.
> >
> > So you will end up with different results compared to using libabigail as follows:
> >
> > DPDK_ABI_REF_DIR=<some absolute path>
> > DPDK_ABI_REF_VERSION=v20.02 ./devtools/test-meson-builds.sh
> >
> > I did check with the "ABI Compliance Checker" (I like this tool also), however I
> > got the following
> >
> > NOTICE: No error detected, ABI is compatible.
> > INFO: Logs are in /root/src/dpdk/abi-check/abi-check.log
> > INFO: HTML reports are in /root/src/dpdk/abi-check/compat_reports
> directory
> >
> > What references did you use with validate-abi.sh (I used v20.02 and HEAD).
> >
> > Ray K
> >
> > On 09/05/2020 22:11, Akhil Goyal wrote:
> > > Hi Ray/Arek,
> > >
> > > I still see Incompatible cryptodev even after update in the abignore list.
> > > I checked it with ./devtools/validate-abi.sh
> > > NOTICE: ABI may be incompatible, check reports/logs for details.
> > > NOTICE: Incompatible list:  librte_cryptodev.so
> > >
> > > Did I miss something?
> > >
> > >
> > >>
> > >> On 07/05/2020 11:57, Arek Kusztal wrote:
> > >>> This patch adds versioned function rte_cryptodev_info_get()
> > >>> to prevent some issues with ABI policy.
> > >>> Node v21 works in same way as before, returning driver capabilities
> > >>> directly to the API caller. These capabilities may include new elements
> > >>> not part of the v20 ABI.
> > >>> Node v20 function maintains compatibility with v20 ABI releases
> > >>> by stripping out elements not supported in v20 ABI. Because
> > >>> rte_cryptodev_info_get is called by other API functions,
> > >>> rte_cryptodev_sym_capability_get function is versioned the same way.
> > >>>
> > >>> Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
> > >>> ---
> > >>> v2:
> > >>> - changed version numbers of symbols to 20.0.2
> > >>> v3:
> > >>> - added v2/v3 informations
> > >>> - changed version numbers of symbols to 21
> > >>> v4:
> > >>> - fixed clang build by movind binding default symbol
> > >>> - implemented mailing list comments
> > >>> - added abidiff tool suppression entries
> > >>> v5:
> > >>> - fixed meson build
> > >>>
> > >>>  devtools/libabigail.abignore                   |   8 ++
> > >>>  lib/librte_cryptodev/meson.build               |   1 +
> > >>>  lib/librte_cryptodev/rte_cryptodev.c           | 147
> > >> ++++++++++++++++++++++++-
> > >>>  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
> > >>>  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
> > >>>  5 files changed, 191 insertions(+), 6 deletions(-)
> > >>>
> > >> [SNIP]
> > >>
> > >> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-11 10:27  0%         ` Ananyev, Konstantin
@ 2020-05-11 10:57  0%           ` Pavan Nikhilesh Bhagavatula
  2020-05-11 12:10  0%             ` Ananyev, Konstantin
  0 siblings, 1 reply; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2020-05-11 10:57 UTC (permalink / raw)
  To: Ananyev, Konstantin, Jerin Jacob Kollanukkaran, thomas, Wang,
	Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

>> >> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> >> >>
>> >> >> Merge crc32 hash calculation public API headers for x86 and
>ARM,
>> >> >> split implementations of x86 and ARM into their respective
>private
>> >> >> headers.
>> >> >> This reduces the ifdef code clutter while keeping current ABI
>> >intact.
>> >> >>
>> >> >> Although we install `rte_crc_arm64.h` it is not used in any of the
>lib
>> >or
>> >> >> drivers layers. All the libs and drivers use `rte_hash_crc.h` which
>> >falls
>> >> >> back to SW crc32 calculation for ARM platform.
>> >> >>
>> >> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> >> >> ---
>> >> >>
>> >> >>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
>> >> >algorithm
>> >> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we
>fallback
>> >to
>> >> >algorithm
>> >> >>  set previously via `rte_hash_crc_set_alg()` instead of setting
>the
>> >best
>> >> >>  available.
>> >> >>  This behaviour should probably change to setting the best
>> >available
>> >> >algorithm
>> >> >>  and is up for discussion.
>> >> >>
>> >> >>  app/test/test_hash.c            |   6 +
>> >> >>  lib/librte_hash/Makefile        |   5 -
>> >> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
>> >> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
>> >> >>  lib/librte_hash/meson.build     |   3 +-
>> >> >>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
>> >> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++-----------
>---
>> >----
>> >> >-
>> >> >>  7 files changed, 219 insertions(+), 306 deletions(-)
>> >> >>  create mode 100644 lib/librte_hash/crc_arm64.h
>> >> >>  create mode 100644 lib/librte_hash/crc_x86.h
>> >> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
>> >> >>
>> >> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
>> >> >> index afa3a1a3c..7bd457dac 100644
>> >> >> --- a/app/test/test_hash.c
>> >> >> +++ b/app/test/test_hash.c
>> >> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>> >> >>  	}
>> >> >>
>> >> >>  	/* Resetting to best available algorithm */
>> >> >> +#if defined RTE_ARCH_X86
>> >> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> >> >> +#elif defined RTE_ARCH_ARM64
>> >> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> >> >> +#else
>> >> >> +	rte_hash_crc_set_alg(CRC32_SW);
>> >> >> +#endif
>> >> >>
>> >> >>  	if (i == CRC32_ITERATIONS)
>> >> >>  		return 0;
>> >> >> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
>> >> >> index ec9f86499..f640afc42 100644
>> >> >> --- a/lib/librte_hash/Makefile
>> >> >> +++ b/lib/librte_hash/Makefile
>> >> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
>> >> >rte_fbk_hash.c
>> >> >>  # install this header file
>> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
>> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >rte_hash_crc.h
>> >> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
>> >> >> -ifneq ($(findstring
>RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
>> >> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >rte_crc_arm64.h
>> >> >> -endif
>> >> >> -endif
>> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_jhash.h
>> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_thash.h
>> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> >rte_fbk_hash.h
>> >> >> diff --git a/lib/librte_hash/crc_arm64.h
>> >b/lib/librte_hash/crc_arm64.h
>> >> >> new file mode 100644
>> >> >> index 000000000..8e75f8297
>> >> >
>> >> >Wouldn't that break 'make  install T=...'?
>> >>
>> >> My bad I verified with meson and it was building fine.
>> >>
>> >> >As now rte_hash_crc.h includes not public headers (crc_x86.h,
>etc.).
>> >> >Same question about external apps, where they would get from
>> >these
>> >> >headers?
>> >>
>> >> I think in the next version we can directly have the arch specific
>> >functions
>> >> Implemented in rte_hash_crc.h. Since its pretty stable code and
>> >overhead of extra
>> >> ~120 lines.
>> >
>> >Ok... but why not then just leave arch specific headers, as they are
>right
>> >now?
>> >What is wrong with current approach?
>>
>> The problem is if any application directly includes only
>rte_crc_arm64.h
>> (completely legal) it will break the build.
>
>But we can probably mark rte_crc_arm64.h as internal, and warn users
>not to
>include it directly (same for rte_crc_x86.h and any other arch specific
>headers).

Yes but I think merging them would be a cleaner, number of constructors would be 
one and maybe we could select the best available algorithm on a given platform when 
application requests unsupported one.

As Yipeng mentioned do you thing having a indirect call instead of runtime branch be 
depreciative in terms of performance?

>
>>
>> Example:
>>
>> diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c
>> index 6a799556d..318670940 100644
>> --- a/lib/librte_efd/rte_efd.c
>> +++ b/lib/librte_efd/rte_efd.c
>> @@ -19,7 +19,7 @@
>>  #include <rte_memcpy.h>
>>  #include <rte_ring.h>
>>  #include <rte_jhash.h>
>> -#include <rte_hash_crc.h>
>> +#include <rte_crc_arm64.h>
>>  #include <rte_tailq.h>
>>
>>  #include "rte_efd.h"
>> (END)
>>
>> Causes:
>>
>> ../lib/librte_hash/rte_crc_arm64.h: In function
>'rte_hash_crc_set_alg':
>> ../lib/librte_hash/rte_crc_arm64.h:77:7: error: 'CRC32_ARM64'
>undeclared (first use in this function)
>>    77 |  case CRC32_ARM64:
>>       |       ^~~~~~~~~~~
>> ../lib/librte_hash/rte_crc_arm64.h:77:7: note: each undeclared
>identifier is reported only once for each function it appears in
>> ../lib/librte_hash/rte_crc_arm64.h:79:10: error: 'CRC32_SW'
>undeclared (first use in this function)
>>    79 |    alg = CRC32_SW;
>>       |          ^~~~~~~~
>> ../lib/librte_hash/rte_crc_arm64.h:82:3: error: 'crc32_alg' undeclared
>(first use in this function)
>>    82 |   crc32_alg = alg;
>>       |   ^~~~~~~~~
>> ../lib/librte_hash/rte_crc_arm64.h: In function
>'rte_hash_crc_init_alg':
>> ../lib/librte_hash/rte_crc_arm64.h:92:23: error: 'CRC32_ARM64'
>undeclared (first use in this function)
>>    92 |  rte_hash_crc_set_alg(CRC32_ARM64);
>>
>> Thanks,
>> Pavan.
>>
>>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-11 10:23  0%       ` Pavan Nikhilesh Bhagavatula
@ 2020-05-11 10:27  0%         ` Ananyev, Konstantin
  2020-05-11 10:57  0%           ` Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2020-05-11 10:27 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, thomas,
	Wang, Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev


> 
> >> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> >>
> >> >> Merge crc32 hash calculation public API headers for x86 and ARM,
> >> >> split implementations of x86 and ARM into their respective private
> >> >> headers.
> >> >> This reduces the ifdef code clutter while keeping current ABI
> >intact.
> >> >>
> >> >> Although we install `rte_crc_arm64.h` it is not used in any of the lib
> >or
> >> >> drivers layers. All the libs and drivers use `rte_hash_crc.h` which
> >falls
> >> >> back to SW crc32 calculation for ARM platform.
> >> >>
> >> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> >> ---
> >> >>
> >> >>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
> >> >algorithm
> >> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we fallback
> >to
> >> >algorithm
> >> >>  set previously via `rte_hash_crc_set_alg()` instead of setting the
> >best
> >> >>  available.
> >> >>  This behaviour should probably change to setting the best
> >available
> >> >algorithm
> >> >>  and is up for discussion.
> >> >>
> >> >>  app/test/test_hash.c            |   6 +
> >> >>  lib/librte_hash/Makefile        |   5 -
> >> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
> >> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
> >> >>  lib/librte_hash/meson.build     |   3 +-
> >> >>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
> >> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++--------------
> >----
> >> >-
> >> >>  7 files changed, 219 insertions(+), 306 deletions(-)
> >> >>  create mode 100644 lib/librte_hash/crc_arm64.h
> >> >>  create mode 100644 lib/librte_hash/crc_x86.h
> >> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
> >> >>
> >> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
> >> >> index afa3a1a3c..7bd457dac 100644
> >> >> --- a/app/test/test_hash.c
> >> >> +++ b/app/test/test_hash.c
> >> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
> >> >>  	}
> >> >>
> >> >>  	/* Resetting to best available algorithm */
> >> >> +#if defined RTE_ARCH_X86
> >> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> >> >> +#elif defined RTE_ARCH_ARM64
> >> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
> >> >> +#else
> >> >> +	rte_hash_crc_set_alg(CRC32_SW);
> >> >> +#endif
> >> >>
> >> >>  	if (i == CRC32_ITERATIONS)
> >> >>  		return 0;
> >> >> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
> >> >> index ec9f86499..f640afc42 100644
> >> >> --- a/lib/librte_hash/Makefile
> >> >> +++ b/lib/librte_hash/Makefile
> >> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
> >> >rte_fbk_hash.c
> >> >>  # install this header file
> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >rte_hash_crc.h
> >> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
> >> >> -ifneq ($(findstring RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
> >> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >rte_crc_arm64.h
> >> >> -endif
> >> >> -endif
> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_jhash.h
> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_thash.h
> >> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
> >rte_fbk_hash.h
> >> >> diff --git a/lib/librte_hash/crc_arm64.h
> >b/lib/librte_hash/crc_arm64.h
> >> >> new file mode 100644
> >> >> index 000000000..8e75f8297
> >> >
> >> >Wouldn't that break 'make  install T=...'?
> >>
> >> My bad I verified with meson and it was building fine.
> >>
> >> >As now rte_hash_crc.h includes not public headers (crc_x86.h, etc.).
> >> >Same question about external apps, where they would get from
> >these
> >> >headers?
> >>
> >> I think in the next version we can directly have the arch specific
> >functions
> >> Implemented in rte_hash_crc.h. Since its pretty stable code and
> >overhead of extra
> >> ~120 lines.
> >
> >Ok... but why not then just leave arch specific headers, as they are right
> >now?
> >What is wrong with current approach?
> 
> The problem is if any application directly includes only rte_crc_arm64.h
> (completely legal) it will break the build.

But we can probably mark rte_crc_arm64.h as internal, and warn users not to
include it directly (same for rte_crc_x86.h and any other arch specific headers). 

> 
> Example:
> 
> diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c
> index 6a799556d..318670940 100644
> --- a/lib/librte_efd/rte_efd.c
> +++ b/lib/librte_efd/rte_efd.c
> @@ -19,7 +19,7 @@
>  #include <rte_memcpy.h>
>  #include <rte_ring.h>
>  #include <rte_jhash.h>
> -#include <rte_hash_crc.h>
> +#include <rte_crc_arm64.h>
>  #include <rte_tailq.h>
> 
>  #include "rte_efd.h"
> (END)
> 
> Causes:
> 
> ../lib/librte_hash/rte_crc_arm64.h: In function 'rte_hash_crc_set_alg':
> ../lib/librte_hash/rte_crc_arm64.h:77:7: error: 'CRC32_ARM64' undeclared (first use in this function)
>    77 |  case CRC32_ARM64:
>       |       ^~~~~~~~~~~
> ../lib/librte_hash/rte_crc_arm64.h:77:7: note: each undeclared identifier is reported only once for each function it appears in
> ../lib/librte_hash/rte_crc_arm64.h:79:10: error: 'CRC32_SW' undeclared (first use in this function)
>    79 |    alg = CRC32_SW;
>       |          ^~~~~~~~
> ../lib/librte_hash/rte_crc_arm64.h:82:3: error: 'crc32_alg' undeclared (first use in this function)
>    82 |   crc32_alg = alg;
>       |   ^~~~~~~~~
> ../lib/librte_hash/rte_crc_arm64.h: In function 'rte_hash_crc_init_alg':
> ../lib/librte_hash/rte_crc_arm64.h:92:23: error: 'CRC32_ARM64' undeclared (first use in this function)
>    92 |  rte_hash_crc_set_alg(CRC32_ARM64);
> 
> Thanks,
> Pavan.
> 
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-11  9:46  0%     ` Ananyev, Konstantin
@ 2020-05-11 10:23  0%       ` Pavan Nikhilesh Bhagavatula
  2020-05-11 10:27  0%         ` Ananyev, Konstantin
  0 siblings, 1 reply; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2020-05-11 10:23 UTC (permalink / raw)
  To: Ananyev, Konstantin, Jerin Jacob Kollanukkaran, thomas, Wang,
	Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

>> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> >>
>> >> Merge crc32 hash calculation public API headers for x86 and ARM,
>> >> split implementations of x86 and ARM into their respective private
>> >> headers.
>> >> This reduces the ifdef code clutter while keeping current ABI
>intact.
>> >>
>> >> Although we install `rte_crc_arm64.h` it is not used in any of the lib
>or
>> >> drivers layers. All the libs and drivers use `rte_hash_crc.h` which
>falls
>> >> back to SW crc32 calculation for ARM platform.
>> >>
>> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> >> ---
>> >>
>> >>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
>> >algorithm
>> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we fallback
>to
>> >algorithm
>> >>  set previously via `rte_hash_crc_set_alg()` instead of setting the
>best
>> >>  available.
>> >>  This behaviour should probably change to setting the best
>available
>> >algorithm
>> >>  and is up for discussion.
>> >>
>> >>  app/test/test_hash.c            |   6 +
>> >>  lib/librte_hash/Makefile        |   5 -
>> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
>> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
>> >>  lib/librte_hash/meson.build     |   3 +-
>> >>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
>> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++--------------
>----
>> >-
>> >>  7 files changed, 219 insertions(+), 306 deletions(-)
>> >>  create mode 100644 lib/librte_hash/crc_arm64.h
>> >>  create mode 100644 lib/librte_hash/crc_x86.h
>> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
>> >>
>> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
>> >> index afa3a1a3c..7bd457dac 100644
>> >> --- a/app/test/test_hash.c
>> >> +++ b/app/test/test_hash.c
>> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>> >>  	}
>> >>
>> >>  	/* Resetting to best available algorithm */
>> >> +#if defined RTE_ARCH_X86
>> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> >> +#elif defined RTE_ARCH_ARM64
>> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> >> +#else
>> >> +	rte_hash_crc_set_alg(CRC32_SW);
>> >> +#endif
>> >>
>> >>  	if (i == CRC32_ITERATIONS)
>> >>  		return 0;
>> >> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
>> >> index ec9f86499..f640afc42 100644
>> >> --- a/lib/librte_hash/Makefile
>> >> +++ b/lib/librte_hash/Makefile
>> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
>> >rte_fbk_hash.c
>> >>  # install this header file
>> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
>> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_hash_crc.h
>> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
>> >> -ifneq ($(findstring RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
>> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_crc_arm64.h
>> >> -endif
>> >> -endif
>> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_jhash.h
>> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_thash.h
>> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_fbk_hash.h
>> >> diff --git a/lib/librte_hash/crc_arm64.h
>b/lib/librte_hash/crc_arm64.h
>> >> new file mode 100644
>> >> index 000000000..8e75f8297
>> >
>> >Wouldn't that break 'make  install T=...'?
>>
>> My bad I verified with meson and it was building fine.
>>
>> >As now rte_hash_crc.h includes not public headers (crc_x86.h, etc.).
>> >Same question about external apps, where they would get from
>these
>> >headers?
>>
>> I think in the next version we can directly have the arch specific
>functions
>> Implemented in rte_hash_crc.h. Since its pretty stable code and
>overhead of extra
>> ~120 lines.
>
>Ok... but why not then just leave arch specific headers, as they are right
>now?
>What is wrong with current approach?

The problem is if any application directly includes only rte_crc_arm64.h 
(completely legal) it will break the build.

Example:

diff --git a/lib/librte_efd/rte_efd.c b/lib/librte_efd/rte_efd.c
index 6a799556d..318670940 100644
--- a/lib/librte_efd/rte_efd.c
+++ b/lib/librte_efd/rte_efd.c
@@ -19,7 +19,7 @@
 #include <rte_memcpy.h>
 #include <rte_ring.h>
 #include <rte_jhash.h>
-#include <rte_hash_crc.h>
+#include <rte_crc_arm64.h>
 #include <rte_tailq.h>

 #include "rte_efd.h"
(END)

Causes:

../lib/librte_hash/rte_crc_arm64.h: In function 'rte_hash_crc_set_alg':
../lib/librte_hash/rte_crc_arm64.h:77:7: error: 'CRC32_ARM64' undeclared (first use in this function)
   77 |  case CRC32_ARM64:
      |       ^~~~~~~~~~~
../lib/librte_hash/rte_crc_arm64.h:77:7: note: each undeclared identifier is reported only once for each function it appears in
../lib/librte_hash/rte_crc_arm64.h:79:10: error: 'CRC32_SW' undeclared (first use in this function)
   79 |    alg = CRC32_SW;
      |          ^~~~~~~~
../lib/librte_hash/rte_crc_arm64.h:82:3: error: 'crc32_alg' undeclared (first use in this function)
   82 |   crc32_alg = alg;
      |   ^~~~~~~~~
../lib/librte_hash/rte_crc_arm64.h: In function 'rte_hash_crc_init_alg':
../lib/librte_hash/rte_crc_arm64.h:92:23: error: 'CRC32_ARM64' undeclared (first use in this function)
   92 |  rte_hash_crc_set_alg(CRC32_ARM64);

Thanks,
Pavan.




^ permalink raw reply	[relevance 0%]

* [dpdk-dev] [PATCH 2/2] mempool/octeontx2: move internal symbols to INTERNAL section
  2020-05-11 10:00  3% [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section pbhagavatula
@ 2020-05-11 10:00  3% ` pbhagavatula
  2020-05-11 14:45  0% ` [dpdk-dev] [PATCH 1/2] common/octeontx2: " Thomas Monjalon
  2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
  2 siblings, 0 replies; 200+ results
From: pbhagavatula @ 2020-05-11 10:00 UTC (permalink / raw)
  To: jerinj, Nithin Dabilpuram, Ray Kinsella, Neil Horman
  Cc: thomas, dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 drivers/mempool/octeontx2/otx2_mempool.h                    | 2 ++
 drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mempool/octeontx2/otx2_mempool.h b/drivers/mempool/octeontx2/otx2_mempool.h
index adcc0db24..8aa548248 100644
--- a/drivers/mempool/octeontx2/otx2_mempool.h
+++ b/drivers/mempool/octeontx2/otx2_mempool.h
@@ -206,7 +206,9 @@ npa_lf_aura_op_range_set(uint64_t aura_handle, uint64_t start_iova,
 }
 
 /* NPA LF */
+__rte_internal
 int otx2_npa_lf_init(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_npa_lf_fini(void);
 
 /* IRQ */
diff --git a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
index d4f81aed8..e6887ceb8 100644
--- a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
+++ b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	otx2_npa_lf_fini;
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section
@ 2020-05-11 10:00  3% pbhagavatula
  2020-05-11 10:00  3% ` [dpdk-dev] [PATCH 2/2] mempool/octeontx2: " pbhagavatula
                   ` (2 more replies)
  0 siblings, 3 replies; 200+ results
From: pbhagavatula @ 2020-05-11 10:00 UTC (permalink / raw)
  To: jerinj, Nithin Dabilpuram, Anoob Joseph, Ray Kinsella, Neil Horman
  Cc: thomas, dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

Move the internal symbols to INTERNAL sections so that any
change in them is not reported as ABI breakage.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 drivers/common/octeontx2/otx2_common.h           |  8 ++++++++
 drivers/common/octeontx2/otx2_dev.h              |  3 +++
 drivers/common/octeontx2/otx2_irq.h              |  3 +++
 drivers/common/octeontx2/otx2_mbox.h             |  6 ++++++
 drivers/common/octeontx2/otx2_sec_idev.h         |  6 ++++++
 .../octeontx2/rte_common_octeontx2_version.map   | 16 +++-------------
 6 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/drivers/common/octeontx2/otx2_common.h b/drivers/common/octeontx2/otx2_common.h
index e62cdea07..174702687 100644
--- a/drivers/common/octeontx2/otx2_common.h
+++ b/drivers/common/octeontx2/otx2_common.h
@@ -62,13 +62,21 @@ struct otx2_idev_cfg {
 	};
 };
 
+__rte_internal
 struct otx2_idev_cfg *otx2_intra_dev_get_cfg(void);
+__rte_internal
 void otx2_sso_pf_func_set(uint16_t sso_pf_func);
+__rte_internal
 uint16_t otx2_sso_pf_func_get(void);
+__rte_internal
 uint16_t otx2_npa_pf_func_get(void);
+__rte_internal
 struct otx2_npa_lf *otx2_npa_lf_obj_get(void);
+__rte_internal
 void otx2_npa_set_defaults(struct otx2_idev_cfg *idev);
+__rte_internal
 int otx2_npa_lf_active(void *dev);
+__rte_internal
 int otx2_npa_lf_obj_ref(void);
 
 /* Log */
diff --git a/drivers/common/octeontx2/otx2_dev.h b/drivers/common/octeontx2/otx2_dev.h
index 13b75e118..cd4fe517d 100644
--- a/drivers/common/octeontx2/otx2_dev.h
+++ b/drivers/common/octeontx2/otx2_dev.h
@@ -94,6 +94,7 @@ struct otx2_dev {
 	OTX2_DEV;
 };
 
+__rte_internal
 int otx2_dev_priv_init(struct rte_pci_device *pci_dev, void *otx2_dev);
 
 /* Common dev init and fini routines */
@@ -116,7 +117,9 @@ otx2_dev_init(struct rte_pci_device *pci_dev, void *otx2_dev)
 	return otx2_dev_priv_init(pci_dev, otx2_dev);
 }
 
+__rte_internal
 void otx2_dev_fini(struct rte_pci_device *pci_dev, void *otx2_dev);
+__rte_internal
 int otx2_dev_active_vfs(void *otx2_dev);
 
 #define RVU_PFVF_PF_SHIFT	10
diff --git a/drivers/common/octeontx2/otx2_irq.h b/drivers/common/octeontx2/otx2_irq.h
index 9d326276e..0683cf554 100644
--- a/drivers/common/octeontx2/otx2_irq.h
+++ b/drivers/common/octeontx2/otx2_irq.h
@@ -16,10 +16,13 @@ typedef struct {
 	uint64_t bits[MAX_VFPF_DWORD_BITS];
 } otx2_intr_t;
 
+__rte_internal
 int otx2_register_irq(struct rte_intr_handle *intr_handle,
 		      rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 void otx2_unregister_irq(struct rte_intr_handle *intr_handle,
 			 rte_intr_callback_fn cb, void *data, unsigned int vec);
+__rte_internal
 int otx2_disable_irqs(struct rte_intr_handle *intr_handle);
 
 #endif /* _OTX2_IRQ_H_ */
diff --git a/drivers/common/octeontx2/otx2_mbox.h b/drivers/common/octeontx2/otx2_mbox.h
index 5351deaf2..8af8ada05 100644
--- a/drivers/common/octeontx2/otx2_mbox.h
+++ b/drivers/common/octeontx2/otx2_mbox.h
@@ -1582,19 +1582,25 @@ struct tim_enable_rsp {
 	uint32_t __otx2_io currentbucket;
 };
 
+__rte_internal
 const char *otx2_mbox_id2name(uint16_t id);
 int otx2_mbox_id2size(uint16_t id);
 void otx2_mbox_reset(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_init(struct otx2_mbox *mbox, uintptr_t hwbase, uintptr_t reg_base,
 		   int direction, int ndevsi, uint64_t intr_offset);
 void otx2_mbox_fini(struct otx2_mbox *mbox);
+__rte_internal
 void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid);
+__rte_internal
 int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid);
 int otx2_mbox_wait_for_rsp_tmo(struct otx2_mbox *mbox, int devid, uint32_t tmo);
+__rte_internal
 int otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, void **msg);
+__rte_internal
 int otx2_mbox_get_rsp_tmo(struct otx2_mbox *mbox, int devid, void **msg,
 			  uint32_t tmo);
 int otx2_mbox_get_availmem(struct otx2_mbox *mbox, int devid);
+__rte_internal
 struct mbox_msghdr *otx2_mbox_alloc_msg_rsp(struct otx2_mbox *mbox, int devid,
 					    int size, int size_rsp);
 
diff --git a/drivers/common/octeontx2/otx2_sec_idev.h b/drivers/common/octeontx2/otx2_sec_idev.h
index c681f5094..89cdaf66a 100644
--- a/drivers/common/octeontx2/otx2_sec_idev.h
+++ b/drivers/common/octeontx2/otx2_sec_idev.h
@@ -22,16 +22,22 @@ struct otx2_sec_idev_cfg {
 	rte_spinlock_t tx_cpt_lock;
 };
 
+__rte_internal
 uint8_t otx2_eth_dev_is_sec_capable(struct rte_eth_dev *eth_dev);
 
+__rte_internal
 int otx2_sec_idev_cfg_init(int port_id);
 
+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_add(uint16_t port_id, struct otx2_cpt_qp *qp);
 
+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_remove(struct otx2_cpt_qp *qp);
 
+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_put(struct otx2_cpt_qp *qp);
 
+__rte_internal
 int otx2_sec_idev_tx_cpt_qp_get(uint16_t port_id, struct otx2_cpt_qp **qp);
 
 #endif /* _OTX2_SEC_IDEV_H_ */
diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
index 01279c339..94af2ed69 100644
--- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
+++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
@@ -1,4 +1,4 @@
-DPDK_20.0 {
+INTERNAL {
 	global:
 
 	otx2_dev_active_vfs;
@@ -30,23 +30,13 @@ DPDK_20.0 {
 	otx2_sso_pf_func_get;
 	otx2_sso_pf_func_set;
 	otx2_unregister_irq;
-
-	local: *;
-};
-
-DPDK_21 {
-	global:
-
 	otx2_eth_dev_is_sec_capable;
 	otx2_sec_idev_cfg_init;
 	otx2_sec_idev_tx_cpt_qp_add;
 	otx2_sec_idev_tx_cpt_qp_remove;
 	otx2_sec_idev_tx_cpt_qp_get;
 	otx2_sec_idev_tx_cpt_qp_put;
-} DPDK_20.0;
-
-EXPERIMENTAL {
-	global:
-
 	otx2_logtype_ep;
+
+	local: *;
 };
-- 
2.17.1


^ permalink raw reply	[relevance 3%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  2020-05-10 22:53  0%   ` Pavan Nikhilesh Bhagavatula
@ 2020-05-11  9:46  0%     ` Ananyev, Konstantin
  2020-05-11 10:23  0%       ` Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 200+ results
From: Ananyev, Konstantin @ 2020-05-11  9:46 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, thomas,
	Wang, Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

> >> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >>
> >> Merge crc32 hash calculation public API headers for x86 and ARM,
> >> split implementations of x86 and ARM into their respective private
> >> headers.
> >> This reduces the ifdef code clutter while keeping current ABI intact.
> >>
> >> Although we install `rte_crc_arm64.h` it is not used in any of the lib or
> >> drivers layers. All the libs and drivers use `rte_hash_crc.h` which falls
> >> back to SW crc32 calculation for ARM platform.
> >>
> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >> ---
> >>
> >>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
> >algorithm
> >>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we fallback to
> >algorithm
> >>  set previously via `rte_hash_crc_set_alg()` instead of setting the best
> >>  available.
> >>  This behaviour should probably change to setting the best available
> >algorithm
> >>  and is up for discussion.
> >>
> >>  app/test/test_hash.c            |   6 +
> >>  lib/librte_hash/Makefile        |   5 -
> >>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
> >>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
> >>  lib/librte_hash/meson.build     |   3 +-
> >>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
> >>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++------------------
> >-
> >>  7 files changed, 219 insertions(+), 306 deletions(-)
> >>  create mode 100644 lib/librte_hash/crc_arm64.h
> >>  create mode 100644 lib/librte_hash/crc_x86.h
> >>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
> >>
> >> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
> >> index afa3a1a3c..7bd457dac 100644
> >> --- a/app/test/test_hash.c
> >> +++ b/app/test/test_hash.c
> >> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
> >>  	}
> >>
> >>  	/* Resetting to best available algorithm */
> >> +#if defined RTE_ARCH_X86
> >>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
> >> +#elif defined RTE_ARCH_ARM64
> >> +	rte_hash_crc_set_alg(CRC32_ARM64);
> >> +#else
> >> +	rte_hash_crc_set_alg(CRC32_SW);
> >> +#endif
> >>
> >>  	if (i == CRC32_ITERATIONS)
> >>  		return 0;
> >> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
> >> index ec9f86499..f640afc42 100644
> >> --- a/lib/librte_hash/Makefile
> >> +++ b/lib/librte_hash/Makefile
> >> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
> >rte_fbk_hash.c
> >>  # install this header file
> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_hash_crc.h
> >> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
> >> -ifneq ($(findstring RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
> >> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_crc_arm64.h
> >> -endif
> >> -endif
> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_jhash.h
> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_thash.h
> >>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_fbk_hash.h
> >> diff --git a/lib/librte_hash/crc_arm64.h b/lib/librte_hash/crc_arm64.h
> >> new file mode 100644
> >> index 000000000..8e75f8297
> >
> >Wouldn't that break 'make  install T=...'?
> 
> My bad I verified with meson and it was building fine.
> 
> >As now rte_hash_crc.h includes not public headers (crc_x86.h, etc.).
> >Same question about external apps, where they would get from these
> >headers?
> 
> I think in the next version we can directly have the arch specific functions
> Implemented in rte_hash_crc.h. Since its pretty stable code and overhead of extra
> ~120 lines.

Ok... but why not then just leave arch specific headers, as they are right now?
What is wrong with current approach?

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  2020-05-11  7:47  5%       ` Ray Kinsella
@ 2020-05-11  8:18  4%         ` Akhil Goyal
  2020-05-11 11:38  4%           ` Akhil Goyal
  2020-05-11 16:09  5%           ` Ray Kinsella
  0 siblings, 2 replies; 200+ results
From: Akhil Goyal @ 2020-05-11  8:18 UTC (permalink / raw)
  To: Ray Kinsella, Arek Kusztal, dev
  Cc: fiona.trahe, ray.kinsella, bruce.richardson

Hi Ray,

Previously, I only ran the script for the 2 patches.

./devtools/validate-abi.sh <commit id previous to these two patches> HEAD

However when I run for v20.02 and HEAD, the list is quite big. I believe most of them are either experimental or internal PMD. But cryptodev is still there.

NOTICE: abi-compliance-checker returned 1
NOTICE: ABI may be incompatible, check reports/logs for details.
NOTICE: Incompatible list:  librte_bbdev.so librte_common_iavf.so librte_common_octeontx2.so librte_cryptodev.so librte_eal.so librte_efd.so librte_eventdev.so librte_hash.so librte_ipsec.so librte_meter.so librte_pdump.so librte_pmd_crypto_scheduler.so librte_pmd_dpaa2_sec.so librte_pmd_dpaa_sec.so librte_pmd_ring.so librte_ring.so librte_vhost.so

Regards,
Akhil

> -----Original Message-----
> From: Ray Kinsella <mdr@ashroe.eu>
> Sent: Monday, May 11, 2020 1:18 PM
> To: Akhil Goyal <akhil.goyal@nxp.com>; Arek Kusztal
> <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> Cc: fiona.trahe@intel.com; ray.kinsella@intel.com; bruce.richardson@intel.com
> Subject: Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get
> function
> 
> Hi Akhil,
> 
> So 1st thing is that this that validate-abi uses "ABI Compliance Checker",
> which does not use libabigail.ignore.
> 
> So you will end up with different results compared to using libabigail as follows:
> 
> DPDK_ABI_REF_DIR=<some absolute path>
> DPDK_ABI_REF_VERSION=v20.02 ./devtools/test-meson-builds.sh
> 
> I did check with the "ABI Compliance Checker" (I like this tool also), however I
> got the following
> 
> NOTICE: No error detected, ABI is compatible.
> INFO: Logs are in /root/src/dpdk/abi-check/abi-check.log
> INFO: HTML reports are in /root/src/dpdk/abi-check/compat_reports directory
> 
> What references did you use with validate-abi.sh (I used v20.02 and HEAD).
> 
> Ray K
> 
> On 09/05/2020 22:11, Akhil Goyal wrote:
> > Hi Ray/Arek,
> >
> > I still see Incompatible cryptodev even after update in the abignore list.
> > I checked it with ./devtools/validate-abi.sh
> > NOTICE: ABI may be incompatible, check reports/logs for details.
> > NOTICE: Incompatible list:  librte_cryptodev.so
> >
> > Did I miss something?
> >
> >
> >>
> >> On 07/05/2020 11:57, Arek Kusztal wrote:
> >>> This patch adds versioned function rte_cryptodev_info_get()
> >>> to prevent some issues with ABI policy.
> >>> Node v21 works in same way as before, returning driver capabilities
> >>> directly to the API caller. These capabilities may include new elements
> >>> not part of the v20 ABI.
> >>> Node v20 function maintains compatibility with v20 ABI releases
> >>> by stripping out elements not supported in v20 ABI. Because
> >>> rte_cryptodev_info_get is called by other API functions,
> >>> rte_cryptodev_sym_capability_get function is versioned the same way.
> >>>
> >>> Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
> >>> ---
> >>> v2:
> >>> - changed version numbers of symbols to 20.0.2
> >>> v3:
> >>> - added v2/v3 informations
> >>> - changed version numbers of symbols to 21
> >>> v4:
> >>> - fixed clang build by movind binding default symbol
> >>> - implemented mailing list comments
> >>> - added abidiff tool suppression entries
> >>> v5:
> >>> - fixed meson build
> >>>
> >>>  devtools/libabigail.abignore                   |   8 ++
> >>>  lib/librte_cryptodev/meson.build               |   1 +
> >>>  lib/librte_cryptodev/rte_cryptodev.c           | 147
> >> ++++++++++++++++++++++++-
> >>>  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
> >>>  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
> >>>  5 files changed, 191 insertions(+), 6 deletions(-)
> >>>
> >> [SNIP]
> >>
> >> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 4%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  2020-05-09 21:11  4%     ` Akhil Goyal
  2020-05-11  6:12  0%       ` Ray Kinsella
@ 2020-05-11  7:47  5%       ` Ray Kinsella
  2020-05-11  8:18  4%         ` Akhil Goyal
  1 sibling, 1 reply; 200+ results
From: Ray Kinsella @ 2020-05-11  7:47 UTC (permalink / raw)
  To: Akhil Goyal, Arek Kusztal, dev
  Cc: fiona.trahe, ray.kinsella, bruce.richardson

Hi Akhil,

So 1st thing is that this that validate-abi uses "ABI Compliance Checker",
which does not use libabigail.ignore.

So you will end up with different results compared to using libabigail as follows:

DPDK_ABI_REF_DIR=<some absolute path> DPDK_ABI_REF_VERSION=v20.02 ./devtools/test-meson-builds.sh

I did check with the "ABI Compliance Checker" (I like this tool also), however I got the following 

NOTICE: No error detected, ABI is compatible.
INFO: Logs are in /root/src/dpdk/abi-check/abi-check.log
INFO: HTML reports are in /root/src/dpdk/abi-check/compat_reports directory

What references did you use with validate-abi.sh (I used v20.02 and HEAD).

Ray K

On 09/05/2020 22:11, Akhil Goyal wrote:
> Hi Ray/Arek,
> 
> I still see Incompatible cryptodev even after update in the abignore list.
> I checked it with ./devtools/validate-abi.sh
> NOTICE: ABI may be incompatible, check reports/logs for details.
> NOTICE: Incompatible list:  librte_cryptodev.so
> 
> Did I miss something?
> 
> 
>>
>> On 07/05/2020 11:57, Arek Kusztal wrote:
>>> This patch adds versioned function rte_cryptodev_info_get()
>>> to prevent some issues with ABI policy.
>>> Node v21 works in same way as before, returning driver capabilities
>>> directly to the API caller. These capabilities may include new elements
>>> not part of the v20 ABI.
>>> Node v20 function maintains compatibility with v20 ABI releases
>>> by stripping out elements not supported in v20 ABI. Because
>>> rte_cryptodev_info_get is called by other API functions,
>>> rte_cryptodev_sym_capability_get function is versioned the same way.
>>>
>>> Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
>>> ---
>>> v2:
>>> - changed version numbers of symbols to 20.0.2
>>> v3:
>>> - added v2/v3 informations
>>> - changed version numbers of symbols to 21
>>> v4:
>>> - fixed clang build by movind binding default symbol
>>> - implemented mailing list comments
>>> - added abidiff tool suppression entries
>>> v5:
>>> - fixed meson build
>>>
>>>  devtools/libabigail.abignore                   |   8 ++
>>>  lib/librte_cryptodev/meson.build               |   1 +
>>>  lib/librte_cryptodev/rte_cryptodev.c           | 147
>> ++++++++++++++++++++++++-
>>>  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
>>>  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
>>>  5 files changed, 191 insertions(+), 6 deletions(-)
>>>
>> [SNIP]
>>
>> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 5%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  2020-05-09 21:11  4%     ` Akhil Goyal
@ 2020-05-11  6:12  0%       ` Ray Kinsella
  2020-05-11  7:47  5%       ` Ray Kinsella
  1 sibling, 0 replies; 200+ results
From: Ray Kinsella @ 2020-05-11  6:12 UTC (permalink / raw)
  To: Akhil Goyal, Arek Kusztal, dev
  Cc: fiona.trahe, ray.kinsella, bruce.richardson

Hi Akhil,

I didn't see this - checking again.

Ray K

On 09/05/2020 22:11, Akhil Goyal wrote:
> Hi Ray/Arek,
> 
> I still see Incompatible cryptodev even after update in the abignore list.
> I checked it with ./devtools/validate-abi.sh
> NOTICE: ABI may be incompatible, check reports/logs for details.
> NOTICE: Incompatible list:  librte_cryptodev.so
> 
> Did I miss something?
> 
> 
>>
>> On 07/05/2020 11:57, Arek Kusztal wrote:
>>> This patch adds versioned function rte_cryptodev_info_get()
>>> to prevent some issues with ABI policy.
>>> Node v21 works in same way as before, returning driver capabilities
>>> directly to the API caller. These capabilities may include new elements
>>> not part of the v20 ABI.
>>> Node v20 function maintains compatibility with v20 ABI releases
>>> by stripping out elements not supported in v20 ABI. Because
>>> rte_cryptodev_info_get is called by other API functions,
>>> rte_cryptodev_sym_capability_get function is versioned the same way.
>>>
>>> Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
>>> ---
>>> v2:
>>> - changed version numbers of symbols to 20.0.2
>>> v3:
>>> - added v2/v3 informations
>>> - changed version numbers of symbols to 21
>>> v4:
>>> - fixed clang build by movind binding default symbol
>>> - implemented mailing list comments
>>> - added abidiff tool suppression entries
>>> v5:
>>> - fixed meson build
>>>
>>>  devtools/libabigail.abignore                   |   8 ++
>>>  lib/librte_cryptodev/meson.build               |   1 +
>>>  lib/librte_cryptodev/rte_cryptodev.c           | 147
>> ++++++++++++++++++++++++-
>>>  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
>>>  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
>>>  5 files changed, 191 insertions(+), 6 deletions(-)
>>>
>> [SNIP]
>>
>> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  @ 2020-05-10 22:53  0%   ` Pavan Nikhilesh Bhagavatula
  2020-05-11  9:46  0%     ` Ananyev, Konstantin
  0 siblings, 1 reply; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2020-05-10 22:53 UTC (permalink / raw)
  To: Ananyev, Konstantin, Jerin Jacob Kollanukkaran, thomas, Wang,
	Yipeng1, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Merge crc32 hash calculation public API headers for x86 and ARM,
>> split implementations of x86 and ARM into their respective private
>> headers.
>> This reduces the ifdef code clutter while keeping current ABI intact.
>>
>> Although we install `rte_crc_arm64.h` it is not used in any of the lib or
>> drivers layers. All the libs and drivers use `rte_hash_crc.h` which falls
>> back to SW crc32 calculation for ARM platform.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>>
>>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
>algorithm
>>  through `rte_hash_crc_set_alg()` on x86 or vice-versa we fallback to
>algorithm
>>  set previously via `rte_hash_crc_set_alg()` instead of setting the best
>>  available.
>>  This behaviour should probably change to setting the best available
>algorithm
>>  and is up for discussion.
>>
>>  app/test/test_hash.c            |   6 +
>>  lib/librte_hash/Makefile        |   5 -
>>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
>>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
>>  lib/librte_hash/meson.build     |   3 +-
>>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
>>  lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++------------------
>-
>>  7 files changed, 219 insertions(+), 306 deletions(-)
>>  create mode 100644 lib/librte_hash/crc_arm64.h
>>  create mode 100644 lib/librte_hash/crc_x86.h
>>  delete mode 100644 lib/librte_hash/rte_crc_arm64.h
>>
>> diff --git a/app/test/test_hash.c b/app/test/test_hash.c
>> index afa3a1a3c..7bd457dac 100644
>> --- a/app/test/test_hash.c
>> +++ b/app/test/test_hash.c
>> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>>  	}
>>
>>  	/* Resetting to best available algorithm */
>> +#if defined RTE_ARCH_X86
>>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> +#elif defined RTE_ARCH_ARM64
>> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> +#else
>> +	rte_hash_crc_set_alg(CRC32_SW);
>> +#endif
>>
>>  	if (i == CRC32_ITERATIONS)
>>  		return 0;
>> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
>> index ec9f86499..f640afc42 100644
>> --- a/lib/librte_hash/Makefile
>> +++ b/lib/librte_hash/Makefile
>> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
>rte_fbk_hash.c
>>  # install this header file
>>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include := rte_hash.h
>>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_hash_crc.h
>> -ifeq ($(CONFIG_RTE_ARCH_ARM64),y)
>> -ifneq ($(findstring RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
>> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_crc_arm64.h
>> -endif
>> -endif
>>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_jhash.h
>>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_thash.h
>>  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_fbk_hash.h
>> diff --git a/lib/librte_hash/crc_arm64.h b/lib/librte_hash/crc_arm64.h
>> new file mode 100644
>> index 000000000..8e75f8297
>
>Wouldn't that break 'make  install T=...'?

My bad I verified with meson and it was building fine.

>As now rte_hash_crc.h includes not public headers (crc_x86.h, etc.).
>Same question about external apps, where they would get from these
>headers?

I think in the next version we can directly have the arch specific functions
Implemented in rte_hash_crc.h. Since its pretty stable code and overhead of extra 
~120 lines.

>
>> --- /dev/null
>> +++ b/lib/librte_hash/crc_arm64.h
>> @@ -0,0 +1,67 @@
>> +/* SPDX-License-Identifier: BSD-3-Clause
>> + * Copyright(c) 2015 Cavium, Inc
>> + */
>> +


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM
  @ 2020-05-10 22:49  0%   ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 200+ results
From: Pavan Nikhilesh Bhagavatula @ 2020-05-10 22:49 UTC (permalink / raw)
  To: Wang, Yipeng1, Van Haaren, Harry, Jerin Jacob Kollanukkaran,
	thomas, Gobriel, Sameh, Richardson, Bruce, Ruifeng Wang
  Cc: dev

>> Subject: [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and
>ARM
>>
>> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>>
>> Merge crc32 hash calculation public API headers for x86 and ARM, split
>> implementations of x86 and ARM into their respective private
>headers.
>> This reduces the ifdef code clutter while keeping current ABI intact.
>>
>> Although we install `rte_crc_arm64.h` it is not used in any of the lib or
>drivers
>> layers. All the libs and drivers use `rte_hash_crc.h` which falls back to
>SW
>> crc32 calculation for ARM platform.
>>
>> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> ---
>>
>>  Currently, if application incorrectly sets CRC32_ARM64 as crc32
>algorithm
>> through `rte_hash_crc_set_alg()` on x86 or vice-versa we fallback to
>> algorithm  set previously via `rte_hash_crc_set_alg()` instead of
>setting the
>> best  available.
>>  This behaviour should probably change to setting the best available
>> algorithm  and is up for discussion.
>
>[Wang, Yipeng] Should it be an illegal flag if I set ARM64
>On x86? I am thinking we should generate a warning message into logs
>if this happens.

The current behavior (with and without this patch) is to fallback to software CRC.
Warning log sounds good. Maybe we can fallback to best available CRC mode on 
the platform too.

>>
>>  app/test/test_hash.c            |   6 +
>>  lib/librte_hash/Makefile        |   5 -
>>  lib/librte_hash/crc_arm64.h     |  67 +++++++++++
>>  lib/librte_hash/crc_x86.h       |  68 +++++++++++
>>  lib/librte_hash/meson.build     |   3 +-
>>  lib/librte_hash/rte_crc_arm64.h | 183 ------------------------------
>> lib/librte_hash/rte_hash_crc.h  | 193 +++++++++++++-------------------
>>  7 files changed, 219 insertions(+), 306 deletions(-)  create mode
>100644
>> lib/librte_hash/crc_arm64.h  create mode 100644
>lib/librte_hash/crc_x86.h
>> delete mode 100644 lib/librte_hash/rte_crc_arm64.h
>>
>> diff --git a/app/test/test_hash.c b/app/test/test_hash.c index
>> afa3a1a3c..7bd457dac 100644
>> --- a/app/test/test_hash.c
>> +++ b/app/test/test_hash.c
>> @@ -195,7 +195,13 @@ test_crc32_hash_alg_equiv(void)
>>  	}
>>
>>  	/* Resetting to best available algorithm */
>> +#if defined RTE_ARCH_X86
>>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> +#elif defined RTE_ARCH_ARM64
>> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> +#else
>> +	rte_hash_crc_set_alg(CRC32_SW);
>> +#endif
>>
>>  	if (i == CRC32_ITERATIONS)
>>  		return 0;
>> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile index
>> ec9f86499..f640afc42 100644
>> --- a/lib/librte_hash/Makefile
>> +++ b/lib/librte_hash/Makefile
>> @@ -19,11 +19,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_HASH) +=
>rte_fbk_hash.c
>> # install this header file  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-
>include :=
>> rte_hash.h  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>> rte_hash_crc.h -ifeq ($(CONFIG_RTE_ARCH_ARM64),y) -ifneq
>($(findstring
>> RTE_MACHINE_CPUFLAG_CRC32,$(CFLAGS)),)
>> -SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_crc_arm64.h
>-endif
>> -endif  SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include +=
>rte_jhash.h
>> SYMLINK-$(CONFIG_RTE_LIBRTE_HASH)-include += rte_thash.h
>SYMLINK-
>> $(CONFIG_RTE_LIBRTE_HASH)-include += rte_fbk_hash.h diff --git
>> a/lib/librte_hash/crc_arm64.h b/lib/librte_hash/crc_arm64.h new file
>mode
>> 100644 index 000000000..8e75f8297
>> --- /dev/null
>> +++ b/lib/librte_hash/crc_arm64.h
>> @@ -0,0 +1,67 @@
>> +/* SPDX-License-Identifier: BSD-3-Clause
>> + * Copyright(c) 2015 Cavium, Inc
>> + */
>> +
>> +#ifndef _CRC_ARM64_H_
>> +#define _CRC_ARM64_H_
>> +
>> +/**
>> + * @file
>> + *
>> + * CRC arm64 Hash
>> + */
>[Wang, Yipeng] It is hidden now so do we still need this doxygen region
>above?

I will remove in next version.

>> +
>> +#ifdef __cplusplus
>> +extern "C" {
>> +#endif
>> +
>> +#include <stdint.h>
>> +#include <rte_cpuflags.h>
>> +#include <rte_branch_prediction.h>
>> +#include <rte_common.h>
>[Wang, Yipeng] I don't think we need all these headers in this file.
>> +

Will remove in next version.

>> +static inline uint32_t
>> +crc32c_arm64_u8(uint8_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32cb %w[crc], %w[crc], %w[value]"
>> +			: [crc] "+r" (init_val)
>> +			: [value] "r" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_arm64_u16(uint16_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32ch %w[crc], %w[crc], %w[value]"
>> +			: [crc] "+r" (init_val)
>> +			: [value] "r" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_arm64_u32(uint32_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32cw %w[crc], %w[crc], %w[value]"
>> +			: [crc] "+r" (init_val)
>> +			: [value] "r" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_arm64_u64(uint64_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32cx %w[crc], %w[crc], %x[value]"
>> +			: [crc] "+r" (init_val)
>> +			: [value] "r" (data));
>> +	return init_val;
>> +}
>> +
>> +#ifdef __cplusplus
>> +}
>> +#endif
>> +
>> +#endif /* _CRC_ARM64_H_ */
>> diff --git a/lib/librte_hash/crc_x86.h b/lib/librte_hash/crc_x86.h new
>file
>> mode 100644 index 000000000..fb45f2e98
>> --- /dev/null
>> +++ b/lib/librte_hash/crc_x86.h
>> @@ -0,0 +1,68 @@
>> +/* SPDX-License-Identifier: BSD-3-Clause
>> + * Copyright(c) 2010-2014 Intel Corporation  */
>> +
>> +#ifndef _CRC_X86_H_
>> +#define _CRC_X86_H_
>> +
>> +#if defined(RTE_ARCH_X86)
>> +static inline uint32_t
>> +crc32c_sse42_u8(uint8_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32b %[data], %[init_val];"
>> +			: [init_val] "+r" (init_val)
>> +			: [data] "rm" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_sse42_u16(uint16_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32w %[data], %[init_val];"
>> +			: [init_val] "+r" (init_val)
>> +			: [data] "rm" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_sse42_u32(uint32_t data, uint32_t init_val) {
>> +	__asm__ volatile(
>> +			"crc32l %[data], %[init_val];"
>> +			: [init_val] "+r" (init_val)
>> +			: [data] "rm" (data));
>> +	return init_val;
>> +}
>> +
>> +static inline uint32_t
>> +crc32c_sse42_u64_mimic(uint64_t data, uint32_t init_val) {
>> +	union {
>> +		uint32_t u32[2];
>> +		uint64_t u64;
>> +	} d;
>> +
>> +	d.u64 = data;
>> +	init_val = crc32c_sse42_u32(d.u32[0], init_val);
>> +	init_val = crc32c_sse42_u32(d.u32[1], init_val);
>> +	return init_val;
>> +}
>> +#endif
>> +
>> +#ifdef RTE_ARCH_X86_64
>> +static inline uint32_t
>> +crc32c_sse42_u64(uint64_t data, uint32_t init_val) {
>> +	uint64_t val = init_val;
>> +
>> +	__asm__ volatile(
>> +			"crc32q %[data], %[init_val];"
>> +			: [init_val] "+r" (val)
>> +			: [data] "rm" (data));
>> +	return (uint32_t)val;
>> +}
>> +#endif
>> +
>> +#endif
>> diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build
>index
>> 6ab46ae9d..90a180bc8 100644
>> --- a/lib/librte_hash/meson.build
>> +++ b/lib/librte_hash/meson.build
>> @@ -1,8 +1,7 @@
>>  # SPDX-License-Identifier: BSD-3-Clause  # Copyright(c) 2017 Intel
>> Corporation
>>
>> -headers = files('rte_crc_arm64.h',
>> -	'rte_fbk_hash.h',
>> +headers = files('rte_fbk_hash.h',
>>  	'rte_hash_crc.h',
>>  	'rte_hash.h',
>>  	'rte_jhash.h',
>> diff --git a/lib/librte_hash/rte_crc_arm64.h
>> b/lib/librte_hash/rte_crc_arm64.h deleted file mode 100644 index
>> b4628cfc0..000000000
>> --- a/lib/librte_hash/rte_crc_arm64.h
>> +++ /dev/null
>> @@ -1,183 +0,0 @@
>> -/* SPDX-License-Identifier: BSD-3-Clause
>> - * Copyright(c) 2015 Cavium, Inc
>> - */
>> -
>> -#ifndef _RTE_CRC_ARM64_H_
>> -#define _RTE_CRC_ARM64_H_
>> -
>> -/**
>> - * @file
>> - *
>> - * RTE CRC arm64 Hash
>> - */
>> -
>> -#ifdef __cplusplus
>> -extern "C" {
>> -#endif
>> -
>> -#include <stdint.h>
>> -#include <rte_cpuflags.h>
>> -#include <rte_branch_prediction.h>
>> -#include <rte_common.h>
>> -
>> -static inline uint32_t
>> -crc32c_arm64_u8(uint8_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32cb %w[crc], %w[crc], %w[value]"
>> -			: [crc] "+r" (init_val)
>> -			: [value] "r" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_arm64_u16(uint16_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32ch %w[crc], %w[crc], %w[value]"
>> -			: [crc] "+r" (init_val)
>> -			: [value] "r" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_arm64_u32(uint32_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32cw %w[crc], %w[crc], %w[value]"
>> -			: [crc] "+r" (init_val)
>> -			: [value] "r" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_arm64_u64(uint64_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32cx %w[crc], %w[crc], %x[value]"
>> -			: [crc] "+r" (init_val)
>> -			: [value] "r" (data));
>> -	return init_val;
>> -}
>> -
>> -/**
>> - * Allow or disallow use of arm64 SIMD instrinsics for CRC32 hash
>> - * calculation.
>> - *
>> - * @param alg
>> - *   An OR of following flags:
>> - *   - (CRC32_SW) Don't use arm64 crc intrinsics
>> - *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
>> - *
>> - */
>> -static inline void
>> -rte_hash_crc_set_alg(uint8_t alg)
>> -{
>> -	switch (alg) {
>> -	case CRC32_ARM64:
>> -		if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32))
>> -			alg = CRC32_SW;
>> -		/* fall-through */
>> -	case CRC32_SW:
>> -		crc32_alg = alg;
>> -		/* fall-through */
>> -	default:
>> -		break;
>> -	}
>> -}
>> -
>> -/* Setting the best available algorithm */
>> -RTE_INIT(rte_hash_crc_init_alg)
>> -{
>> -	rte_hash_crc_set_alg(CRC32_ARM64);
>> -}
>> -
>> -/**
>> - * Use single crc32 instruction to perform a hash on a 1 byte value.
>> - * Fall back to software crc32 implementation in case arm64 crc
>intrinsics is
>> - * not supported
>> - *
>> - * @param data
>> - *   Data to perform hash on.
>> - * @param init_val
>> - *   Value to initialise hash generator.
>> - * @return
>> - *   32bit calculated hash value.
>> - */
>> -static inline uint32_t
>> -rte_hash_crc_1byte(uint8_t data, uint32_t init_val) -{
>> -	if (likely(crc32_alg & CRC32_ARM64))
>> -		return crc32c_arm64_u8(data, init_val);
>> -
>> -	return crc32c_1byte(data, init_val);
>> -}
>> -
>> -/**
>> - * Use single crc32 instruction to perform a hash on a 2 bytes value.
>> - * Fall back to software crc32 implementation in case arm64 crc
>intrinsics is
>> - * not supported
>> - *
>> - * @param data
>> - *   Data to perform hash on.
>> - * @param init_val
>> - *   Value to initialise hash generator.
>> - * @return
>> - *   32bit calculated hash value.
>> - */
>> -static inline uint32_t
>> -rte_hash_crc_2byte(uint16_t data, uint32_t init_val) -{
>> -	if (likely(crc32_alg & CRC32_ARM64))
>> -		return crc32c_arm64_u16(data, init_val);
>> -
>> -	return crc32c_2bytes(data, init_val);
>> -}
>> -
>> -/**
>> - * Use single crc32 instruction to perform a hash on a 4 byte value.
>> - * Fall back to software crc32 implementation in case arm64 crc
>intrinsics is
>> - * not supported
>> - *
>> - * @param data
>> - *   Data to perform hash on.
>> - * @param init_val
>> - *   Value to initialise hash generator.
>> - * @return
>> - *   32bit calculated hash value.
>> - */
>> -static inline uint32_t
>> -rte_hash_crc_4byte(uint32_t data, uint32_t init_val) -{
>> -	if (likely(crc32_alg & CRC32_ARM64))
>> -		return crc32c_arm64_u32(data, init_val);
>> -
>> -	return crc32c_1word(data, init_val);
>> -}
>> -
>> -/**
>> - * Use single crc32 instruction to perform a hash on a 8 byte value.
>> - * Fall back to software crc32 implementation in case arm64 crc
>intrinsics is
>> - * not supported
>> - *
>> - * @param data
>> - *   Data to perform hash on.
>> - * @param init_val
>> - *   Value to initialise hash generator.
>> - * @return
>> - *   32bit calculated hash value.
>> - */
>> -static inline uint32_t
>> -rte_hash_crc_8byte(uint64_t data, uint32_t init_val) -{
>> -	if (likely(crc32_alg == CRC32_ARM64))
>> -		return crc32c_arm64_u64(data, init_val);
>> -
>> -	return crc32c_2words(data, init_val);
>> -}
>> -
>> -#ifdef __cplusplus
>> -}
>> -#endif
>> -
>> -#endif /* _RTE_CRC_ARM64_H_ */
>> diff --git a/lib/librte_hash/rte_hash_crc.h
>b/lib/librte_hash/rte_hash_crc.h
>> index cf28031b3..292697db1 100644
>> --- a/lib/librte_hash/rte_hash_crc.h
>> +++ b/lib/librte_hash/rte_hash_crc.h
>> @@ -21,6 +21,15 @@ extern "C" {
>>  #include <rte_branch_prediction.h>
>>  #include <rte_common.h>
>>
>> +typedef uint32_t
>> +(*crc32_handler_1b)(uint8_t data, uint32_t init_val); typedef
>uint32_t
>> +(*crc32_handler_2b)(uint16_t data, uint32_t init_val); typedef
>uint32_t
>> +(*crc32_handler_4b)(uint32_t data, uint32_t init_val); typedef
>uint32_t
>> +(*crc32_handler_8b)(uint64_t data, uint32_t init_val);
>
>[Wang, Yipeng] I guess functions pointers makes the code cleaner.
>I am just not sure on performance implications for indirect call.
>@Harry for his comment.
>

Sadly there is no perf testcase for crc hash computation. Maybe we could
have a simple testcase in hash_perf_autotest in next version.

>> +
>>  /* Lookup tables for software implementation of CRC32C */  static
>const
>> uint32_t crc32c_tables[8][256] = {{
>>   0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F,
>0x35F1141C,
>> 0x26A1E7E8, 0xD4CA64EB, @@ -322,7 +331,7 @@
>crc32c_2bytes(uint16_t
>> data, uint32_t init_val)  }
>>
>>  static inline uint32_t
>> -crc32c_1word(uint32_t data, uint32_t init_val)
>> +crc32c_4bytes(uint32_t data, uint32_t init_val)
>>  {
>>  	uint32_t crc, term1, term2;
>>  	crc = init_val;
>> @@ -336,7 +345,7 @@ crc32c_1word(uint32_t data, uint32_t init_val)
>}
>>
>>  static inline uint32_t
>> -crc32c_2words(uint64_t data, uint32_t init_val)
>> +crc32c_8bytes(uint64_t data, uint32_t init_val)
>>  {
>>  	uint32_t crc, term1, term2;
>>  	union {
>> @@ -357,109 +366,94 @@ crc32c_2words(uint64_t data, uint32_t
>init_val)
>>
>>  	return crc;
>>  }
>> -
>> -#if defined(RTE_ARCH_X86)
>> -static inline uint32_t
>> -crc32c_sse42_u8(uint8_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32b %[data], %[init_val];"
>> -			: [init_val] "+r" (init_val)
>> -			: [data] "rm" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_sse42_u16(uint16_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32w %[data], %[init_val];"
>> -			: [init_val] "+r" (init_val)
>> -			: [data] "rm" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_sse42_u32(uint32_t data, uint32_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32l %[data], %[init_val];"
>> -			: [init_val] "+r" (init_val)
>> -			: [data] "rm" (data));
>> -	return init_val;
>> -}
>> -
>> -static inline uint32_t
>> -crc32c_sse42_u64_mimic(uint64_t data, uint64_t init_val) -{
>> -	union {
>> -		uint32_t u32[2];
>> -		uint64_t u64;
>> -	} d;
>> -
>> -	d.u64 = data;
>> -	init_val = crc32c_sse42_u32(d.u32[0], (uint32_t)init_val);
>> -	init_val = crc32c_sse42_u32(d.u32[1], (uint32_t)init_val);
>> -	return (uint32_t)init_val;
>> -}
>> -#endif
>> -
>> -#ifdef RTE_ARCH_X86_64
>> -static inline uint32_t
>> -crc32c_sse42_u64(uint64_t data, uint64_t init_val) -{
>> -	__asm__ volatile(
>> -			"crc32q %[data], %[init_val];"
>> -			: [init_val] "+r" (init_val)
>> -			: [data] "rm" (data));
>> -	return (uint32_t)init_val;
>> -}
>> -#endif
>> -
>[Wang, Yipeng] keep the blank line before define.

Will add in next version.

>>  #define CRC32_SW            (1U << 0)
>>  #define CRC32_SSE42         (1U << 1)
>>  #define CRC32_x64           (1U << 2)
>>  #define CRC32_SSE42_x64     (CRC32_x64|CRC32_SSE42)
>>  #define CRC32_ARM64         (1U << 3)
>>
>> -static uint8_t crc32_alg = CRC32_SW;
>> +static crc32_handler_1b crc32_1b = crc32c_1byte; static
>> +crc32_handler_2b crc32_2b = crc32c_2bytes; static crc32_handler_4b
>> +crc32_4b = crc32c_4bytes; static crc32_handler_8b crc32_8b =
>> +crc32c_8bytes;
>>
>>  #if defined(RTE_ARCH_ARM64) &&
>> defined(RTE_MACHINE_CPUFLAG_CRC32)
>> -#include "rte_crc_arm64.h"
>> -#else
>> +#include "crc_arm64.h"
>> +#endif
>> +
>> +#if defined(RTE_ARCH_X86)
>> +#include "crc_x86.h"
>> +#endif
>>
>>  /**
>> - * Allow or disallow use of SSE4.2 instrinsics for CRC32 hash
>> + * Allow or disallow use of SSE4.2/ARMv8 instrinsics for CRC32 hash
>>   * calculation.
>>   *
>>   * @param alg
>>   *   An OR of following flags:
>> - *   - (CRC32_SW) Don't use SSE4.2 intrinsics
>> + *   - (CRC32_SW) Don't use SSE4.2 intrinsics (default non-
>[x86/ARMv8])
>>   *   - (CRC32_SSE42) Use SSE4.2 intrinsics if available
>> - *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available
>(default)
>> - *
>> + *   - (CRC32_SSE42_x64) Use 64-bit SSE4.2 intrinsic if available
>(default x86)
>> + *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available
>>   */
>>  static inline void
>>  rte_hash_crc_set_alg(uint8_t alg)
>>  {
>> -#if defined(RTE_ARCH_X86)
>> -	if (alg == CRC32_SSE42_x64 &&
>> -
>	!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
>> -		alg = CRC32_SSE42;
>> +	switch (alg) {
>> +	case CRC32_SSE42_x64:
>> +#if defined RTE_ARCH_X86
>> +		crc32_1b = crc32c_sse42_u8;
>> +		crc32_2b = crc32c_sse42_u16;
>> +		crc32_4b = crc32c_sse42_u32;
>> +
>> +	if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_EM64T))
>> +		crc32_8b = crc32c_sse42_u64_mimic;
>> +	else
>> +		crc32_8b = crc32c_sse42_u64;
>>  #endif
>> -	crc32_alg = alg;
>> +		break;
>> +	case CRC32_SSE42:
>> +#if defined RTE_ARCH_X86
>> +		crc32_1b = crc32c_sse42_u8;
>> +		crc32_2b = crc32c_sse42_u16;
>> +		crc32_4b = crc32c_sse42_u32;
>> +		crc32_8b = crc32c_sse42_u64_mimic;
>> +#endif
>> +		break;
>> +	case CRC32_ARM64:
>> +#if defined RTE_ARCH_ARM64
>> +	if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_CRC32)) {
>> +		crc32_1b = crc32c_arm64_u8;
>> +		crc32_2b = crc32c_arm64_u16;
>> +		crc32_4b = crc32c_arm64_u32;
>> +		crc32_8b = crc32c_arm64_u64;
>> +	}
>> +#endif
>> +		break;
>> +	case CRC32_SW:
>> +	default:
>> +		crc32_1b = crc32c_1byte;
>> +		crc32_2b = crc32c_2bytes;
>> +		crc32_4b = crc32c_4bytes;
>> +		crc32_8b = crc32c_8bytes;
>> +	break;
>> +	}
>>  }
>>
>>  /* Setting the best available algorithm */
>>  RTE_INIT(rte_hash_crc_init_alg)
>>  {
>> +#if defined RTE_ARCH_X86
>>  	rte_hash_crc_set_alg(CRC32_SSE42_x64);
>> +#elif defined RTE_ARCH_ARM64
>> +	rte_hash_crc_set_alg(CRC32_ARM64);
>> +#else
>> +	rte_hash_crc_set_alg(CRC32_SW);
>> +#endif
>>  }
>>
>>  /**
>> - * Use single crc32 instruction to perform a hash on a byte value.
>> - * Fall back to software crc32 implementation in case SSE4.2 is
>> - * not supported
>> + * Calculate crc32 hash value of 1bytes.
>>   *
>>   * @param data
>>   *   Data to perform hash on.
>> @@ -471,18 +465,11 @@ RTE_INIT(rte_hash_crc_init_alg)  static inline
>> uint32_t  rte_hash_crc_1byte(uint8_t data, uint32_t init_val)  { -#if
>defined
>> RTE_ARCH_X86
>> -	if (likely(crc32_alg & CRC32_SSE42))
>> -		return crc32c_sse42_u8(data, init_val);
>> -#endif
>> -
>> -	return crc32c_1byte(data, init_val);
>> +	return (crc32_1b)(data, init_val);
>>  }
>>
>>  /**
>> - * Use single crc32 instruction to perform a hash on a 2 bytes value.
>> - * Fall back to software crc32 implementation in case SSE4.2 is
>> - * not supported
>> + * Calculate crc32 hash value of 2bytes.
>>   *
>>   * @param data
>>   *   Data to perform hash on.
>> @@ -494,18 +481,11 @@ rte_hash_crc_1byte(uint8_t data, uint32_t
>init_val)
>> static inline uint32_t  rte_hash_crc_2byte(uint16_t data, uint32_t
>init_val)  { -
>> #if defined RTE_ARCH_X86
>> -	if (likely(crc32_alg & CRC32_SSE42))
>> -		return crc32c_sse42_u16(data, init_val);
>> -#endif
>> -
>> -	return crc32c_2bytes(data, init_val);
>> +	return (crc32_2b)(data, init_val);
>>  }
>>
>>  /**
>> - * Use single crc32 instruction to perform a hash on a 4 byte value.
>> - * Fall back to software crc32 implementation in case SSE4.2 is
>> - * not supported
>> + * Calculate crc32 hash value of 4bytes.
>>   *
>>   * @param data
>>   *   Data to perform hash on.
>> @@ -517,18 +497,11 @@ rte_hash_crc_2byte(uint16_t data, uint32_t
>init_val)
>> static inline uint32_t  rte_hash_crc_4byte(uint32_t data, uint32_t
>init_val)  { -
>> #if defined RTE_ARCH_X86
>> -	if (likely(crc32_alg & CRC32_SSE42))
>> -		return crc32c_sse42_u32(data, init_val);
>> -#endif
>> -
>> -	return crc32c_1word(data, init_val);
>> +	return (crc32_4b)(data, init_val);
>>  }
>>
>>  /**
>> - * Use single crc32 instruction to perform a hash on a 8 byte value.
>> - * Fall back to software crc32 implementation in case SSE4.2 is
>> - * not supported
>> + * Calculate crc32 hash value of 8bytes.
>>   *
>>   * @param data
>>   *   Data to perform hash on.
>> @@ -540,21 +513,9 @@ rte_hash_crc_4byte(uint32_t data, uint32_t
>init_val)
>> static inline uint32_t  rte_hash_crc_8byte(uint64_t data, uint32_t
>init_val)  { -
>> #ifdef RTE_ARCH_X86_64
>> -	if (likely(crc32_alg == CRC32_SSE42_x64))
>> -		return crc32c_sse42_u64(data, init_val);
>> -#endif
>> -
>> -#if defined RTE_ARCH_X86
>> -	if (likely(crc32_alg & CRC32_SSE42))
>> -		return crc32c_sse42_u64_mimic(data, init_val);
>> -#endif
>> -
>> -	return crc32c_2words(data, init_val);
>> +	return (crc32_8b)(data, init_val);
>>  }
>>
>> -#endif
>> -
>>  /**
>>   * Calculate CRC32 hash on user-supplied byte array.
>>   *
>> --
>> 2.17.1
>[Wang, Yipeng]
>Thanks for the patch, please see my comment inlined.
>

Thanks for the review.

>I think it is good to hide the architecture specific headers.
>And I agree with Harry that we shouldn't silently remove a public
>header.
>I don't know the best practice on handling this though (e.g. symlink or
>dummyfile), either way looks fine to me.
>Bruce/Thomas may comment.
>
>


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v3 1/2] common/mlx5: add rte internal tag and avoid comparison
  @ 2020-05-10  8:14  0%       ` Ophir Munk
  0 siblings, 0 replies; 200+ results
From: Ophir Munk @ 2020-05-10  8:14 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, David Marchand, Ray Kinsella, Matan Azrad, Raslan Darawsheh

Thanks for clarifying the INTERNAL/EXPERIMENTAL difference.

> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Thursday, May 7, 2020 11:08 PM
> To: Ophir Munk <ophirmu@mellanox.com>
> Cc: dev@dpdk.org; David Marchand <david.marchand@redhat.com>; Ray
> Kinsella <mdr@ashroe.eu>; Matan Azrad <matan@mellanox.com>; Raslan
> Darawsheh <rasland@mellanox.com>
> Subject: Re: [PATCH v3 1/2] common/mlx5: add rte internal tag and avoid
> comparison
> 
> 07/05/2020 13:41, Ophir Munk:
> > From: Thomas Monjalon <thomas@monjalon.net>
> > > 07/05/2020 10:56, Ophir Munk:
> > > > Move mlx5 symbols in the map file to the INTERNAL section and add
> > > > __internal tags to their definitions.
> > > > Those symbols were exported in 20.02 and now (20.05) they are
> removed.
> > > [...]
> > > > --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> > > > +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> > > > @@ -1,8 +1,10 @@
> > > > -DPDK_21 {
> > > > +INTERNAL {
> > >
> > > I think you forgot the EXPERIMENTAL section.
> > > In my opinion, everything should be in INTERNAL and marked with
> > > __rte_internal in source code.
> > >
> >
> > I moved all EXPERIMENTAL to INTERNAL and sent V4.
> > A general question: what is the difference between EXPERIMENTAL and
> INTERNAL functionalities?
> > In the end both indicate to skip ABI check.
> 
> Regarding ABI check, yes the result is the same.
> Regarding API, it is different:
> INTERNAL is forbidden to applications,
> while EXPERIMENTAL is to be used with cautious as compatibility is not
> guaranteed.
> 


^ permalink raw reply	[relevance 0%]

* Re: [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function
  @ 2020-05-09 21:11  4%     ` Akhil Goyal
  2020-05-11  6:12  0%       ` Ray Kinsella
  2020-05-11  7:47  5%       ` Ray Kinsella
  0 siblings, 2 replies; 200+ results
From: Akhil Goyal @ 2020-05-09 21:11 UTC (permalink / raw)
  To: Ray Kinsella, Arek Kusztal, dev
  Cc: fiona.trahe, ray.kinsella, bruce.richardson

Hi Ray/Arek,

I still see Incompatible cryptodev even after update in the abignore list.
I checked it with ./devtools/validate-abi.sh
NOTICE: ABI may be incompatible, check reports/logs for details.
NOTICE: Incompatible list:  librte_cryptodev.so

Did I miss something?


> 
> On 07/05/2020 11:57, Arek Kusztal wrote:
> > This patch adds versioned function rte_cryptodev_info_get()
> > to prevent some issues with ABI policy.
> > Node v21 works in same way as before, returning driver capabilities
> > directly to the API caller. These capabilities may include new elements
> > not part of the v20 ABI.
> > Node v20 function maintains compatibility with v20 ABI releases
> > by stripping out elements not supported in v20 ABI. Because
> > rte_cryptodev_info_get is called by other API functions,
> > rte_cryptodev_sym_capability_get function is versioned the same way.
> >
> > Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
> > ---
> > v2:
> > - changed version numbers of symbols to 20.0.2
> > v3:
> > - added v2/v3 informations
> > - changed version numbers of symbols to 21
> > v4:
> > - fixed clang build by movind binding default symbol
> > - implemented mailing list comments
> > - added abidiff tool suppression entries
> > v5:
> > - fixed meson build
> >
> >  devtools/libabigail.abignore                   |   8 ++
> >  lib/librte_cryptodev/meson.build               |   1 +
> >  lib/librte_cryptodev/rte_cryptodev.c           | 147
> ++++++++++++++++++++++++-
> >  lib/librte_cryptodev/rte_cryptodev.h           |  34 +++++-
> >  lib/librte_cryptodev/rte_cryptodev_version.map |   7 ++
> >  5 files changed, 191 insertions(+), 6 deletions(-)
> >
> [SNIP]
> 
> Acked-by: Ray Kinsella <mdr@ashroe.eu>

^ permalink raw reply	[relevance 4%]

* [dpdk-dev] [PATCH v6 00/10] NXP DPAAx fixes and enhancement
  @ 2020-05-08 13:02  3% ` Hemant Agrawal
  0 siblings, 0 replies; 200+ results
From: Hemant Agrawal @ 2020-05-08 13:02 UTC (permalink / raw)
  To: dev, ferruh.yigit

v6: missed one patch
v5: split the default param patch and enhance commit details
v4: address the review comments
v3: Limiting the patches to avoid ABI breakage.

Apeksha Gupta (1):
  bus/fslmc: fix dereferencing null pointer

Hemant Agrawal (4):
  net/dpaa2: add default values for Rx params in info
  net/dpaa2: reduce prints in queue count functions
  bus/fslmc: fix the size of qman fq desc
  net/dpaa2: add the support for additional link speeds

Jun Yang (1):
  net/dpaa2: fix cong group id for multiple tcs

Nipun Gupta (3):
  net/dpaa2: do not prefetch annotaion for physical mode
  drivers: dpaa2 enhance portal alloc failure log
  net/dpaa2: support UDP dst port based muxing

Rohit Raj (1):
  net/dpaa2: fix 10G port negotiation issue

 doc/guides/nics/features/dpaa2.ini          |  2 +-
 drivers/bus/fslmc/portal/dpaa2_hw_pvt.h     |  6 +--
 drivers/bus/fslmc/qbman/qbman_debug.c       |  9 ++--
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c |  8 ++-
 drivers/event/dpaa2/dpaa2_eventdev.c        |  8 ++-
 drivers/mempool/dpaa2/dpaa2_hw_mempool.c    | 12 +++--
 drivers/net/dpaa/dpaa_ethdev.c              |  4 ++
 drivers/net/dpaa/dpaa_ethdev.h              |  1 +
 drivers/net/dpaa2/dpaa2_ethdev.c            | 32 ++++++++----
 drivers/net/dpaa2/dpaa2_ethdev.h            |  2 +
 drivers/net/dpaa2/dpaa2_mux.c               | 24 ++++++++-
 drivers/net/dpaa2/dpaa2_rxtx.c              | 56 ++++++++++++++-------
 drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c       |  8 ++-
 drivers/raw/dpaa2_qdma/dpaa2_qdma.c         | 12 +++--
 14 files changed, 135 insertions(+), 49 deletions(-)

-- 
2.17.1


^ permalink raw reply	[relevance 3%]

Results 5801-6000 of ~18000   |  | reverse | sort options + mbox downloads above
-- links below jump to the message on this page --
2020-01-29 16:43     [dpdk-dev] [RFC v2] meter: fix ABI break due to experimental tag removal Ferruh Yigit
2020-05-13 12:11     ` [dpdk-dev] [PATCH] meter: provide experimental alias of API for old apps Ferruh Yigit
2020-05-13 16:30  4%   ` Thomas Monjalon
2020-05-13 17:37  0%     ` Ferruh Yigit
2020-05-13 18:05       ` [dpdk-dev] [PATCH v2] " Ferruh Yigit
2020-05-14  8:44  4%     ` Ray Kinsella
2020-05-14 11:53  0%       ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2020-05-14 11:52  4%   ` [dpdk-dev] [PATCH v3] " Ferruh Yigit
2020-05-14 15:32  0%     ` David Marchand
2020-05-14 15:56  0%       ` Ray Kinsella
2020-05-14 16:07  0%       ` Ferruh Yigit
2020-05-14 16:11  4%   ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
2020-05-15 14:36 12%     ` [dpdk-dev] [PATCH v5] abi: " Ray Kinsella
2020-05-15 15:01 12%     ` [dpdk-dev] [PATCH v6] " Ray Kinsella
2020-05-16 11:53  4%       ` Neil Horman
2020-05-18 17:18  4%         ` Thomas Monjalon
2020-05-18 17:34  4%           ` Ferruh Yigit
2020-05-18 17:51  4%             ` Thomas Monjalon
2020-05-18 18:32  4%               ` Ferruh Yigit
2020-05-19 14:13  4%                 ` Ray Kinsella
2020-05-19 14:14  4%           ` Ray Kinsella
2020-05-17 19:52  0%     ` [dpdk-dev] [PATCH v4] meter: " Dumitrescu, Cristian
2020-05-18  6:29  4%       ` Ray Kinsella
2020-05-18  9:22  4%         ` Thomas Monjalon
2020-05-18  9:30  4%           ` Ray Kinsella
2020-05-18 10:46  3%             ` Thomas Monjalon
2020-05-18 11:18  0%               ` Dumitrescu, Cristian
2020-05-18 11:49  0%                 ` Ray Kinsella
2020-05-18 11:48  4%               ` Ray Kinsella
2020-05-18 12:13  3%                 ` Thomas Monjalon
2020-05-18 13:06  0%                   ` Ray Kinsella
2020-05-18 18:30  2%   ` [dpdk-dev] [PATCH v5] " Ferruh Yigit
2020-05-19 12:16 10%   ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
2020-05-19 13:26  0%     ` Dumitrescu, Cristian
2020-05-19 14:24  0%       ` Thomas Monjalon
2020-05-19 14:22  0%     ` Ray Kinsella
2020-02-05 15:17     [dpdk-dev] [PATCH] doc: alias to experimental tag for stable apis Ray Kinsella
2020-05-14 13:38  9% ` [dpdk-dev] [PATCH v5] " Ray Kinsella
2020-02-17 15:38     [dpdk-dev] [PATCH] doc: plan splitting the ethdev ops struct Ferruh Yigit
2020-02-18  5:07     ` Jerin Jacob
2020-05-26 13:01  0%   ` Thomas Monjalon
2020-02-25 12:44     [dpdk-dev] [PATCH v2] " Ferruh Yigit
2020-03-04  9:57     ` [dpdk-dev] [PATCH v3] " Ferruh Yigit
2020-05-24 23:18  0%   ` Thomas Monjalon
2020-05-25  9:11  0%     ` Andrew Rybchenko
2020-05-26 13:55  0%       ` Thomas Monjalon
2020-05-25 10:24  0%   ` David Marchand
2020-03-03 16:27     [dpdk-dev] [PATCH v1] mbuf: replace zero-length marker with unnamed union Gavin Hu
2020-03-07 15:56     ` [dpdk-dev] [PATCH v2] " Gavin Hu
2020-03-09  8:55       ` Ferruh Yigit
2020-03-09  9:45         ` Gavin Hu
2020-03-09 11:29           ` Ferruh Yigit
2020-03-09 13:30             ` Morten Brørup
2020-03-11  7:50               ` Gavin Hu
2020-03-11  9:04                 ` Morten Brørup
2020-03-11 12:07                   ` Bruce Richardson
2020-03-13  9:22                     ` Gavin Hu
2020-04-07 17:13                       ` Kevin Traynor
2020-04-08 15:04                         ` Gavin Hu
2020-04-08 15:22                           ` [dpdk-dev] [dpdk-stable] " David Marchand
2020-05-14 13:24  0%                         ` Kevin Traynor
2020-03-05  4:33     [dpdk-dev] [RFC v1 1/1] vfio: set vf token and gain vf device access vattunuru
2020-05-28  1:22  4% ` [dpdk-dev] [PATCH v14 0/2] support for VFIO-PCI VF token interface Haiyue Wang
2020-03-17  1:17     [dpdk-dev] [PATCH v3 00/12] generic rte atomic APIs deprecate proposal Phil Yang
2020-05-12  8:03     ` [dpdk-dev] [PATCH v4 0/4] " Phil Yang
2020-05-12  8:03       ` [dpdk-dev] [PATCH v4 4/4] eal/atomic: add wrapper for c11 atomics Phil Yang
2020-05-12 18:20         ` Stephen Hemminger
2020-05-12 19:23           ` Honnappa Nagarahalli
2020-05-13  8:57  3%         ` Morten Brørup
2020-05-13 15:30  0%           ` Honnappa Nagarahalli
2020-05-13 19:04  0%           ` Mattias Rönnblom
2020-05-13 19:40  0%             ` Honnappa Nagarahalli
2020-05-13 20:17  0%               ` Mattias Rönnblom
2020-05-14  8:34  0%                 ` Morten Brørup
2020-05-14 20:16  0%                   ` Mattias Rönnblom
2020-05-14 21:00  0%                     ` Honnappa Nagarahalli
2020-04-10 14:27     [dpdk-dev] [PATCH v3 0/4] add AESNI-MB rawdev for multi-function processing David Coyle
2020-04-14 14:44     ` Thomas Monjalon
2020-04-15 22:19       ` Doherty, Declan
2020-04-15 22:33         ` Thomas Monjalon
2020-04-21 16:46           ` Doherty, Declan
2020-04-21 17:23             ` Coyle, David
2020-04-22 10:51               ` Akhil Goyal
2020-04-22 13:17                 ` Coyle, David
2020-04-22 13:44                   ` Akhil Goyal
2020-05-01 13:18                     ` Zhang, Roy Fan
2020-05-12 17:32  0%                   ` Coyle, David
2020-04-16 14:54     [dpdk-dev] [PATCHv3] Remove validate-abi.sh from tree Neil Horman
2020-05-24 20:34 39% ` [dpdk-dev] [PATCH v4] devtools: remove old ABI validation script Thomas Monjalon
2020-04-21  2:04     [dpdk-dev] [PATCH] devtools: remove useless files from ABI reference Thomas Monjalon
2020-05-24 17:43 13% ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2020-04-23 10:12     [dpdk-dev] [PATCH v1] abi: document reasons behind the three part versioning Ray Kinsella
2020-05-05  8:56     ` [dpdk-dev] [PATCH v2] " Ray Kinsella
2020-05-18 16:20  4%   ` Thomas Monjalon
2020-04-28 23:50     [dpdk-dev] [PATCH v4 0/8] Windows basic memory management Dmitry Kozlyuk
2020-05-25  0:37     ` [dpdk-dev] [PATCH v5 " Dmitry Kozlyuk
2020-05-25  0:37  4%   ` [dpdk-dev] [PATCH v5 01/11] eal: replace rte_page_sizes with a set of constants Dmitry Kozlyuk
2020-04-29 18:05     [dpdk-dev] [RFC] hash: unify crc32 API header for x86 and ARM pbhagavatula
2020-05-06 22:02     ` Wang, Yipeng1
2020-05-10 22:49  0%   ` Pavan Nikhilesh Bhagavatula
2020-05-08 12:55     ` Ananyev, Konstantin
2020-05-10 22:53  0%   ` Pavan Nikhilesh Bhagavatula
2020-05-11  9:46  0%     ` Ananyev, Konstantin
2020-05-11 10:23  0%       ` Pavan Nikhilesh Bhagavatula
2020-05-11 10:27  0%         ` Ananyev, Konstantin
2020-05-11 10:57  0%           ` Pavan Nikhilesh Bhagavatula
2020-05-11 12:10  0%             ` Ananyev, Konstantin
2020-05-11 12:32  0%               ` Pavan Nikhilesh Bhagavatula
2020-05-12 20:40  3% ` [dpdk-dev] [RFC v2] " pbhagavatula
2020-05-13  3:04  3%   ` Ruifeng Wang
2020-05-13 13:22  0%     ` Ananyev, Konstantin
2020-04-30  5:46     [dpdk-dev] [PATCH v1 1/2] devtools: add internal ABI version check Haiyue Wang
2020-04-30  5:46     ` [dpdk-dev] [PATCH v1 2/2] devtools: updating internal symbols ABI version Haiyue Wang
2020-05-19 15:10  9%   ` David Marchand
2020-05-19 15:35  4% ` [dpdk-dev] [PATCH v1 1/2] devtools: add internal ABI version check David Marchand
2020-05-19 16:54  4%   ` David Marchand
2020-05-01 17:16     [dpdk-dev] [PATCH] doc: deprication notice to mark tm spec as experimental Nithin Dabilpuram
2020-05-05  8:07     ` [dpdk-dev] [PATCH v2] " Nithin Dabilpuram
2020-05-05  8:55       ` Dumitrescu, Cristian
2020-05-21 10:49  0%     ` Jerin Jacob
2020-05-24 20:58  0%       ` Nithin Kumar D
2020-05-24 23:33  0%       ` Thomas Monjalon
2020-05-05 14:08     [dpdk-dev] [PATCH 1/7] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-12 14:00  3% ` [dpdk-dev] [PATCH v2 01/12] " Hemant Agrawal
2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 02/12] mempool/dpaa2: " Hemant Agrawal
2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 03/12] bus/fslmc: " Hemant Agrawal
2020-05-12 14:00  1%   ` [dpdk-dev] [PATCH v2 06/12] bus/dpaa: " Hemant Agrawal
2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 07/12] crypto: " Hemant Agrawal
2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 08/12] net/dpaa2: " Hemant Agrawal
2020-05-12 14:00  3%   ` [dpdk-dev] [PATCH v2 09/12] net/dpaa: " Hemant Agrawal
2020-05-13 12:44  4%   ` [dpdk-dev] [PATCH v2 01/12] common/dpaax: " Thomas Monjalon
2020-05-13 13:27       ` [dpdk-dev] [PATCH v3 00/12] NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 01/12] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-13 14:06  0%       ` Hemant Agrawal (OSS)
2020-05-14  7:13  3%         ` Ray Kinsella
2020-05-14  9:53  0%           ` Hemant Agrawal (OSS)
2020-05-14 10:09                 ` Ray Kinsella
2020-05-14 11:06                   ` Hemant Agrawal (OSS)
2020-05-14 11:10                     ` Ray Kinsella
2020-05-14 11:19                       ` David Marchand
2020-05-14 11:23                         ` Hemant Agrawal (OSS)
2020-05-14 12:38                           ` Hemant Agrawal (OSS)
2020-05-14 13:31                             ` David Marchand
2020-05-14 16:28  3%                           ` David Marchand
2020-05-14 17:15  0%                             ` Hemant Agrawal (OSS)
2020-05-15  9:26  0%                               ` Thomas Monjalon
2020-05-15 11:19  5%                                 ` Thomas Monjalon
2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 02/12] mempool/dpaa2: " Hemant Agrawal
2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 03/12] bus/fslmc: " Hemant Agrawal
2020-05-13 13:27  1%     ` [dpdk-dev] [PATCH v3 04/12] bus/dpaa: " Hemant Agrawal
2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 05/12] crypto: " Hemant Agrawal
2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 06/12] net/dpaa2: " Hemant Agrawal
2020-05-13 13:27  3%     ` [dpdk-dev] [PATCH v3 07/12] net/dpaa: " Hemant Agrawal
2020-05-14 13:25         ` [dpdk-dev] [PATCH v4 00/13]NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 02/13] bus/fslmc: " Hemant Agrawal
2020-05-14 13:25  1%       ` [dpdk-dev] [PATCH v4 03/13] bus/dpaa: " Hemant Agrawal
2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 04/13] crypto: " Hemant Agrawal
2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 05/13] mempool/dpaa2: " Hemant Agrawal
2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 06/13] net/dpaa: " Hemant Agrawal
2020-05-14 13:25  3%       ` [dpdk-dev] [PATCH v4 07/13] net/dpaa2: " Hemant Agrawal
2020-05-14 14:24           ` [dpdk-dev] [PATCH v5 00/13] NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 02/13] bus/fslmc: " Hemant Agrawal
2020-05-14 14:24  1%         ` [dpdk-dev] [PATCH v5 03/13] bus/dpaa: " Hemant Agrawal
2020-05-14 14:24  3%         ` [dpdk-dev] [PATCH v5 04/13] crypto: " Hemant Agrawal
2020-05-14 14:29           ` [dpdk-dev] [PATCH v6 00/13] NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 02/13] bus/fslmc: " Hemant Agrawal
2020-05-14 14:29  1%         ` [dpdk-dev] [PATCH v6 03/13] bus/dpaa: " Hemant Agrawal
2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 04/13] crypto: " Hemant Agrawal
2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 05/13] mempool/dpaa2: " Hemant Agrawal
2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 06/13] net/dpaa: " Hemant Agrawal
2020-05-14 14:29  3%         ` [dpdk-dev] [PATCH v6 07/13] net/dpaa2: " Hemant Agrawal
2020-05-15  5:08             ` [dpdk-dev] [PATCH v7 00/13] NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 02/13] bus/fslmc: " Hemant Agrawal
2020-05-15  5:08  1%           ` [dpdk-dev] [PATCH v7 03/13] bus/dpaa: " Hemant Agrawal
2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 04/13] mempool/dpaa2: " Hemant Agrawal
2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 05/13] net/dpaa: " Hemant Agrawal
2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 06/13] net/dpaa2: " Hemant Agrawal
2020-05-15  5:08  3%           ` [dpdk-dev] [PATCH v7 07/13] crypto: " Hemant Agrawal
2020-05-15  9:47           ` [dpdk-dev] [PATCH v8 00/13] NXP DPAAx: move internal symbols to INTERNAL Hemant Agrawal
2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 01/13] common/dpaax: move internal symbols into INTERNAL section Hemant Agrawal
2020-05-19  6:43  0%           ` Hemant Agrawal
2020-05-19  6:44  0%             ` Ray Kinsella
2020-05-19  9:51  0%           ` Ray Kinsella
2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 02/13] bus/fslmc: " Hemant Agrawal
2020-05-19 10:00  0%           ` Ray Kinsella
2020-05-15  9:47  1%         ` [dpdk-dev] [PATCH v8 03/13] bus/dpaa: " Hemant Agrawal
2020-05-19 10:56  0%           ` Ray Kinsella
2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 04/13] mempool/dpaa2: " Hemant Agrawal
2020-05-19 11:03  0%           ` Ray Kinsella
2020-05-19 11:16  0%             ` Hemant Agrawal
2020-05-19 11:30  0%               ` Ray Kinsella
2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 05/13] net/dpaa: " Hemant Agrawal
2020-05-19 11:14  0%           ` Ray Kinsella
2020-05-19 11:39  0%             ` Hemant Agrawal
2020-05-19 11:41  0%               ` Ray Kinsella
2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 06/13] net/dpaa2: " Hemant Agrawal
2020-05-19 11:15  0%           ` Ray Kinsella
2020-05-15  9:47  3%         ` [dpdk-dev] [PATCH v8 07/13] crypto: " Hemant Agrawal
2020-05-19 11:17  0%           ` Ray Kinsella
2020-05-05 17:49     [dpdk-dev] [PATCH v1] doc: fix references to bind_default_symbol Ray Kinsella
2020-05-06 15:41     ` [dpdk-dev] [PATCH v3] " Ray Kinsella
2020-05-18 16:54  3%   ` Thomas Monjalon
2020-05-07  7:37     [dpdk-dev] [PATCH v2 1/2] common/mlx5: add rte internal tag and avoid comparison Ophir Munk
2020-05-07 10:23     ` [dpdk-dev] [PATCH v3 " Thomas Monjalon
2020-05-07 11:41       ` Ophir Munk
2020-05-07 20:08         ` Thomas Monjalon
2020-05-10  8:14  0%       ` Ophir Munk
2020-05-07  8:56     Ophir Munk
2020-05-07 11:31     ` [dpdk-dev] [PATCH v4 " Ophir Munk
2020-05-12 10:52  0%   ` Raslan Darawsheh
2020-05-07 10:46     [dpdk-dev] [PATCH v4 0/9] NXP DPAAx fixes and enhancements Hemant Agrawal
2020-05-08 13:02  3% ` [dpdk-dev] [PATCH v6 00/10] NXP DPAAx fixes and enhancement Hemant Agrawal
2020-05-07 10:57     [dpdk-dev] [PATCH v5 1/2] cryptodev: add chacha20-poly1305 aead algorithm Arek Kusztal
2020-05-07 10:57     ` [dpdk-dev] [PATCH v5 2/2] cryptodev: version cryptodev info get function Arek Kusztal
2020-05-07 11:05       ` Ray Kinsella
2020-05-09 21:11  4%     ` Akhil Goyal
2020-05-11  6:12  0%       ` Ray Kinsella
2020-05-11  7:47  5%       ` Ray Kinsella
2020-05-11  8:18  4%         ` Akhil Goyal
2020-05-11 11:38  4%           ` Akhil Goyal
2020-05-11 16:09  5%           ` Ray Kinsella
2020-05-11 10:00  3% [dpdk-dev] [PATCH 1/2] common/octeontx2: move internal symbols to INTERNAL section pbhagavatula
2020-05-11 10:00  3% ` [dpdk-dev] [PATCH 2/2] mempool/octeontx2: " pbhagavatula
2020-05-11 14:45  0% ` [dpdk-dev] [PATCH 1/2] common/octeontx2: " Thomas Monjalon
2020-05-13  1:04  3% ` [dpdk-dev] [PATCH v2 " pbhagavatula
2020-05-13  1:04  3%   ` [dpdk-dev] [PATCH v2 2/2] mempool/octeontx2: " pbhagavatula
2020-05-13  9:55  3%   ` [dpdk-dev] [PATCH v3 1/2] common/octeontx2: " pbhagavatula
2020-05-13  9:55  3%     ` [dpdk-dev] [PATCH v3 2/2] mempool/octeontx2: " pbhagavatula
2020-05-14  7:02  0%   ` [dpdk-dev] [PATCH v2 1/2] common/octeontx2: " Ray Kinsella
2020-05-12  2:22     [dpdk-dev] [dpdk-announce] release candidate 20.05-rc2 Thomas Monjalon
2020-05-12 16:41  7% ` [dpdk-dev] Release candidate 20.05-rc2 ABI Ray Kinsella
2020-05-12 20:40  4%   ` Honnappa Nagarahalli
2020-05-13  8:24  3% [dpdk-dev] [Bug 471] failing to build test from app/test bugzilla
2020-05-13 10:42  4% [dpdk-dev] [PATCH v1] doc: remove deprecation notice about old devargs changes Gaetan Rivet
2020-05-13 10:43 36% [dpdk-dev] [PATCH v1] doc: fix typos and errors in abi policy doc Gaetan Rivet
2020-05-14  6:40  4% ` Ray Kinsella
2020-05-19  9:46  4%   ` Thomas Monjalon
2020-05-14  9:00  3% [dpdk-dev] DPDK-20.05 RC2 day3 quick report Peng, Yuan
2020-05-14 11:13  4% [dpdk-dev] DPDK Release Status Meeting 14/05/2020 Ferruh Yigit
2020-05-18 10:39  3% [dpdk-dev] DPDK 20.05 RC2 Test Report Peng, Yuan
2020-05-19  7:36  3% [dpdk-dev] [PATCH] doc: fix doc build failure Raslan Darawsheh
2020-05-19  7:39  0% ` Ray Kinsella
2020-05-19  8:03  0% ` David Marchand
2020-05-20 13:58  3% [dpdk-dev] [PATCH 0/4] fix build with GCC 10 Thomas Monjalon
2020-05-20 13:58 14% ` [dpdk-dev] [PATCH 4/4] devtools: allow warnings in ABI reference build Thomas Monjalon
2020-05-20 14:52  0% ` [dpdk-dev] [PATCH 0/4] fix build with GCC 10 David Marchand
2020-05-20 16:45  0% ` Kevin Traynor
2020-05-21 13:39  0%   ` Thomas Monjalon
2020-05-21 11:20  3% [dpdk-dev] DPDK Release Status Meeting 21/05/2020 Ferruh Yigit
2020-05-21 11:24  0% ` Ferruh Yigit
2020-05-21 11:24  3% [dpdk-dev] DPDK-20.05 RC3 day2 quick report Peng, Yuan
2020-05-22  6:58  4% [dpdk-dev] [PATCH 0/3] Experimental/internal libraries cleanup David Marchand
2020-05-22  6:58 17% ` [dpdk-dev] [PATCH 1/3] build: remove special versioning for non stable libraries David Marchand
2020-05-22  6:58  3% ` [dpdk-dev] [PATCH 2/3] drivers: drop workaround for internal libraries David Marchand
2020-05-22  6:58     ` [dpdk-dev] [PATCH 3/3] lib: remind experimental status in library headers David Marchand
2020-05-22 14:15       ` Honnappa Nagarahalli
2020-05-28  6:53  5%     ` David Marchand
2020-05-22 13:23     [dpdk-dev] [PATCH 20.08 0/9] adding support for python 3 only Louise Kilheeney
2020-05-22 13:23  4% ` [dpdk-dev] [PATCH 20.08 8/9] devtools: support python3 only Louise Kilheeney
2020-05-27  6:15  0%   ` Ray Kinsella
2020-05-22 14:06  4% [dpdk-dev] [PATCH v1] doc: update release notes for 20.05 John McNamara
2020-05-22 15:17  0% ` Kevin Traynor
2020-05-25  4:16  3% [dpdk-dev] DPDK-20.05 RC3 quick report Peng, Yuan
2020-05-25 19:11  4% [dpdk-dev] [PATCH v2] doc: update release notes for 20.05 John McNamara
2020-05-26  8:33  3% [dpdk-dev] DPDK-20.05 RC4 quick report Peng, Yuan
2020-05-26 19:53  3% [dpdk-dev] [dpdk-announce] DPDK 20.05 released Thomas Monjalon
2020-05-27  8:41  7% [dpdk-dev] [PATCH] version: 20.08-rc0 David Marchand
2020-05-27 10:41  7% [dpdk-dev] ABI versioning in Windows Fady Bader
2020-05-27 12:50  7% ` Thomas Monjalon
2020-05-27 14:32  4%   ` Ray Kinsella
2020-05-27 20:35  7%   ` Neil Horman
2020-05-27 21:27  4%     ` Thomas Monjalon
2020-05-27 21:43  4%       ` Thomas Monjalon
2020-05-28  0:28  4%         ` Neil Horman
2020-05-28  0:21  4%       ` Neil Horman
2020-05-28  1:04  3% [dpdk-dev] [PATCH] stack: remove experimental tag from API Gage Eads
2020-05-28  5:46  3% ` Ray Kinsella

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).