dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/9] experimental tags fixes
@ 2019-06-27 11:33 David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol David Marchand
                   ` (10 more replies)
  0 siblings, 11 replies; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas

Here is a new series on __rte_experimental tags.

Following the build error reported by Aaron [1], I noticed that some
experimental functions could go unnoticed because of a gcc peculiarity.

To catch those, I went and added a new check on the object files to
ensure that any experimental api flagged in the map files is really
exported as such.

Then went with my previous idea of only adding the tags on the functions
prototypes and enforcing it (a new check in checkpatches.sh).
And finally enforcing that the __rte_experimental tag is always the first
part of a function prototype which seems to work with both gcc and clang.

Comments and reviews highly welcome :-).

[1]: http://mails.dpdk.org/archives/dev/2019-June/135365.html

-- 
David Marchand

David Marchand (9):
  eal: hide internal hotplug symbol
  devargs: remove incorrect experimental tags
  vfio: remove incorrect experimental tag
  raw/dpaa2_qdma: remove incorrect experimental tag
  buildtools: detect discrepancies for experimental symbols
  net/atlantic: add missing experimental api tags
  mem: remove incorrect experimental tag on static symbol
  remove experimental tags from all symbol definitions
  enforce __rte_experimental at the start of symbol declarations

 buildtools/check-experimental-syms.sh              | 29 ++++++---
 buildtools/map-list-symbol.sh                      | 70 ++++++++++++++++++++++
 devtools/checkpatches.sh                           | 37 ++++++++++++
 doc/guides/contributing/versioning.rst             |  6 +-
 drivers/net/atlantic/rte_pmd_atlantic.c            | 12 ++--
 drivers/net/atlantic/rte_pmd_atlantic.h            | 24 ++++++++
 drivers/net/dpaa2/dpaa2_ethdev.c                   |  2 +-
 drivers/net/ixgbe/rte_pmd_ixgbe.c                  | 10 ++--
 drivers/net/ixgbe/rte_pmd_ixgbe.h                  | 10 ++--
 drivers/net/softnic/rte_eth_softnic.h              |  2 +-
 drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h        |  2 +-
 lib/librte_bbdev/rte_bbdev.c                       | 52 ++++++++--------
 lib/librte_bbdev/rte_bbdev.h                       | 48 +++++++--------
 lib/librte_bbdev/rte_bbdev_op.h                    | 12 ++--
 lib/librte_bbdev/rte_bbdev_pmd.h                   |  8 +--
 lib/librte_bpf/bpf.c                               |  4 +-
 lib/librte_bpf/bpf_exec.c                          |  4 +-
 lib/librte_bpf/bpf_load.c                          |  4 +-
 lib/librte_bpf/bpf_load_elf.c                      |  2 +-
 lib/librte_bpf/bpf_pkt.c                           |  8 +--
 lib/librte_bpf/rte_bpf.h                           | 12 ++--
 lib/librte_bpf/rte_bpf_ethdev.h                    |  8 +--
 lib/librte_compressdev/rte_comp.c                  | 12 ++--
 lib/librte_compressdev/rte_comp.h                  | 12 ++--
 lib/librte_compressdev/rte_compressdev.c           | 50 ++++++++--------
 lib/librte_compressdev/rte_compressdev.h           | 44 +++++++-------
 lib/librte_compressdev/rte_compressdev_pmd.c       |  6 +-
 lib/librte_compressdev/rte_compressdev_pmd.h       | 12 ++--
 lib/librte_cryptodev/rte_cryptodev.c               | 28 ++++-----
 lib/librte_cryptodev/rte_cryptodev.h               | 28 ++++-----
 lib/librte_eal/common/eal_common_class.c           |  6 +-
 lib/librte_eal/common/eal_common_dev.c             |  8 +--
 lib/librte_eal/common/eal_common_fbarray.c         | 52 ++++++++--------
 lib/librte_eal/common/eal_common_log.c             |  2 +-
 lib/librte_eal/common/eal_common_memory.c          | 50 ++++++++--------
 lib/librte_eal/common/eal_common_proc.c            | 12 ++--
 lib/librte_eal/common/eal_common_timer.c           |  2 +-
 lib/librte_eal/common/hotplug_mp.c                 |  2 +-
 lib/librte_eal/common/hotplug_mp.h                 |  9 +++
 .../common/include/arch/x86/rte_atomic_64.h        |  2 +-
 lib/librte_eal/common/include/generic/rte_atomic.h |  2 +-
 lib/librte_eal/common/include/generic/rte_cycles.h |  2 +-
 lib/librte_eal/common/include/generic/rte_rwlock.h |  4 +-
 .../common/include/generic/rte_ticketlock.h        | 18 +++---
 lib/librte_eal/common/include/rte_dev.h            | 18 +++---
 lib/librte_eal/common/include/rte_devargs.h        |  2 -
 lib/librte_eal/common/include/rte_eal.h            | 21 ++-----
 lib/librte_eal/common/include/rte_fbarray.h        | 52 ++++++++--------
 lib/librte_eal/common/include/rte_interrupts.h     |  2 +-
 lib/librte_eal/common/include/rte_malloc.h         | 20 +++----
 lib/librte_eal/common/include/rte_memory.h         | 42 ++++++-------
 lib/librte_eal/common/include/rte_service.h        |  6 +-
 lib/librte_eal/common/rte_malloc.c                 |  2 +-
 lib/librte_eal/common/rte_option.c                 |  1 -
 lib/librte_eal/common/rte_service.c                |  6 +-
 lib/librte_eal/freebsd/eal/eal.c                   |  2 +-
 lib/librte_eal/freebsd/eal/eal_dev.c               |  8 +--
 lib/librte_eal/freebsd/eal/eal_interrupts.c        |  2 +-
 lib/librte_eal/linux/eal/eal.c                     |  3 +-
 lib/librte_eal/linux/eal/eal_dev.c                 |  8 +--
 lib/librte_eal/linux/eal/eal_interrupts.c          |  2 +-
 lib/librte_eal/linux/eal/eal_vfio.c                |  2 +-
 lib/librte_ethdev/rte_ethdev.c                     | 28 ++++-----
 lib/librte_ethdev/rte_ethdev.h                     | 24 ++++----
 lib/librte_ethdev/rte_ethdev_driver.h              | 10 ++--
 lib/librte_ethdev/rte_flow.c                       |  2 +-
 lib/librte_ethdev/rte_flow_driver.h                |  2 +-
 lib/librte_ethdev/rte_mtr.c                        | 24 ++++----
 lib/librte_ethdev/rte_mtr.h                        | 24 ++++----
 lib/librte_eventdev/rte_event_eth_rx_adapter.c     |  4 +-
 lib/librte_eventdev/rte_event_eth_rx_adapter.h     |  4 +-
 lib/librte_flow_classify/rte_flow_classify.c       | 14 ++---
 lib/librte_flow_classify/rte_flow_classify.h       | 14 ++---
 lib/librte_hash/rte_cuckoo_hash.c                  |  2 +-
 lib/librte_hash/rte_hash.h                         |  2 +-
 lib/librte_ip_frag/rte_ip_frag.h                   |  2 +-
 lib/librte_ip_frag/rte_ip_frag_common.c            |  2 +-
 lib/librte_ipsec/rte_ipsec.h                       |  6 +-
 lib/librte_ipsec/rte_ipsec_group.h                 |  4 +-
 lib/librte_ipsec/rte_ipsec_sa.h                    |  8 +--
 lib/librte_ipsec/sa.c                              |  8 +--
 lib/librte_ipsec/ses.c                             |  2 +-
 lib/librte_kni/rte_kni.c                           |  2 +-
 lib/librte_kni/rte_kni.h                           |  2 +-
 lib/librte_kvargs/rte_kvargs.c                     |  2 -
 lib/librte_mbuf/rte_mbuf.c                         |  1 -
 lib/librte_mbuf/rte_mbuf.h                         | 15 +++--
 lib/librte_meter/rte_meter.c                       |  4 +-
 lib/librte_meter/rte_meter.h                       | 12 ++--
 lib/librte_net/rte_arp.c                           |  2 +-
 lib/librte_net/rte_arp.h                           |  2 +-
 lib/librte_net/rte_net.c                           |  2 +-
 lib/librte_net/rte_net.h                           |  2 +-
 lib/librte_pipeline/rte_port_in_action.h           | 16 ++---
 lib/librte_pipeline/rte_table_action.h             | 32 +++++-----
 lib/librte_power/rte_power_empty_poll.c            | 14 ++---
 lib/librte_power/rte_power_empty_poll.h            | 14 ++---
 lib/librte_rcu/rte_rcu_qsbr.c                      | 12 ++--
 lib/librte_rcu/rte_rcu_qsbr.h                      | 26 ++++----
 lib/librte_sched/rte_sched.c                       |  2 +-
 lib/librte_sched/rte_sched.h                       |  2 +-
 lib/librte_security/rte_security.c                 |  6 +-
 lib/librte_security/rte_security.h                 |  6 +-
 lib/librte_stack/rte_stack.h                       | 14 ++---
 lib/librte_stack/rte_stack_lf.h                    |  4 +-
 lib/librte_stack/rte_stack_std.h                   |  6 +-
 lib/librte_table/rte_table_hash_func.h             | 18 +++---
 lib/librte_telemetry/rte_telemetry.c               |  6 +-
 lib/librte_telemetry/rte_telemetry.h               |  6 +-
 lib/librte_telemetry/rte_telemetry_parser.c        |  2 +-
 lib/librte_telemetry/rte_telemetry_parser.h        |  2 +-
 lib/librte_timer/rte_timer.c                       | 16 ++---
 lib/librte_timer/rte_timer.h                       | 16 ++---
 lib/librte_vhost/rte_vdpa.h                        | 14 ++---
 lib/librte_vhost/rte_vhost.h                       | 22 +++----
 lib/librte_vhost/rte_vhost_crypto.h                | 10 ++--
 lib/librte_vhost/vdpa.c                            |  2 +-
 lib/librte_vhost/vhost_crypto.c                    | 10 ++--
 118 files changed, 791 insertions(+), 647 deletions(-)
 create mode 100755 buildtools/map-list-symbol.sh

-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-28 16:25   ` Stephen Hemminger
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags David Marchand
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable

This api was experimental and not properly marked in the map file.
But looking more closely, this is just an internal wrapper for EAL init.
Hide it in the hotplug code.

Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/librte_eal/common/hotplug_mp.c      | 2 +-
 lib/librte_eal/common/hotplug_mp.h      | 9 +++++++++
 lib/librte_eal/common/include/rte_eal.h | 9 ---------
 lib/librte_eal/linux/eal/eal.c          | 3 ++-
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/lib/librte_eal/common/hotplug_mp.c b/lib/librte_eal/common/hotplug_mp.c
index 4f316ba..ee79190 100644
--- a/lib/librte_eal/common/hotplug_mp.c
+++ b/lib/librte_eal/common/hotplug_mp.c
@@ -438,7 +438,7 @@ int eal_dev_hotplug_request_to_secondary(struct eal_dev_mp_req *req)
 	return 0;
 }
 
-int rte_mp_dev_hotplug_init(void)
+int eal_mp_dev_hotplug_init(void)
 {
 	int ret;
 
diff --git a/lib/librte_eal/common/hotplug_mp.h b/lib/librte_eal/common/hotplug_mp.h
index 597fde3..8fcf9b5 100644
--- a/lib/librte_eal/common/hotplug_mp.h
+++ b/lib/librte_eal/common/hotplug_mp.h
@@ -29,6 +29,15 @@ struct eal_dev_mp_req {
 };
 
 /**
+ * Register all mp action callbacks for hotplug.
+ *
+ * @return
+ *   0 on success, negative on error.
+ */
+int
+eal_mp_dev_hotplug_init(void);
+
+/**
  * This is a synchronous wrapper for secondary process send
  * request to primary process, this is invoked when an attach
  * or detach request is issued from primary process.
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index cf701e1..27808a3 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -409,15 +409,6 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer);
 
 /**
- * Register all mp action callbacks for hotplug.
- *
- * @return
- *   0 on success, negative on error.
- */
-int __rte_experimental
-rte_mp_dev_hotplug_init(void);
-
-/**
  * Usage function typedef used by the application usage function.
  *
  * Use this function typedef to define and call rte_set_application_usage_hook()
diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
index d96ed3a..ea7d09c 100644
--- a/lib/librte_eal/linux/eal/eal.c
+++ b/lib/librte_eal/linux/eal/eal.c
@@ -59,6 +59,7 @@
 #include "eal_hugepages.h"
 #include "eal_options.h"
 #include "eal_vfio.h"
+#include "hotplug_mp.h"
 
 #define MEMSIZE_IF_NO_HUGE_PAGE (64ULL * 1024ULL * 1024ULL)
 
@@ -1062,7 +1063,7 @@ static void rte_eal_init_alert(const char *msg)
 	}
 
 	/* register multi-process action callbacks for hotplug */
-	if (rte_mp_dev_hotplug_init() < 0) {
+	if (eal_mp_dev_hotplug_init() < 0) {
 		rte_eal_init_alert("failed to register mp callback for hotplug");
 		return -1;
 	}
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-28 16:23   ` Stephen Hemminger
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag David Marchand
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable

The incriminated commit promoted those symbols as stable but the
prototypes still have the tag.

Fixes: 73eca2f77f4c ("devargs: promote experimental API as stable")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/librte_eal/common/include/rte_devargs.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h
index 89d9432..882dfa0 100644
--- a/lib/librte_eal/common/include/rte_devargs.h
+++ b/lib/librte_eal/common/include/rte_devargs.h
@@ -151,7 +151,6 @@ struct rte_devargs {
  *   - 0 on success
  *   - Negative on error.
  */
-__rte_experimental
 int
 rte_devargs_insert(struct rte_devargs **da);
 
@@ -183,7 +182,6 @@ struct rte_devargs {
  *   <0 on error.
  *   >0 if the devargs was not within the user device list.
  */
-__rte_experimental
 int rte_devargs_remove(struct rte_devargs *devargs);
 
 /**
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-28 16:24   ` Stephen Hemminger
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 4/9] raw/dpaa2_qdma: " David Marchand
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable, Anatoly Burakov

The incriminated commit promoted this symbol as stable but the
definition still has the tag.

Fixes: 787ae736a3d9 ("vfio: remove experimental tag")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/librte_eal/linux/eal/eal_vfio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/linux/eal/eal_vfio.c b/lib/librte_eal/linux/eal/eal_vfio.c
index 6892a2c..feada64 100644
--- a/lib/librte_eal/linux/eal/eal_vfio.c
+++ b/lib/librte_eal/linux/eal/eal_vfio.c
@@ -1834,7 +1834,7 @@ struct spapr_walk_param {
 	return vfio_cfgs[i].vfio_container_fd;
 }
 
-int __rte_experimental
+int
 rte_vfio_container_destroy(int container_fd)
 {
 	struct vfio_config *vfio_cfg;
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 4/9] raw/dpaa2_qdma: remove incorrect experimental tag
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (2 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 5/9] buildtools: detect discrepancies for experimental symbols David Marchand
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable, Nipun Gupta

The incriminated commit promoted this symbol as stable but the
prototype still has the tag.

Fixes: fb1a20331d70 ("raw/dpaa2_qdma: remove experimental tag from APIs")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
index caf0293..a1f9050 100644
--- a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
+++ b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
@@ -286,7 +286,7 @@ struct rte_qdma_job {
  * @returns
  *   - A completed job or NULL if no job is there.
  */
-struct rte_qdma_job * __rte_experimental
+struct rte_qdma_job *
 rte_qdma_vq_dequeue(uint16_t vq_id);
 
 /**
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 5/9] buildtools: detect discrepancies for experimental symbols
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (3 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 4/9] raw/dpaa2_qdma: " David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 6/9] net/atlantic: add missing experimental api tags David Marchand
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas

When promoting those symbols as stable, there is no check to ensure that
the final result is consistent.

Add a little script to get the symbols per section from the library map
files.
Validate that all experimental symbols in object files are referenced by
library map files.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 buildtools/check-experimental-syms.sh | 29 +++++++++++----
 buildtools/map-list-symbol.sh         | 70 +++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+), 7 deletions(-)
 create mode 100755 buildtools/map-list-symbol.sh

diff --git a/buildtools/check-experimental-syms.sh b/buildtools/check-experimental-syms.sh
index 7d1f3a5..653756e 100755
--- a/buildtools/check-experimental-syms.sh
+++ b/buildtools/check-experimental-syms.sh
@@ -5,6 +5,8 @@
 MAPFILE=$1
 OBJFILE=$2
 
+LIST_SYMBOL=$RTE_SDK/buildtools/map-list-symbol.sh
+
 # added check for "make -C test/" usage
 if [ ! -e $MAPFILE ] || [ ! -f $OBJFILE ]
 then
@@ -16,12 +18,9 @@ then
 	exit 0
 fi
 
-for i in `awk 'BEGIN {found=0}
-		/.*EXPERIMENTAL.*/ {found=1}
-		/.*}.*;/ {found=0}
-		/.*;/ {if (found == 1) print $1}' $MAPFILE`
+ret=0
+for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE`
 do
-	SYM=`echo $i | sed -e"s/;//"`
 	objdump -t $OBJFILE | grep -q "\.text.*$SYM$"
 	IN_TEXT=$?
 	objdump -t $OBJFILE | grep -q "\.text\.experimental.*$SYM$"
@@ -33,8 +32,24 @@ do
 		but is listed in version map
 		Please add __rte_experimental to the definition of $SYM
 		END_OF_MESSAGE
-		exit 1
+		ret=1
 	fi
 done
-exit 0
 
+for SYM in `objdump -t $OBJFILE |awk '{
+	if ($2 != "l" && $4 == ".text.experimental") {
+		print $NF
+	}
+}'`
+do
+	$LIST_SYMBOL -S EXPERIMENTAL -s $SYM -q $MAPFILE || {
+		cat >&2 <<- END_OF_MESSAGE
+		$SYM is flagged as experimental
+		but is not listed in version map
+		Please add $SYM to the version map
+		END_OF_MESSAGE
+		ret=1
+	}
+done
+
+exit $ret
diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
new file mode 100755
index 0000000..5509b4a
--- /dev/null
+++ b/buildtools/map-list-symbol.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 David Marchand <david.marchand@redhat.com>
+
+section=all
+symbol=all
+quiet=
+
+while getopts 'S:s:q' name; do
+	case $name in
+	S)
+		[ $section = 'all' ] || {
+			echo 'Cannot list in multiple sections'
+			exit 1
+		}
+		section=$OPTARG
+	;;
+	s)
+		[ $symbol = 'all' ] || {
+			echo 'Cannot list multiple symbols'
+			exit 1
+		}
+		symbol=$OPTARG
+	;;
+	q)
+		quiet='y'
+	;;
+	?)
+		echo 'usage: $0 [-S section] [-s symbol] [-q]'
+		exit 1
+	;;
+	esac
+done
+
+shift $(($OPTIND - 1))
+
+for file in $@; do
+	cat "$file" |awk '
+	BEGIN {
+		current_section = "";
+		if ("'$section'" == "all" && "'$symbol'" == "all") {
+			ret = 0;
+		} else {
+			ret = 1;
+		}
+	}
+	/^.*{/ {
+		if ("'$section'" == "all" || $1 == "'$section'") {
+			current_section = $1;
+		}
+	}
+	/.*}/ { current_section = ""; }
+	/^[^}].*[^:*];/ {
+		if (current_section != "") {
+			gsub(";","");
+			if ("'$symbol'" == "all" || $1 == "'$symbol'") {
+				ret = 0;
+				if ("'$quiet'" == "") {
+					print "'$file' "current_section" "$1;
+				}
+				if ("'$symbol'" != "all") {
+					exit 0;
+				}
+			}
+		}
+	}
+	END {
+		exit ret;
+	}'
+done
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 6/9] net/atlantic: add missing experimental api tags
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (4 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 5/9] buildtools: detect discrepancies for experimental symbols David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 7/9] mem: remove incorrect experimental tag on static symbol David Marchand
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable, Igor Russkikh, Pavel Belous

Those symbols are declared in the library map but the prototypes are
missing the experimental tag.
Without it, existing users won't notice it is experimental.

Fixes: ec0dec44ecb9 ("net/atlantic: enable MACsec configuration")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/net/atlantic/rte_pmd_atlantic.c | 12 ++++++------
 drivers/net/atlantic/rte_pmd_atlantic.h | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/drivers/net/atlantic/rte_pmd_atlantic.c b/drivers/net/atlantic/rte_pmd_atlantic.c
index 5bf4da2..2962f5c 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic.c
+++ b/drivers/net/atlantic/rte_pmd_atlantic.c
@@ -8,7 +8,7 @@
 #include "atl_ethdev.h"
 
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_enable(uint16_t port,
 			  uint8_t encr, uint8_t repl_prot)
 {
@@ -24,7 +24,7 @@
 	return atl_macsec_enable(dev, encr, repl_prot);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_disable(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -39,7 +39,7 @@
 	return atl_macsec_disable(dev);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac)
 {
 	struct rte_eth_dev *dev;
@@ -54,7 +54,7 @@
 	return atl_macsec_config_txsc(dev, mac);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 {
 	struct rte_eth_dev *dev;
@@ -69,7 +69,7 @@
 	return atl_macsec_config_rxsc(dev, mac, pi);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
 {
@@ -85,7 +85,7 @@
 	return atl_macsec_select_txsa(dev, idx, an, pn, key);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
 {
diff --git a/drivers/net/atlantic/rte_pmd_atlantic.h b/drivers/net/atlantic/rte_pmd_atlantic.h
index e4db7c6..c020856 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic.h
+++ b/drivers/net/atlantic/rte_pmd_atlantic.h
@@ -14,6 +14,9 @@
 #include <rte_ethdev_driver.h>
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable MACsec offload.
  *
  * @param port
@@ -29,9 +32,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_enable(uint16_t port, uint8_t encr, uint8_t repl_prot);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Disable MACsec offload.
  *
  * @param port
@@ -41,9 +48,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_disable(uint16_t port);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Configure Tx SC (Secure Connection).
  *
  * @param port
@@ -55,9 +66,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Configure Rx SC (Secure Connection).
  *
  * @param port
@@ -71,9 +86,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable Tx SA (Secure Association).
  *
  * @param port
@@ -92,10 +111,14 @@
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  *   - (-EINVAL) if bad parameter.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				   uint32_t pn, uint8_t *key);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable Rx SA (Secure Association).
  *
  * @param port
@@ -114,6 +137,7 @@ int rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  *   - (-EINVAL) if bad parameter.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				   uint32_t pn, uint8_t *key);
 
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 7/9] mem: remove incorrect experimental tag on static symbol
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (5 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 6/9] net/atlantic: add missing experimental api tags David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions David Marchand
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev; +Cc: nhorman, aconole, thomas, stable, Anatoly Burakov

This function is not visible from outside this code unit.

Fixes: 84e7477e10b1 ("mem: add thread unsafe version for DMA mask check")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/librte_eal/common/eal_common_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index 5ae8d01..de6fc1b 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -448,7 +448,7 @@ struct virtiova {
 #define MAX_DMA_MASK_BITS 63
 
 /* check memseg iovas are within the required range based on dma mask */
-static int __rte_experimental
+static int
 check_dma_mask(uint8_t maskbits, bool thread_unsafe)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (6 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 7/9] mem: remove incorrect experimental tag on static symbol David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-28 15:56   ` Thomas Monjalon
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations David Marchand
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev
  Cc: nhorman, aconole, thomas, John McNamara, Marko Kovacevic,
	Hemant Agrawal, Shreyansh Jain, Wenzhuo Lu, Konstantin Ananyev,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Anatoly Burakov, Harry van Haaren,
	Bruce Richardson, Ferruh Yigit, Andrew Rybchenko,
	Adrien Mazarguil, Cristian Dumitrescu, Nikhil Rao, Jerin Jacob,
	Bernard Iremonger, Yipeng Wang, Sameh Gobriel, Olivier Matz,
	David Hunt, Honnappa Nagarahalli, Akhil Goyal, Kevin Laatz,
	Robert Sanford, Erik Gabriel Carrillo, Maxime Coquelin,
	Tiwei Bie, Zhihong Wang

We had some inconsistencies between functions prototypes and actual
definitions.
Let's avoid this by only adding the experimental tag to the prototypes.
Tests with gcc and clang show it is enough.

git grep -l __rte_experimental |grep \.c$ |while read file; do
	sed -i -e '/^__rte_experimental$/d' $file;
	sed -i -e 's/  *__rte_experimental//' $file;
	sed -i -e 's/__rte_experimental  *//' $file;
done

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 devtools/checkpatches.sh                       | 32 ++++++++++++++++
 doc/guides/contributing/versioning.rst         |  6 +--
 drivers/net/dpaa2/dpaa2_ethdev.c               |  2 +-
 drivers/net/ixgbe/rte_pmd_ixgbe.c              | 10 ++---
 lib/librte_bbdev/rte_bbdev.c                   | 52 +++++++++++++-------------
 lib/librte_bpf/bpf.c                           |  4 +-
 lib/librte_bpf/bpf_exec.c                      |  4 +-
 lib/librte_bpf/bpf_load.c                      |  4 +-
 lib/librte_bpf/bpf_load_elf.c                  |  2 +-
 lib/librte_bpf/bpf_pkt.c                       |  8 ++--
 lib/librte_compressdev/rte_comp.c              | 12 +++---
 lib/librte_compressdev/rte_compressdev.c       | 50 ++++++++++++-------------
 lib/librte_compressdev/rte_compressdev_pmd.c   |  6 +--
 lib/librte_cryptodev/rte_cryptodev.c           | 28 +++++++-------
 lib/librte_eal/common/eal_common_class.c       |  6 +--
 lib/librte_eal/common/eal_common_dev.c         |  8 ++--
 lib/librte_eal/common/eal_common_fbarray.c     | 52 +++++++++++++-------------
 lib/librte_eal/common/eal_common_log.c         |  2 +-
 lib/librte_eal/common/eal_common_memory.c      | 48 ++++++++++++------------
 lib/librte_eal/common/eal_common_proc.c        | 12 +++---
 lib/librte_eal/common/eal_common_timer.c       |  2 +-
 lib/librte_eal/common/rte_malloc.c             |  2 +-
 lib/librte_eal/common/rte_option.c             |  1 -
 lib/librte_eal/common/rte_service.c            |  6 +--
 lib/librte_eal/freebsd/eal/eal.c               |  2 +-
 lib/librte_eal/freebsd/eal/eal_dev.c           |  8 ++--
 lib/librte_eal/freebsd/eal/eal_interrupts.c    |  2 +-
 lib/librte_eal/linux/eal/eal_dev.c             |  8 ++--
 lib/librte_eal/linux/eal/eal_interrupts.c      |  2 +-
 lib/librte_ethdev/rte_ethdev.c                 | 28 +++++++-------
 lib/librte_ethdev/rte_flow.c                   |  2 +-
 lib/librte_ethdev/rte_mtr.c                    | 24 ++++++------
 lib/librte_eventdev/rte_event_eth_rx_adapter.c |  4 +-
 lib/librte_flow_classify/rte_flow_classify.c   | 14 +++----
 lib/librte_hash/rte_cuckoo_hash.c              |  2 +-
 lib/librte_ip_frag/rte_ip_frag_common.c        |  2 +-
 lib/librte_ipsec/sa.c                          |  8 ++--
 lib/librte_ipsec/ses.c                         |  2 +-
 lib/librte_kni/rte_kni.c                       |  2 +-
 lib/librte_kvargs/rte_kvargs.c                 |  2 -
 lib/librte_mbuf/rte_mbuf.c                     |  1 -
 lib/librte_meter/rte_meter.c                   |  4 +-
 lib/librte_net/rte_arp.c                       |  2 +-
 lib/librte_net/rte_net.c                       |  2 +-
 lib/librte_power/rte_power_empty_poll.c        | 14 +++----
 lib/librte_rcu/rte_rcu_qsbr.c                  | 12 +++---
 lib/librte_sched/rte_sched.c                   |  2 +-
 lib/librte_security/rte_security.c             |  6 +--
 lib/librte_telemetry/rte_telemetry.c           |  6 +--
 lib/librte_telemetry/rte_telemetry_parser.c    |  2 +-
 lib/librte_timer/rte_timer.c                   | 16 ++++----
 lib/librte_vhost/vdpa.c                        |  2 +-
 lib/librte_vhost/vhost_crypto.c                | 10 ++---
 53 files changed, 287 insertions(+), 263 deletions(-)

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 6a01b39..7d61dbe 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -79,6 +79,30 @@ check_forbidden_additions() { # <patch>
 	return $res
 }
 
+check_experimental_tags() { # <patch>
+	res=0
+
+	cat "$1" |awk '
+	BEGIN {
+		current_file = "";
+		ret = 0;
+	}
+	/^+++ b\// {
+		current_file = $2;
+	}
+	/^+.*__rte_experimental/ {
+		if (current_file ~ ".c$" ) {
+			print "Please only put __rte_experimental tags in headers ("current_file")";
+			ret = 1;
+		}
+	}
+	END {
+		exit ret;
+	}' || res=1
+
+	return $res
+}
+
 number=0
 range='origin/master..'
 quiet=false
@@ -151,6 +175,14 @@ check () { # <patch> <commit> <title>
 		ret=1
 	fi
 
+	! $verbose || printf '\nChecking __rte_experimental tags:\n'
+	report=$(check_experimental_tags "$tmpinput")
+	if [ $? -ne 0 ] ; then
+		$headline_printed || print_headline "$3"
+		printf '%s\n' "$report"
+		ret=1
+	fi
+
 	clean_tmp_files
 	[ $ret -eq 0 ] && return 0
 
diff --git a/doc/guides/contributing/versioning.rst b/doc/guides/contributing/versioning.rst
index 5d93b18..3ab2c43 100644
--- a/doc/guides/contributing/versioning.rst
+++ b/doc/guides/contributing/versioning.rst
@@ -149,9 +149,9 @@ Note that marking an API as experimental is a multi step process.
 To mark an API as experimental, the symbols which are desired to be exported
 must be placed in an EXPERIMENTAL version block in the corresponding libraries'
 version map script.
-Secondly, the corresponding definitions of those exported functions, and
-their forward declarations (in the development header files), must be marked
-with the ``__rte_experimental`` tag (see ``rte_compat.h``).
+Secondly, the corresponding prototypes of those exported functions (in the
+development header files), must be marked with the ``__rte_experimental`` tag
+(see ``rte_compat.h``).
 The DPDK build makefiles perform a check to ensure that the map file and the
 C code reflect the same list of symbols.
 This check can be circumvented by defining ``ALLOW_EXPERIMENTAL_API``
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index d668f3e..03f6959 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -102,7 +102,7 @@ static int dpaa2_dev_link_update(struct rte_eth_dev *dev,
 
 int dpaa2_logtype_pmd;
 
-__rte_experimental void
+void
 rte_pmd_dpaa2_set_timestamp(enum pmd_dpaa2_ts enable)
 {
 	dpaa2_enable_ts = enable;
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.c b/drivers/net/ixgbe/rte_pmd_ixgbe.c
index 077afab..9514f2c 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.c
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.c
@@ -882,7 +882,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable)
 {
 	struct ixgbe_hw *hw;
@@ -1096,7 +1096,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	ixgbe_release_swfw_semaphore(hw, mask);
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_lock(uint16_t port)
 {
 	struct ixgbe_hw *hw;
@@ -1123,7 +1123,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return IXGBE_SUCCESS;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlock(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -1150,7 +1150,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return IXGBE_SUCCESS;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 				 uint32_t dev_type, uint16_t *phy_data)
 {
@@ -1197,7 +1197,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 				  uint32_t dev_type, uint16_t phy_data)
 {
diff --git a/lib/librte_bbdev/rte_bbdev.c b/lib/librte_bbdev/rte_bbdev.c
index a3ab5d9..0c35480 100644
--- a/lib/librte_bbdev/rte_bbdev.c
+++ b/lib/librte_bbdev/rte_bbdev.c
@@ -173,7 +173,7 @@ struct rte_bbdev_callback {
 	return RTE_BBDEV_MAX_DEVS;
 }
 
-struct rte_bbdev * __rte_experimental
+struct rte_bbdev *
 rte_bbdev_allocate(const char *name)
 {
 	int ret;
@@ -232,7 +232,7 @@ struct rte_bbdev * __rte_experimental
 	return bbdev;
 }
 
-int __rte_experimental
+int
 rte_bbdev_release(struct rte_bbdev *bbdev)
 {
 	uint16_t dev_id;
@@ -266,7 +266,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-struct rte_bbdev * __rte_experimental
+struct rte_bbdev *
 rte_bbdev_get_named_dev(const char *name)
 {
 	unsigned int i;
@@ -286,13 +286,13 @@ struct rte_bbdev * __rte_experimental
 	return NULL;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_bbdev_count(void)
 {
 	return num_devs;
 }
 
-bool __rte_experimental
+bool
 rte_bbdev_is_valid(uint16_t dev_id)
 {
 	if ((dev_id < RTE_BBDEV_MAX_DEVS) &&
@@ -301,7 +301,7 @@ struct rte_bbdev * __rte_experimental
 	return false;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_bbdev_find_next(uint16_t dev_id)
 {
 	dev_id++;
@@ -311,7 +311,7 @@ struct rte_bbdev * __rte_experimental
 	return dev_id;
 }
 
-int __rte_experimental
+int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
 {
 	unsigned int i;
@@ -401,7 +401,7 @@ struct rte_bbdev * __rte_experimental
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_bbdev_intr_enable(uint16_t dev_id)
 {
 	int ret;
@@ -433,7 +433,7 @@ struct rte_bbdev * __rte_experimental
 	return -ENOTSUP;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 		const struct rte_bbdev_queue_conf *conf)
 {
@@ -551,7 +551,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_start(uint16_t dev_id)
 {
 	int i;
@@ -583,7 +583,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_stop(uint16_t dev_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -604,7 +604,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_close(uint16_t dev_id)
 {
 	int ret;
@@ -649,7 +649,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -679,7 +679,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -739,7 +739,7 @@ struct rte_bbdev * __rte_experimental
 	rte_bbdev_log_debug("Reset stats on %u", dev->data->dev_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -762,7 +762,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_stats_reset(uint16_t dev_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -779,7 +779,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -807,7 +807,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_queue_info *queue_info)
 {
@@ -872,7 +872,7 @@ struct rte_bbdev * __rte_experimental
 	}
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 		unsigned int num_elements, unsigned int cache_size,
 		int socket_id)
@@ -919,7 +919,7 @@ struct rte_mempool * __rte_experimental
 	return mp;
 }
 
-int __rte_experimental
+int
 rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
 {
@@ -964,7 +964,7 @@ struct rte_mempool * __rte_experimental
 	return (user_cb == NULL) ? -ENOMEM : 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
 {
@@ -1009,7 +1009,7 @@ struct rte_mempool * __rte_experimental
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	enum rte_bbdev_event_type event, void *ret_param)
 {
@@ -1051,7 +1051,7 @@ struct rte_mempool * __rte_experimental
 	rte_spinlock_unlock(&rte_bbdev_cb_lock);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -1062,7 +1062,7 @@ struct rte_mempool * __rte_experimental
 	return dev->dev_ops->queue_intr_enable(dev, queue_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -1073,7 +1073,7 @@ struct rte_mempool * __rte_experimental
 	return dev->dev_ops->queue_intr_disable(dev, queue_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 		void *data)
 {
@@ -1110,7 +1110,7 @@ struct rte_mempool * __rte_experimental
 }
 
 
-const char * __rte_experimental
+const char *
 rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
 {
 	static const char * const op_types[] = {
diff --git a/lib/librte_bpf/bpf.c b/lib/librte_bpf/bpf.c
index f590c8c..cc963d5 100644
--- a/lib/librte_bpf/bpf.c
+++ b/lib/librte_bpf/bpf.c
@@ -16,7 +16,7 @@
 
 int rte_bpf_logtype;
 
-__rte_experimental void
+void
 rte_bpf_destroy(struct rte_bpf *bpf)
 {
 	if (bpf != NULL) {
@@ -26,7 +26,7 @@
 	}
 }
 
-__rte_experimental int
+int
 rte_bpf_get_jit(const struct rte_bpf *bpf, struct rte_bpf_jit *jit)
 {
 	if (bpf == NULL || jit == NULL)
diff --git a/lib/librte_bpf/bpf_exec.c b/lib/librte_bpf/bpf_exec.c
index 6a79139..1bb2266 100644
--- a/lib/librte_bpf/bpf_exec.c
+++ b/lib/librte_bpf/bpf_exec.c
@@ -424,7 +424,7 @@
 	return 0;
 }
 
-__rte_experimental uint32_t
+uint32_t
 rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 	uint32_t num)
 {
@@ -443,7 +443,7 @@
 	return i;
 }
 
-__rte_experimental uint64_t
+uint64_t
 rte_bpf_exec(const struct rte_bpf *bpf, void *ctx)
 {
 	uint64_t rc;
diff --git a/lib/librte_bpf/bpf_load.c b/lib/librte_bpf/bpf_load.c
index 194103e..2a3b901 100644
--- a/lib/librte_bpf/bpf_load.c
+++ b/lib/librte_bpf/bpf_load.c
@@ -86,7 +86,7 @@
 	return 0;
 }
 
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_load(const struct rte_bpf_prm *prm)
 {
 	struct rte_bpf *bpf;
@@ -132,7 +132,7 @@
 }
 
 #ifndef RTE_LIBRTE_BPF_ELF
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
 {
diff --git a/lib/librte_bpf/bpf_load_elf.c b/lib/librte_bpf/bpf_load_elf.c
index 926317b..2b11ade 100644
--- a/lib/librte_bpf/bpf_load_elf.c
+++ b/lib/librte_bpf/bpf_load_elf.c
@@ -294,7 +294,7 @@
 	return bpf;
 }
 
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
 {
diff --git a/lib/librte_bpf/bpf_pkt.c b/lib/librte_bpf/bpf_pkt.c
index ab9daa5..6e8248f 100644
--- a/lib/librte_bpf/bpf_pkt.c
+++ b/lib/librte_bpf/bpf_pkt.c
@@ -480,7 +480,7 @@ struct bpf_eth_cbh {
 }
 
 
-__rte_experimental void
+void
 rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue)
 {
 	struct bpf_eth_cbh *cbh;
@@ -491,7 +491,7 @@ struct bpf_eth_cbh {
 	rte_spinlock_unlock(&cbh->lock);
 }
 
-__rte_experimental void
+void
 rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue)
 {
 	struct bpf_eth_cbh *cbh;
@@ -572,7 +572,7 @@ struct bpf_eth_cbh {
 	return rc;
 }
 
-__rte_experimental int
+int
 rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags)
@@ -588,7 +588,7 @@ struct bpf_eth_cbh {
 	return rc;
 }
 
-__rte_experimental int
+int
 rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags)
diff --git a/lib/librte_compressdev/rte_comp.c b/lib/librte_compressdev/rte_comp.c
index 06e3d44..3b0e46f 100644
--- a/lib/librte_compressdev/rte_comp.c
+++ b/lib/librte_compressdev/rte_comp.c
@@ -6,7 +6,7 @@
 #include "rte_compressdev.h"
 #include "rte_compressdev_internal.h"
 
-const char * __rte_experimental
+const char *
 rte_comp_get_feature_name(uint64_t flag)
 {
 	switch (flag) {
@@ -112,7 +112,7 @@ struct rte_comp_op_pool_private {
 	op->mempool = mempool;
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_comp_op_pool_create(const char *name,
 		unsigned int nb_elts, unsigned int cache_size,
 		uint16_t user_size, int socket_id)
@@ -167,7 +167,7 @@ struct rte_mempool * __rte_experimental
 	return mp;
 }
 
-struct rte_comp_op * __rte_experimental
+struct rte_comp_op *
 rte_comp_op_alloc(struct rte_mempool *mempool)
 {
 	struct rte_comp_op *op = NULL;
@@ -182,7 +182,7 @@ struct rte_comp_op * __rte_experimental
 	return op;
 }
 
-int __rte_experimental
+int
 rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -207,14 +207,14 @@ struct rte_comp_op * __rte_experimental
  * @param op
  *   Compress operation
  */
-void __rte_experimental
+void
 rte_comp_op_free(struct rte_comp_op *op)
 {
 	if (op != NULL && op->mempool != NULL)
 		rte_mempool_put(op->mempool, op);
 }
 
-void __rte_experimental
+void
 rte_comp_op_bulk_free(struct rte_comp_op **ops, uint16_t nb_ops)
 {
 	uint16_t i;
diff --git a/lib/librte_compressdev/rte_compressdev.c b/lib/librte_compressdev/rte_compressdev.c
index afba584..b3c5651 100644
--- a/lib/librte_compressdev/rte_compressdev.c
+++ b/lib/librte_compressdev/rte_compressdev.c
@@ -28,7 +28,7 @@
 		.max_devs		= RTE_COMPRESS_MAX_DEVS
 };
 
-const struct rte_compressdev_capabilities * __rte_experimental
+const struct rte_compressdev_capabilities *
 rte_compressdev_capability_get(uint8_t dev_id,
 			enum rte_comp_algorithm algo)
 {
@@ -51,7 +51,7 @@
 	return NULL;
 }
 
-const char * __rte_experimental
+const char *
 rte_compressdev_get_feature_name(uint64_t flag)
 {
 	switch (flag) {
@@ -80,7 +80,7 @@
 	return &compressdev_globals.devs[dev_id];
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name)
 {
 	struct rte_compressdev *dev;
@@ -116,7 +116,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-int __rte_experimental
+int
 rte_compressdev_get_dev_id(const char *name)
 {
 	unsigned int i;
@@ -134,13 +134,13 @@ struct rte_compressdev * __rte_experimental
 	return -1;
 }
 
-uint8_t __rte_experimental
+uint8_t
 rte_compressdev_count(void)
 {
 	return compressdev_globals.nb_devs;
 }
 
-uint8_t __rte_experimental
+uint8_t
 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 	uint8_t nb_devices)
 {
@@ -165,7 +165,7 @@ struct rte_compressdev * __rte_experimental
 	return count;
 }
 
-int __rte_experimental
+int
 rte_compressdev_socket_id(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -222,7 +222,7 @@ struct rte_compressdev * __rte_experimental
 	return RTE_COMPRESS_MAX_DEVS;
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_allocate(const char *name, int socket_id)
 {
 	struct rte_compressdev *compressdev;
@@ -268,7 +268,7 @@ struct rte_compressdev * __rte_experimental
 	return compressdev;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_release_device(struct rte_compressdev *compressdev)
 {
 	int ret;
@@ -288,7 +288,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_queue_pair_count(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -413,7 +413,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)
 {
 	struct rte_compressdev *dev;
@@ -447,7 +447,7 @@ struct rte_compressdev * __rte_experimental
 	return (*dev->dev_ops->dev_configure)(dev, config);
 }
 
-int __rte_experimental
+int
 rte_compressdev_start(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -479,7 +479,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_compressdev_stop(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -503,7 +503,7 @@ struct rte_compressdev * __rte_experimental
 	dev->data->dev_started = 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_close(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -538,7 +538,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		uint32_t max_inflight_ops, int socket_id)
 {
@@ -573,7 +573,7 @@ struct rte_compressdev * __rte_experimental
 			max_inflight_ops, socket_id);
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -585,7 +585,7 @@ struct rte_compressdev * __rte_experimental
 	return nb_ops;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -595,7 +595,7 @@ struct rte_compressdev * __rte_experimental
 			dev->data->queue_pairs[qp_id], ops, nb_ops);
 }
 
-int __rte_experimental
+int
 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)
 {
 	struct rte_compressdev *dev;
@@ -618,7 +618,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_compressdev_stats_reset(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -635,7 +635,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-void __rte_experimental
+void
 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)
 {
 	struct rte_compressdev *dev;
@@ -655,7 +655,7 @@ struct rte_compressdev * __rte_experimental
 	dev_info->driver_name = dev->device->driver->name;
 }
 
-int __rte_experimental
+int
 rte_compressdev_private_xform_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **priv_xform)
@@ -680,7 +680,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
 {
 	struct rte_compressdev *dev;
@@ -703,7 +703,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_stream_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **stream)
@@ -729,7 +729,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-int __rte_experimental
+int
 rte_compressdev_stream_free(uint8_t dev_id, void *stream)
 {
 	struct rte_compressdev *dev;
@@ -752,7 +752,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-const char * __rte_experimental
+const char *
 rte_compressdev_name_get(uint8_t dev_id)
 {
 	struct rte_compressdev *dev = rte_compressdev_get_dev(dev_id);
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.c b/lib/librte_compressdev/rte_compressdev_pmd.c
index cc51d69..46b2556 100644
--- a/lib/librte_compressdev/rte_compressdev_pmd.c
+++ b/lib/librte_compressdev/rte_compressdev_pmd.c
@@ -48,7 +48,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_parse_input_args(
 		struct rte_compressdev_pmd_init_params *params,
 		const char *args)
@@ -84,7 +84,7 @@
 	return ret;
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_create(const char *name,
 		struct rte_device *device,
 		size_t private_data_size,
@@ -133,7 +133,7 @@ struct rte_compressdev * __rte_experimental
 	return compressdev;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_destroy(struct rte_compressdev *compressdev)
 {
 	int retval;
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 00c2cf4..be9f026 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -250,7 +250,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 		const char *xform_string)
 {
@@ -338,7 +338,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return -1;
 }
 
-const struct rte_cryptodev_asymmetric_xform_capability * __rte_experimental
+const struct rte_cryptodev_asymmetric_xform_capability *
 rte_cryptodev_asym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_asym_capability_idx *idx)
 {
@@ -411,7 +411,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 
 	return 0;
 }
-int __rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_optype(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 	enum rte_crypto_asym_op_type op_type)
@@ -422,7 +422,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_modlen(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 	uint16_t modlen)
@@ -1235,7 +1235,7 @@ struct rte_cryptodev *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_init(uint8_t dev_id,
 		struct rte_cryptodev_asym_session *sess,
 		struct rte_crypto_asym_xform *xforms,
@@ -1270,7 +1270,7 @@ struct rte_cryptodev *
 	return 0;
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t elt_size, uint32_t cache_size, uint16_t user_data_size,
 	int socket_id)
@@ -1354,7 +1354,7 @@ struct rte_cryptodev_sym_session *
 	return sess;
 }
 
-struct rte_cryptodev_asym_session * __rte_experimental
+struct rte_cryptodev_asym_session *
 rte_cryptodev_asym_session_create(struct rte_mempool *mp)
 {
 	struct rte_cryptodev_asym_session *sess;
@@ -1398,7 +1398,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_clear(uint8_t dev_id,
 		struct rte_cryptodev_asym_session *sess)
 {
@@ -1438,7 +1438,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess)
 {
 	uint8_t i;
@@ -1478,7 +1478,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 			rte_cryptodev_sym_session_data_size(&s));
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_sym_get_existing_header_session_size(
 		struct rte_cryptodev_sym_session *sess)
 {
@@ -1489,7 +1489,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 				rte_cryptodev_sym_session_data_size(sess));
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_asym_get_header_session_size(void)
 {
 	/*
@@ -1519,7 +1519,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return priv_sess_size;
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
 {
 	struct rte_cryptodev *dev;
@@ -1542,7 +1542,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 
 }
 
-int __rte_experimental
+int
 rte_cryptodev_sym_session_set_user_data(
 					struct rte_cryptodev_sym_session *sess,
 					void *data,
@@ -1558,7 +1558,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-void * __rte_experimental
+void *
 rte_cryptodev_sym_session_get_user_data(
 					struct rte_cryptodev_sym_session *sess)
 {
diff --git a/lib/librte_eal/common/eal_common_class.c b/lib/librte_eal/common/eal_common_class.c
index d922266..0187076 100644
--- a/lib/librte_eal/common/eal_common_class.c
+++ b/lib/librte_eal/common/eal_common_class.c
@@ -12,7 +12,7 @@
 static struct rte_class_list rte_class_list =
 	TAILQ_HEAD_INITIALIZER(rte_class_list);
 
-__rte_experimental void
+void
 rte_class_register(struct rte_class *class)
 {
 	RTE_VERIFY(class);
@@ -22,14 +22,13 @@
 	RTE_LOG(DEBUG, EAL, "Registered [%s] device class.\n", class->name);
 }
 
-__rte_experimental void
+void
 rte_class_unregister(struct rte_class *class)
 {
 	TAILQ_REMOVE(&rte_class_list, class, next);
 	RTE_LOG(DEBUG, EAL, "Unregistered [%s] device class.\n", class->name);
 }
 
-__rte_experimental
 struct rte_class *
 rte_class_find(const struct rte_class *start, rte_class_cmp_t cmp,
 	       const void *data)
@@ -56,7 +55,6 @@ struct rte_class *
 	return strcmp(class->name, name);
 }
 
-__rte_experimental
 struct rte_class *
 rte_class_find_by_name(const char *name)
 {
diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
index 824b8f9..86f801d 100644
--- a/lib/librte_eal/common/eal_common_dev.c
+++ b/lib/librte_eal/common/eal_common_dev.c
@@ -422,7 +422,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_event_callback_register(const char *device_name,
 				rte_dev_event_cb_fn cb_fn,
 				void *cb_arg)
@@ -488,7 +488,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_event_callback_unregister(const char *device_name,
 				  rte_dev_event_cb_fn cb_fn,
 				  void *cb_arg)
@@ -533,7 +533,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_dev_event_callback_process(const char *device_name,
 			       enum rte_dev_event_type event)
 {
@@ -559,7 +559,6 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	rte_spinlock_unlock(&dev_event_lock);
 }
 
-__rte_experimental
 int
 rte_dev_iterator_init(struct rte_dev_iterator *it,
 		      const char *dev_str)
@@ -712,7 +711,6 @@ class_next_dev_cmp(const struct rte_class *cls,
 	it->device = dev;
 	return dev == NULL;
 }
-__rte_experimental
 struct rte_device *
 rte_dev_iterator_next(struct rte_dev_iterator *it)
 {
diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c
index eb04a1e..b7ddb66 100644
--- a/lib/librte_eal/common/eal_common_fbarray.c
+++ b/lib/librte_eal/common/eal_common_fbarray.c
@@ -709,7 +709,7 @@ struct used_mask {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 		unsigned int elt_sz)
 {
@@ -833,7 +833,7 @@ struct used_mask {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_fbarray_attach(struct rte_fbarray *arr)
 {
 	struct mem_area *ma = NULL, *tmp = NULL;
@@ -924,7 +924,7 @@ struct used_mask {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_fbarray_detach(struct rte_fbarray *arr)
 {
 	struct mem_area *tmp = NULL;
@@ -978,7 +978,7 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_destroy(struct rte_fbarray *arr)
 {
 	struct mem_area *tmp = NULL;
@@ -1060,7 +1060,7 @@ struct used_mask {
 	return ret;
 }
 
-void * __rte_experimental
+void *
 rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx)
 {
 	void *ret = NULL;
@@ -1079,19 +1079,19 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx)
 {
 	struct used_mask *msk;
@@ -1160,25 +1160,25 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, false, true);
@@ -1236,28 +1236,28 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
@@ -1400,56 +1400,56 @@ struct used_mask {
 	return biggest_idx;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, true, true);
 }
 
 
-int __rte_experimental
+int
 rte_fbarray_find_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt)
 {
 	void *end;
@@ -1475,7 +1475,7 @@ struct used_mask {
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f)
 {
 	struct used_mask *msk;
diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c
index c714a4b..4f6f227 100644
--- a/lib/librte_eal/common/eal_common_log.c
+++ b/lib/librte_eal/common/eal_common_log.c
@@ -268,7 +268,7 @@ int rte_log_cur_msg_logtype(void)
 }
 
 /* Register an extended log type and try to pick its level from EAL options */
-int __rte_experimental
+int
 rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
 {
 	struct rte_eal_opt_loglevel *opt_ll;
diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index de6fc1b..858d563 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -243,7 +243,7 @@
 	return msl;
 }
 
-__rte_experimental struct rte_memseg_list *
+struct rte_memseg_list *
 rte_mem_virt2memseg_list(const void *addr)
 {
 	return virt2memseg_list(addr);
@@ -280,7 +280,7 @@ struct virtiova {
 	return 0;
 }
 
-__rte_experimental void *
+void *
 rte_mem_iova2virt(rte_iova_t iova)
 {
 	struct virtiova vi;
@@ -299,7 +299,7 @@ struct virtiova {
 	return vi.virt;
 }
 
-__rte_experimental struct rte_memseg *
+struct rte_memseg *
 rte_mem_virt2memseg(const void *addr, const struct rte_memseg_list *msl)
 {
 	return virt2memseg(addr, msl != NULL ? msl :
@@ -368,7 +368,7 @@ struct virtiova {
  * Defining here because declared in rte_memory.h, but the actual implementation
  * is in eal_common_memalloc.c, like all other memalloc internals.
  */
-int __rte_experimental
+int
 rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 		void *arg)
 {
@@ -381,7 +381,7 @@ struct virtiova {
 	return eal_memalloc_mem_event_callback_register(name, clb, arg);
 }
 
-int __rte_experimental
+int
 rte_mem_event_callback_unregister(const char *name, void *arg)
 {
 	/* FreeBSD boots with legacy mem enabled by default */
@@ -393,7 +393,7 @@ struct virtiova {
 	return eal_memalloc_mem_event_callback_unregister(name, arg);
 }
 
-int __rte_experimental
+int
 rte_mem_alloc_validator_register(const char *name,
 		rte_mem_alloc_validator_t clb, int socket_id, size_t limit)
 {
@@ -407,7 +407,7 @@ struct virtiova {
 			limit);
 }
 
-int __rte_experimental
+int
 rte_mem_alloc_validator_unregister(const char *name, int socket_id)
 {
 	/* FreeBSD boots with legacy mem enabled by default */
@@ -489,13 +489,13 @@ struct virtiova {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mem_check_dma_mask(uint8_t maskbits)
 {
 	return check_dma_mask(maskbits, false);
 }
 
-int __rte_experimental
+int
 rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits)
 {
 	return check_dma_mask(maskbits, true);
@@ -508,7 +508,7 @@ struct virtiova {
  * initialization. PMDs should use rte_mem_check_dma_mask if addressing
  * limitations by the device.
  */
-void __rte_experimental
+void
 rte_mem_set_dma_mask(uint8_t maskbits)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -554,7 +554,7 @@ unsigned rte_memory_get_nrank(void)
 	return mlock((void *)aligned, page_size);
 }
 
-int __rte_experimental
+int
 rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -593,7 +593,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -607,7 +607,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -635,7 +635,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_walk(rte_memseg_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -649,7 +649,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -668,7 +668,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -682,7 +682,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -724,7 +724,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd(const struct rte_memseg *ms)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -737,7 +737,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 		size_t *offset)
 {
@@ -780,7 +780,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -793,7 +793,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 		unsigned int n_pages, size_t page_sz)
 {
@@ -842,7 +842,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_unregister(void *va_addr, size_t len)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -899,13 +899,13 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_attach(void *va_addr, size_t len)
 {
 	return sync_memory(va_addr, len, true);
 }
 
-int __rte_experimental
+int
 rte_extmem_detach(void *va_addr, size_t len)
 {
 	return sync_memory(va_addr, len, false);
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c
index cfd571e..cbe8d10 100644
--- a/lib/librte_eal/common/eal_common_proc.c
+++ b/lib/librte_eal/common/eal_common_proc.c
@@ -197,7 +197,7 @@ struct pending_request {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_action_register(const char *name, rte_mp_t action)
 {
 	struct action_entry *entry;
@@ -231,7 +231,7 @@ struct pending_request {
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_mp_action_unregister(const char *name)
 {
 	struct action_entry *entry;
@@ -801,7 +801,7 @@ enum async_action {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_sendmsg(struct rte_mp_msg *msg)
 {
 	if (check_input(msg) != 0)
@@ -948,7 +948,7 @@ enum async_action {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 		const struct timespec *ts)
 {
@@ -1044,7 +1044,7 @@ enum async_action {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb)
 {
@@ -1194,7 +1194,7 @@ enum async_action {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer)
 {
 	RTE_LOG(DEBUG, EAL, "reply: %s\n", msg->name);
diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c
index 68d67e6..145543d 100644
--- a/lib/librte_eal/common/eal_common_timer.c
+++ b/lib/librte_eal/common/eal_common_timer.c
@@ -33,7 +33,7 @@
 		rte_pause();
 }
 
-void __rte_experimental
+void
 rte_delay_us_sleep(unsigned int us)
 {
 	struct timespec wait[2];
diff --git a/lib/librte_eal/common/rte_malloc.c b/lib/librte_eal/common/rte_malloc.c
index 54792ea..b119eba 100644
--- a/lib/librte_eal/common/rte_malloc.c
+++ b/lib/librte_eal/common/rte_malloc.c
@@ -196,7 +196,7 @@ void rte_free(void *addr)
 /*
  * Function to dump contents of all heaps
  */
-void __rte_experimental
+void
 rte_malloc_dump_heaps(FILE *f)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
diff --git a/lib/librte_eal/common/rte_option.c b/lib/librte_eal/common/rte_option.c
index fe7f2ab..6f8bd6e 100644
--- a/lib/librte_eal/common/rte_option.c
+++ b/lib/librte_eal/common/rte_option.c
@@ -38,7 +38,6 @@ struct rte_option_list rte_option_list =
 	return -1;
 }
 
-__rte_experimental
 int
 rte_option_register(struct rte_option *opt)
 {
diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c
index 5f75e5a..c3653eb 100644
--- a/lib/librte_eal/common/rte_service.c
+++ b/lib/librte_eal/common/rte_service.c
@@ -378,7 +378,7 @@ int32_t rte_service_init(void)
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_may_be_active(uint32_t id)
 {
 	uint32_t ids[RTE_MAX_LCORE] = {0};
@@ -754,7 +754,7 @@ int32_t rte_service_run_iter_on_app_lcore(uint32_t id,
 	}
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 			   uint64_t *attr_value)
 {
@@ -814,7 +814,7 @@ int32_t rte_service_run_iter_on_app_lcore(uint32_t id,
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_lcore_attr_reset_all(uint32_t lcore)
 {
 	struct core_state *cs;
diff --git a/lib/librte_eal/freebsd/eal/eal.c b/lib/librte_eal/freebsd/eal/eal.c
index 97633a5..0938a52 100644
--- a/lib/librte_eal/freebsd/eal/eal.c
+++ b/lib/librte_eal/freebsd/eal/eal.c
@@ -883,7 +883,7 @@ static void rte_eal_init_alert(const char *msg)
 	return fctret;
 }
 
-int __rte_experimental
+int
 rte_eal_cleanup(void)
 {
 	rte_service_finalize();
diff --git a/lib/librte_eal/freebsd/eal/eal_dev.c b/lib/librte_eal/freebsd/eal/eal_dev.c
index 255d611..8e06e70 100644
--- a/lib/librte_eal/freebsd/eal/eal_dev.c
+++ b/lib/librte_eal/freebsd/eal/eal_dev.c
@@ -6,28 +6,28 @@
 #include <rte_compat.h>
 #include <rte_dev.h>
 
-int __rte_experimental
+int
 rte_dev_event_monitor_start(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_stop(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_enable(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_disable(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
diff --git a/lib/librte_eal/freebsd/eal/eal_interrupts.c b/lib/librte_eal/freebsd/eal/eal_interrupts.c
index 4a9aedd..10375bd 100644
--- a/lib/librte_eal/freebsd/eal/eal_interrupts.c
+++ b/lib/librte_eal/freebsd/eal/eal_interrupts.c
@@ -193,7 +193,7 @@ struct rte_intr_source {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn)
diff --git a/lib/librte_eal/linux/eal/eal_dev.c b/lib/librte_eal/linux/eal/eal_dev.c
index c418093..83c9cd6 100644
--- a/lib/librte_eal/linux/eal/eal_dev.c
+++ b/lib/librte_eal/linux/eal/eal_dev.c
@@ -285,7 +285,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	rte_spinlock_unlock(&failure_handle_lock);
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_start(void)
 {
 	int ret;
@@ -312,7 +312,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_stop(void)
 {
 	int ret;
@@ -365,7 +365,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return rte_errno;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_enable(void)
 {
 	int ret = 0;
@@ -380,7 +380,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_disable(void)
 {
 	int ret = 0;
diff --git a/lib/librte_eal/linux/eal/eal_interrupts.c b/lib/librte_eal/linux/eal/eal_interrupts.c
index be0dd44..79ad5e8 100644
--- a/lib/librte_eal/linux/eal/eal_interrupts.c
+++ b/lib/librte_eal/linux/eal/eal_interrupts.c
@@ -522,7 +522,7 @@ struct rte_intr_source {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn)
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 8ac3016..31f02ec 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -601,7 +601,7 @@ struct rte_eth_dev *
 	return port_id;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_new(uint64_t *owner_id)
 {
 	rte_eth_dev_shared_data_prepare();
@@ -654,7 +654,7 @@ struct rte_eth_dev *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_set(const uint16_t port_id,
 		      const struct rte_eth_dev_owner *owner)
 {
@@ -670,7 +670,7 @@ struct rte_eth_dev *
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_unset(const uint16_t port_id, const uint64_t owner_id)
 {
 	const struct rte_eth_dev_owner new_owner = (struct rte_eth_dev_owner)
@@ -687,7 +687,7 @@ struct rte_eth_dev *
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_eth_dev_owner_delete(const uint64_t owner_id)
 {
 	uint16_t port_id;
@@ -713,7 +713,7 @@ struct rte_eth_dev *
 	rte_spinlock_unlock(&rte_eth_dev_shared_data->ownership_lock);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
 {
 	int ret = 0;
@@ -1535,7 +1535,7 @@ struct rte_eth_dev *
 	return eth_err(port_id, ret);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_is_removed(uint16_t port_id)
 {
 	struct rte_eth_dev *dev;
@@ -3592,7 +3592,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id)
 {
 	struct rte_intr_handle *intr_handle;
@@ -3654,7 +3654,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 			RTE_MEMZONE_IOVA_CONTIG, align);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_create(struct rte_device *device, const char *name,
 	size_t priv_data_size,
 	ethdev_bus_specific_init ethdev_bus_specific_init,
@@ -3717,7 +3717,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return retval;
 }
 
-int  __rte_experimental
+int
 rte_eth_dev_destroy(struct rte_eth_dev *ethdev,
 	ethdev_uninit_t ethdev_uninit)
 {
@@ -4238,7 +4238,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return eth_err(port_id, (*dev->dev_ops->set_eeprom)(dev, info));
 }
 
-int __rte_experimental
+int
 rte_eth_dev_get_module_info(uint16_t port_id,
 			    struct rte_eth_dev_module_info *modinfo)
 {
@@ -4251,7 +4251,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return (*dev->dev_ops->get_module_info)(dev, modinfo);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_get_module_eeprom(uint16_t port_id,
 			      struct rte_dev_eeprom_info *info)
 {
@@ -4407,7 +4407,7 @@ enum rte_eth_switch_domain_state {
 	enum rte_eth_switch_domain_state state;
 } rte_eth_switch_domains[RTE_MAX_ETHPORTS];
 
-int __rte_experimental
+int
 rte_eth_switch_domain_alloc(uint16_t *domain_id)
 {
 	unsigned int i;
@@ -4428,7 +4428,7 @@ enum rte_eth_switch_domain_state {
 	return -ENOSPC;
 }
 
-int __rte_experimental
+int
 rte_eth_switch_domain_free(uint16_t domain_id)
 {
 	if (domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID ||
@@ -4508,7 +4508,7 @@ enum rte_eth_switch_domain_state {
 	}
 }
 
-int __rte_experimental
+int
 rte_eth_devargs_parse(const char *dargs, struct rte_eth_devargs *eth_da)
 {
 	struct rte_kvargs args;
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 3277be1..5c49522 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -899,7 +899,7 @@ enum rte_flow_conv_item_spec_type {
  * Expand RSS flows into several possible flows according to the RSS hash
  * fields requested and the driver capabilities.
  */
-int __rte_experimental
+int
 rte_flow_expand_rss(struct rte_flow_expand_rss *buf, size_t size,
 		    const struct rte_flow_item *pattern, uint64_t types,
 		    const struct rte_flow_expand_node graph[],
diff --git a/lib/librte_ethdev/rte_mtr.c b/lib/librte_ethdev/rte_mtr.c
index 12b8154..3073ac0 100644
--- a/lib/librte_ethdev/rte_mtr.c
+++ b/lib/librte_ethdev/rte_mtr.c
@@ -58,7 +58,7 @@
 })
 
 /* MTR capabilities get */
-int __rte_experimental
+int
 rte_mtr_capabilities_get(uint16_t port_id,
 	struct rte_mtr_capabilities *cap,
 	struct rte_mtr_error *error)
@@ -69,7 +69,7 @@
 }
 
 /* MTR meter profile add */
-int __rte_experimental
+int
 rte_mtr_meter_profile_add(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_meter_profile *profile,
@@ -81,7 +81,7 @@
 }
 
 /** MTR meter profile delete */
-int __rte_experimental
+int
 rte_mtr_meter_profile_delete(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_error *error)
@@ -92,7 +92,7 @@
 }
 
 /** MTR object create */
-int __rte_experimental
+int
 rte_mtr_create(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_params *params,
@@ -105,7 +105,7 @@
 }
 
 /** MTR object destroy */
-int __rte_experimental
+int
 rte_mtr_destroy(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -116,7 +116,7 @@
 }
 
 /** MTR object meter enable */
-int __rte_experimental
+int
 rte_mtr_meter_enable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -127,7 +127,7 @@
 }
 
 /** MTR object meter disable */
-int __rte_experimental
+int
 rte_mtr_meter_disable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -138,7 +138,7 @@
 }
 
 /** MTR object meter profile update */
-int __rte_experimental
+int
 rte_mtr_meter_profile_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t meter_profile_id,
@@ -150,7 +150,7 @@
 }
 
 /** MTR object meter DSCP table update */
-int __rte_experimental
+int
 rte_mtr_meter_dscp_table_update(uint16_t port_id,
 	uint32_t mtr_id,
 	enum rte_color *dscp_table,
@@ -162,7 +162,7 @@
 }
 
 /** MTR object policer action update */
-int __rte_experimental
+int
 rte_mtr_policer_actions_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t action_mask,
@@ -175,7 +175,7 @@
 }
 
 /** MTR object enabled stats update */
-int __rte_experimental
+int
 rte_mtr_stats_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint64_t stats_mask,
@@ -187,7 +187,7 @@
 }
 
 /** MTR object stats read */
-int __rte_experimental
+int
 rte_mtr_stats_read(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_stats *stats,
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
index a97d198..dd251cc 100644
--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
@@ -2297,7 +2297,7 @@ static int rxa_sw_add(struct rte_event_eth_rx_adapter *rx_adapter,
 	return rxa_ctrl(id, 0);
 }
 
-int __rte_experimental
+int
 rte_event_eth_rx_adapter_stats_get(uint8_t id,
 			       struct rte_event_eth_rx_adapter_stats *stats)
 {
@@ -2384,7 +2384,7 @@ static int rxa_sw_add(struct rte_event_eth_rx_adapter *rx_adapter,
 	return rx_adapter->service_inited ? 0 : -ESRCH;
 }
 
-int __rte_experimental
+int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
 					uint16_t eth_dev_id,
 					rte_event_eth_rx_adapter_cb_fn cb_fn,
diff --git a/lib/librte_flow_classify/rte_flow_classify.c b/lib/librte_flow_classify/rte_flow_classify.c
index 24f7f7a..5ff5858 100644
--- a/lib/librte_flow_classify/rte_flow_classify.c
+++ b/lib/librte_flow_classify/rte_flow_classify.c
@@ -89,7 +89,7 @@ struct rte_flow_classify_rule {
 	void *entry_ptr; /* handle to the table entry for rule meta data */
 };
 
-int __rte_experimental
+int
 rte_flow_classify_validate(
 		   struct rte_flow_classifier *cls,
 		   const struct rte_flow_attr *attr,
@@ -258,7 +258,7 @@ struct rte_flow_classify_rule {
 	return 0;
 }
 
-struct rte_flow_classifier * __rte_experimental
+struct rte_flow_classifier *
 rte_flow_classifier_create(struct rte_flow_classifier_params *params)
 {
 	struct rte_flow_classifier *cls;
@@ -300,7 +300,7 @@ struct rte_flow_classifier * __rte_experimental
 		table->ops.f_free(table->h_table);
 }
 
-int __rte_experimental
+int
 rte_flow_classifier_free(struct rte_flow_classifier *cls)
 {
 	uint32_t i;
@@ -372,7 +372,7 @@ struct rte_flow_classifier * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_flow_classify_table_create(struct rte_flow_classifier *cls,
 	struct rte_flow_classify_table_params *params)
 {
@@ -482,7 +482,7 @@ struct rte_flow_classifier * __rte_experimental
 	return rule;
 }
 
-struct rte_flow_classify_rule * __rte_experimental
+struct rte_flow_classify_rule *
 rte_flow_classify_table_entry_add(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -564,7 +564,7 @@ struct rte_flow_classify_rule * __rte_experimental
 	return NULL;
 }
 
-int __rte_experimental
+int
 rte_flow_classify_table_entry_delete(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_rule *rule)
 {
@@ -642,7 +642,7 @@ struct rte_flow_classify_rule * __rte_experimental
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_flow_classifier_query(struct rte_flow_classifier *cls,
 		struct rte_mbuf **pkts,
 		const uint16_t nb_pkts,
diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
index 953928f..51198b4 100644
--- a/lib/librte_hash/rte_cuckoo_hash.c
+++ b/lib/librte_hash/rte_cuckoo_hash.c
@@ -1583,7 +1583,7 @@ struct rte_hash *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_hash_free_key_with_position(const struct rte_hash *h,
 				const int32_t position)
 {
diff --git a/lib/librte_ip_frag/rte_ip_frag_common.c b/lib/librte_ip_frag/rte_ip_frag_common.c
index a23f6f2..6b29e9d 100644
--- a/lib/librte_ip_frag/rte_ip_frag_common.c
+++ b/lib/librte_ip_frag/rte_ip_frag_common.c
@@ -123,7 +123,7 @@ struct rte_ip_frag_tbl *
 }
 
 /* Delete expired fragments */
-void __rte_experimental
+void
 rte_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, uint64_t tms)
 {
diff --git a/lib/librte_ipsec/sa.c b/lib/librte_ipsec/sa.c
index 1cb71ca..81e3437 100644
--- a/lib/librte_ipsec/sa.c
+++ b/lib/librte_ipsec/sa.c
@@ -77,7 +77,7 @@ struct crypto_xform {
 	return 0;
 }
 
-uint64_t __rte_experimental
+uint64_t
 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa)
 {
 	return sa->type;
@@ -149,7 +149,7 @@ struct crypto_xform {
 	return sz;
 }
 
-void __rte_experimental
+void
 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa)
 {
 	memset(sa, 0, sa->size);
@@ -405,7 +405,7 @@ struct crypto_xform {
 			((uintptr_t)sa->sqn.inb.rsn[0] + rsn_size(nb_bucket));
 }
 
-int __rte_experimental
+int
 rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm)
 {
 	uint64_t type;
@@ -425,7 +425,7 @@ struct crypto_xform {
 	return ipsec_sa_size(type, &wsz, &nb);
 }
 
-int __rte_experimental
+int
 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 	uint32_t size)
 {
diff --git a/lib/librte_ipsec/ses.c b/lib/librte_ipsec/ses.c
index 1158097..82c765a 100644
--- a/lib/librte_ipsec/ses.c
+++ b/lib/librte_ipsec/ses.c
@@ -27,7 +27,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_ipsec_session_prepare(struct rte_ipsec_session *ss)
 {
 	int32_t rc;
diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
index e29d0cc..00104a3 100644
--- a/lib/librte_kni/rte_kni.c
+++ b/lib/librte_kni/rte_kni.c
@@ -709,7 +709,7 @@ struct rte_kni *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_kni_update_link(struct rte_kni *kni, unsigned int linkup)
 {
 	char path[64];
diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
index f7030c6..d393329 100644
--- a/lib/librte_kvargs/rte_kvargs.c
+++ b/lib/librte_kvargs/rte_kvargs.c
@@ -186,7 +186,6 @@ struct rte_kvargs *
 	return kvlist;
 }
 
-__rte_experimental
 struct rte_kvargs *
 rte_kvargs_parse_delim(const char *args, const char * const valid_keys[],
 		       const char *valid_ends)
@@ -211,7 +210,6 @@ struct rte_kvargs *
 	return kvlist;
 }
 
-__rte_experimental
 int
 rte_kvargs_strcmp(const char *key __rte_unused,
 		  const char *value, void *opaque)
diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c
index 21f6f74..37718d4 100644
--- a/lib/librte_mbuf/rte_mbuf.c
+++ b/lib/librte_mbuf/rte_mbuf.c
@@ -177,7 +177,6 @@ struct rte_mempool *
 		rte_panic("%s\n", reason);
 }
 
-__rte_experimental
 int rte_mbuf_check(const struct rte_mbuf *m, int is_header,
 		   const char **reason)
 {
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index 4567944..da01429 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -119,7 +119,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
@@ -144,7 +144,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_meter_trtcm_rfc4115_config(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
diff --git a/lib/librte_net/rte_arp.c b/lib/librte_net/rte_arp.c
index cfd6e03..784b7f4 100644
--- a/lib/librte_net/rte_arp.c
+++ b/lib/librte_net/rte_arp.c
@@ -7,7 +7,7 @@
 #include <rte_arp.h>
 
 #define RARP_PKT_SIZE	64
-struct rte_mbuf * __rte_experimental
+struct rte_mbuf *
 rte_net_make_rarp_packet(struct rte_mempool *mpool,
 		const struct rte_ether_addr *mac)
 {
diff --git a/lib/librte_net/rte_net.c b/lib/librte_net/rte_net.c
index 6515909..dfccbbf 100644
--- a/lib/librte_net/rte_net.c
+++ b/lib/librte_net/rte_net.c
@@ -179,7 +179,7 @@
 }
 
 /* parse ipv6 extended headers, update offset and return next proto */
-int __rte_experimental
+int
 rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	int *frag)
 {
diff --git a/lib/librte_power/rte_power_empty_poll.c b/lib/librte_power/rte_power_empty_poll.c
index 15d4f05..0a8024d 100644
--- a/lib/librte_power/rte_power_empty_poll.c
+++ b/lib/librte_power/rte_power_empty_poll.c
@@ -361,7 +361,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_empty_poll_detection(struct rte_timer *tim, void *arg)
 {
 
@@ -402,7 +402,7 @@ static inline void  __attribute__((always_inline))
 
 }
 
-int __rte_experimental
+int
 rte_power_empty_poll_stat_init(struct ep_params **eptr, uint8_t *freq_tlb,
 		struct ep_policy *policy)
 {
@@ -461,7 +461,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_power_empty_poll_stat_free(void)
 {
 
@@ -471,7 +471,7 @@ static inline void  __attribute__((always_inline))
 		rte_free(ep_params);
 }
 
-int __rte_experimental
+int
 rte_power_empty_poll_stat_update(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
@@ -489,7 +489,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_power_poll_stat_update(unsigned int lcore_id, uint8_t nb_pkt)
 {
 
@@ -509,7 +509,7 @@ static inline void  __attribute__((always_inline))
 }
 
 
-uint64_t __rte_experimental
+uint64_t
 rte_power_empty_poll_stat_fetch(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
@@ -525,7 +525,7 @@ static inline void  __attribute__((always_inline))
 	return poll_stats->empty_dequeues;
 }
 
-uint64_t __rte_experimental
+uint64_t
 rte_power_poll_stat_fetch(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
diff --git a/lib/librte_rcu/rte_rcu_qsbr.c b/lib/librte_rcu/rte_rcu_qsbr.c
index de25464..ce7f93d 100644
--- a/lib/librte_rcu/rte_rcu_qsbr.c
+++ b/lib/librte_rcu/rte_rcu_qsbr.c
@@ -23,7 +23,7 @@
 #include "rte_rcu_qsbr.h"
 
 /* Get the memory size of QSBR variable */
-size_t __rte_experimental
+size_t
 rte_rcu_qsbr_get_memsize(uint32_t max_threads)
 {
 	size_t sz;
@@ -49,7 +49,7 @@
 }
 
 /* Initialize a quiescent state variable */
-int __rte_experimental
+int
 rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads)
 {
 	size_t sz;
@@ -80,7 +80,7 @@
 /* Register a reader thread to report its quiescent state
  * on a QS variable.
  */
-int __rte_experimental
+int
 rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	unsigned int i, id, success;
@@ -132,7 +132,7 @@
 /* Remove a reader thread, from the list of threads reporting their
  * quiescent state on a QS variable.
  */
-int __rte_experimental
+int
 rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	unsigned int i, id, success;
@@ -186,7 +186,7 @@
 }
 
 /* Wait till the reader threads have entered quiescent state. */
-void __rte_experimental
+void
 rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -206,7 +206,7 @@
 }
 
 /* Dump the details of a single quiescent state variable to a file. */
-int __rte_experimental
+int
 rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v)
 {
 	uint64_t bmap;
diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
index a60ddf9..bc06bc3 100644
--- a/lib/librte_sched/rte_sched.c
+++ b/lib/librte_sched/rte_sched.c
@@ -953,7 +953,7 @@ struct rte_sched_port *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_sched_port_pipe_profile_add(struct rte_sched_port *port,
 	struct rte_sched_pipe_params *params,
 	uint32_t *pipe_profile_id)
diff --git a/lib/librte_security/rte_security.c b/lib/librte_security/rte_security.c
index a222b33..bc81ce1 100644
--- a/lib/librte_security/rte_security.c
+++ b/lib/librte_security/rte_security.c
@@ -33,7 +33,7 @@ struct rte_security_session *
 	return sess;
 }
 
-int __rte_experimental
+int
 rte_security_session_update(struct rte_security_ctx *instance,
 			    struct rte_security_session *sess,
 			    struct rte_security_session_conf *conf)
@@ -49,7 +49,7 @@ struct rte_security_session *
 	return instance->ops->session_get_size(instance->device);
 }
 
-int __rte_experimental
+int
 rte_security_session_stats_get(struct rte_security_ctx *instance,
 			       struct rte_security_session *sess,
 			       struct rte_security_stats *stats)
@@ -86,7 +86,7 @@ struct rte_security_session *
 					       sess, m, params);
 }
 
-void * __rte_experimental
+void *
 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)
 {
 	void *userdata = NULL;
diff --git a/lib/librte_telemetry/rte_telemetry.c b/lib/librte_telemetry/rte_telemetry.c
index a4b82c9..33e9820 100644
--- a/lib/librte_telemetry/rte_telemetry.c
+++ b/lib/librte_telemetry/rte_telemetry.c
@@ -970,7 +970,7 @@ struct json_data {
 	return -1;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_init()
 {
 	int ret;
@@ -1038,7 +1038,7 @@ struct json_data {
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_cleanup(void)
 {
 	int ret;
@@ -1284,7 +1284,7 @@ struct json_data {
 	return sockfd;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_selftest(void)
 {
 	const char *invalid_client_path = SELFTEST_INVALID_CLIENT;
diff --git a/lib/librte_telemetry/rte_telemetry_parser.c b/lib/librte_telemetry/rte_telemetry_parser.c
index e76382a..f0cd14b 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.c
+++ b/lib/librte_telemetry/rte_telemetry_parser.c
@@ -605,7 +605,7 @@ struct rte_telemetry_command {
 	return -1;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_parse(struct telemetry_impl *telemetry, char *socket_rx_data)
 {
 	int ret, action_int;
diff --git a/lib/librte_timer/rte_timer.c b/lib/librte_timer/rte_timer.c
index dd79539..eaeafd7 100644
--- a/lib/librte_timer/rte_timer.c
+++ b/lib/librte_timer/rte_timer.c
@@ -92,7 +92,7 @@ struct rte_timer_data {
 	timer_data = &rte_timer_data_arr[id];				\
 } while (0)
 
-int __rte_experimental
+int
 rte_timer_data_alloc(uint32_t *id_ptr)
 {
 	int i;
@@ -116,7 +116,7 @@ struct rte_timer_data {
 	return -ENOSPC;
 }
 
-int __rte_experimental
+int
 rte_timer_data_dealloc(uint32_t id)
 {
 	struct rte_timer_data *timer_data;
@@ -204,7 +204,7 @@ struct rte_timer_data {
 		  rte_timer_subsystem_init_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_subsystem_init, _v1905, 19.05);
 
-void __rte_experimental
+void
 rte_timer_subsystem_finalize(void)
 {
 	if (!rte_timer_subsystem_initialized)
@@ -573,7 +573,7 @@ struct rte_timer_data {
 		  rte_timer_reset_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_reset, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 		    uint64_t ticks, enum rte_timer_type type,
 		    unsigned int tim_lcore, rte_timer_cb_t fct, void *arg)
@@ -657,7 +657,7 @@ struct rte_timer_data {
 		  rte_timer_stop_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_stop, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
 {
 	struct rte_timer_data *timer_data;
@@ -822,7 +822,7 @@ struct rte_timer_data {
 MAP_STATIC_SYMBOL(int rte_timer_manage(void), rte_timer_manage_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_manage, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_manage(uint32_t timer_data_id,
 		     unsigned int *poll_lcores,
 		     int nb_poll_lcores,
@@ -995,7 +995,7 @@ struct rte_timer_data {
 }
 
 /* Walk pending lists, stopping timers and calling user-specified function */
-int __rte_experimental
+int
 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 		   int nb_walk_lcores,
 		   rte_timer_stop_all_cb_t f, void *f_arg)
@@ -1074,7 +1074,7 @@ struct rte_timer_data {
 		  rte_timer_dump_stats_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_dump_stats, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_dump_stats(uint32_t timer_data_id __rte_unused, FILE *f)
 {
 	struct rte_timer_data *timer_data;
diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
index 24a6698..8e45ce9 100644
--- a/lib/librte_vhost/vdpa.c
+++ b/lib/librte_vhost/vdpa.c
@@ -126,7 +126,7 @@ struct rte_vdpa_device *
 	return vdpa_device_num;
 }
 
-int __rte_experimental
+int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
 {
 	struct virtio_net *dev = get_device(vid);
diff --git a/lib/librte_vhost/vhost_crypto.c b/lib/librte_vhost/vhost_crypto.c
index 8652a77..684fddc 100644
--- a/lib/librte_vhost/vhost_crypto.c
+++ b/lib/librte_vhost/vhost_crypto.c
@@ -1347,7 +1347,7 @@ struct vhost_crypto_data_req {
 	return processed;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 		struct rte_mempool *sess_pool,
 		struct rte_mempool *sess_priv_pool,
@@ -1440,7 +1440,7 @@ struct vhost_crypto_data_req {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_free(int vid)
 {
 	struct virtio_net *dev = get_device(vid);
@@ -1469,7 +1469,7 @@ struct vhost_crypto_data_req {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option)
 {
 	struct virtio_net *dev = get_device(vid);
@@ -1524,7 +1524,7 @@ struct vhost_crypto_data_req {
 	return 0;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 		struct rte_crypto_op **ops, uint16_t nb_ops)
 {
@@ -1634,7 +1634,7 @@ struct vhost_crypto_data_req {
 	return i;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_vhost_crypto_finalize_requests(struct rte_crypto_op **ops,
 		uint16_t nb_ops, int *callfds, uint16_t *nb_callfds)
 {
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (7 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions David Marchand
@ 2019-06-27 11:33 ` David Marchand
  2019-06-27 12:23   ` Adrien Mazarguil
  2019-06-28 19:58 ` [dpdk-dev] [PATCH 0/9] experimental tags fixes Neil Horman
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-27 11:33 UTC (permalink / raw)
  To: dev
  Cc: nhorman, aconole, thomas, Wenzhuo Lu, Konstantin Ananyev,
	Jasvinder Singh, Cristian Dumitrescu, Amr Mokhtar, Fiona Trahe,
	Pablo de Lara, Ashish Gupta, Declan Doherty, Bruce Richardson,
	Joyce Kong, Anatoly Burakov, Harry van Haaren, Ferruh Yigit,
	Andrew Rybchenko, Adrien Mazarguil, Nikhil Rao, Jerin Jacob,
	Bernard Iremonger, Yipeng Wang, Sameh Gobriel, Olivier Matz,
	David Hunt, Honnappa Nagarahalli, Akhil Goyal, Gage Eads,
	Kevin Laatz, Robert Sanford, Erik Gabriel Carrillo,
	Maxime Coquelin, Tiwei Bie, Zhihong Wang

Putting a '__attribute__((deprecated))' in the middle of a function
prototype does not result in the expected result with gcc (while clang
is fine with this syntax).

$ cat deprecated.c
void * __attribute__((deprecated)) incorrect() { return 0; }
__attribute__((deprecated)) void *correct(void) { return 0; }
int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
$ gcc -o deprecated.o -c deprecated.c
deprecated.c: In function ‘main’:
deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
deprecated.c:2) [-Wdeprecated-declarations]
 int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
 ^

Let's enforce the tag is at the very start of the lines, this is not
perfect but we will trust reviewers to catch the other not so easy to
detect patterns.

tag=__rte_experimental
git grep -l [^^]$tag |grep \\.h$ |while read file; do
	[ "$file" != 'lib/librte_eal/common/include/rte_compat.h' ] ||
		continue
	sed -i -e 's#^\(.*\)  *'$tag'#'$tag' \1#' $file
	sed -i -e 's#^\(..*\)'$tag'#'$tag' \1#' $file
done

Special mention for rte_mbuf_data_addr_default():

There is either a bug or a (not yet understood) issue with gcc.
gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
calls rte_mbuf_buf_addr() which itself is experimental.
This results in a build warning when not accepting experimental apis
from sources just including rte_mbuf.h.

For this specific case, we hide the call to rte_mbuf_buf_addr() under
the ALLOW_EXPERIMENTAL_API flag.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 devtools/checkpatches.sh                           |  5 +++
 drivers/net/ixgbe/rte_pmd_ixgbe.h                  | 10 ++---
 drivers/net/softnic/rte_eth_softnic.h              |  2 +-
 lib/librte_bbdev/rte_bbdev.h                       | 48 ++++++++++----------
 lib/librte_bbdev/rte_bbdev_op.h                    | 12 ++---
 lib/librte_bbdev/rte_bbdev_pmd.h                   |  8 ++--
 lib/librte_bpf/rte_bpf.h                           | 12 ++---
 lib/librte_bpf/rte_bpf_ethdev.h                    |  8 ++--
 lib/librte_compressdev/rte_comp.h                  | 12 ++---
 lib/librte_compressdev/rte_compressdev.h           | 44 +++++++++---------
 lib/librte_compressdev/rte_compressdev_pmd.h       | 12 ++---
 lib/librte_cryptodev/rte_cryptodev.h               | 28 ++++++------
 .../common/include/arch/x86/rte_atomic_64.h        |  2 +-
 lib/librte_eal/common/include/generic/rte_atomic.h |  2 +-
 lib/librte_eal/common/include/generic/rte_cycles.h |  2 +-
 lib/librte_eal/common/include/generic/rte_rwlock.h |  4 +-
 .../common/include/generic/rte_ticketlock.h        | 18 ++++----
 lib/librte_eal/common/include/rte_dev.h            | 18 ++++----
 lib/librte_eal/common/include/rte_eal.h            | 12 ++---
 lib/librte_eal/common/include/rte_fbarray.h        | 52 +++++++++++-----------
 lib/librte_eal/common/include/rte_interrupts.h     |  2 +-
 lib/librte_eal/common/include/rte_malloc.h         | 20 ++++-----
 lib/librte_eal/common/include/rte_memory.h         | 42 ++++++++---------
 lib/librte_eal/common/include/rte_service.h        |  6 +--
 lib/librte_ethdev/rte_ethdev.h                     | 24 +++++-----
 lib/librte_ethdev/rte_ethdev_driver.h              | 10 ++---
 lib/librte_ethdev/rte_flow_driver.h                |  2 +-
 lib/librte_ethdev/rte_mtr.h                        | 24 +++++-----
 lib/librte_eventdev/rte_event_eth_rx_adapter.h     |  4 +-
 lib/librte_flow_classify/rte_flow_classify.h       | 14 +++---
 lib/librte_hash/rte_hash.h                         |  2 +-
 lib/librte_ip_frag/rte_ip_frag.h                   |  2 +-
 lib/librte_ipsec/rte_ipsec.h                       |  6 +--
 lib/librte_ipsec/rte_ipsec_group.h                 |  4 +-
 lib/librte_ipsec/rte_ipsec_sa.h                    |  8 ++--
 lib/librte_kni/rte_kni.h                           |  2 +-
 lib/librte_mbuf/rte_mbuf.h                         | 15 +++++--
 lib/librte_meter/rte_meter.h                       | 12 ++---
 lib/librte_net/rte_arp.h                           |  2 +-
 lib/librte_net/rte_net.h                           |  2 +-
 lib/librte_pipeline/rte_port_in_action.h           | 16 +++----
 lib/librte_pipeline/rte_table_action.h             | 32 ++++++-------
 lib/librte_power/rte_power_empty_poll.h            | 14 +++---
 lib/librte_rcu/rte_rcu_qsbr.h                      | 26 +++++------
 lib/librte_sched/rte_sched.h                       |  2 +-
 lib/librte_security/rte_security.h                 |  6 +--
 lib/librte_stack/rte_stack.h                       | 14 +++---
 lib/librte_stack/rte_stack_lf.h                    |  4 +-
 lib/librte_stack/rte_stack_std.h                   |  6 +--
 lib/librte_table/rte_table_hash_func.h             | 18 ++++----
 lib/librte_telemetry/rte_telemetry.h               |  6 +--
 lib/librte_telemetry/rte_telemetry_parser.h        |  2 +-
 lib/librte_timer/rte_timer.h                       | 16 +++----
 lib/librte_vhost/rte_vdpa.h                        | 14 +++---
 lib/librte_vhost/rte_vhost.h                       | 22 ++++-----
 lib/librte_vhost/rte_vhost_crypto.h                | 10 ++---
 56 files changed, 367 insertions(+), 355 deletions(-)

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 7d61dbe..25e3cc5 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -95,6 +95,11 @@ check_experimental_tags() { # <patch>
 			print "Please only put __rte_experimental tags in headers ("current_file")";
 			ret = 1;
 		}
+		if ($1 != "+__rte_experimental" &&
+		    ($1 != "+" || $2 != "__rte_experimental")) {
+			print "__rte_experimental must be at the start of functions prototype.";
+			ret = 1;
+		}
 	}
 	END {
 		exit ret;
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.h b/drivers/net/ixgbe/rte_pmd_ixgbe.h
index 84c6884..c0e91c8 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.h
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.h
@@ -584,7 +584,7 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_SWFW_SYNC) If sw/fw semaphore acquisition failed
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_ixgbe_mdio_lock(uint16_t port);
 
 /**
@@ -597,7 +597,7 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENOTSUP) if hardware doesn't support.
  *   - (-ENODEV) if *port* invalid.
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_ixgbe_mdio_unlock(uint16_t port);
 
 /**
@@ -618,7 +618,7 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_PHY) If PHY read command failed
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 				 uint32_t dev_type, uint16_t *phy_data);
 
@@ -641,7 +641,7 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_PHY) If PHY read command failed
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 				  uint32_t dev_type, uint16_t phy_data);
 
@@ -719,6 +719,6 @@ enum {
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable);
 #endif /* _PMD_IXGBE_H_ */
diff --git a/drivers/net/softnic/rte_eth_softnic.h b/drivers/net/softnic/rte_eth_softnic.h
index e8ba2bc..53cd48a 100644
--- a/drivers/net/softnic/rte_eth_softnic.h
+++ b/drivers/net/softnic/rte_eth_softnic.h
@@ -75,7 +75,7 @@
  * @return
  *    Zero on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_pmd_softnic_manage(uint16_t port_id);
 
 #ifdef __cplusplus
diff --git a/lib/librte_bbdev/rte_bbdev.h b/lib/librte_bbdev/rte_bbdev.h
index d131692..3775dc4 100644
--- a/lib/librte_bbdev/rte_bbdev.h
+++ b/lib/librte_bbdev/rte_bbdev.h
@@ -55,7 +55,7 @@ enum rte_bbdev_state {
  * @return
  *   The total number of usable devices.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_bbdev_count(void);
 
 /**
@@ -67,7 +67,7 @@ enum rte_bbdev_state {
  * @return
  *   true if device ID is valid and device is attached, false otherwise.
  */
-bool __rte_experimental
+__rte_experimental bool
 rte_bbdev_is_valid(uint16_t dev_id);
 
 /**
@@ -80,7 +80,7 @@ enum rte_bbdev_state {
  *   - The next device, or
  *   - RTE_BBDEV_MAX_DEVS if none found
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_bbdev_find_next(uint16_t dev_id);
 
 /** Iterate through all enabled devices */
@@ -109,7 +109,7 @@ enum rte_bbdev_state {
  *   - -EBUSY if the identified device has already started
  *   - -ENOMEM if unable to allocate memory
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
 
 /**
@@ -126,7 +126,7 @@ enum rte_bbdev_state {
  *   - -EBUSY if the identified device has already started
  *   - -ENOTSUP if the interrupts are not supported by the device
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_intr_enable(uint16_t dev_id);
 
 /** Device queue configuration structure */
@@ -155,7 +155,7 @@ struct rte_bbdev_queue_conf {
  *   - EINVAL if the identified queue size or priority are invalid
  *   - EBUSY if the identified queue or its device have already started
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 		const struct rte_bbdev_queue_conf *conf);
 
@@ -170,7 +170,7 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_start(uint16_t dev_id);
 
 /**
@@ -183,7 +183,7 @@ struct rte_bbdev_queue_conf {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_stop(uint16_t dev_id);
 
 /**
@@ -196,7 +196,7 @@ struct rte_bbdev_queue_conf {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_close(uint16_t dev_id);
 
 /**
@@ -213,7 +213,7 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -228,7 +228,7 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
 
 /** Device statistics. */
@@ -261,7 +261,7 @@ struct rte_bbdev_stats {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
 
 /**
@@ -272,7 +272,7 @@ struct rte_bbdev_stats {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_stats_reset(uint16_t dev_id);
 
 /** Device information supplied by the device's driver */
@@ -332,7 +332,7 @@ struct rte_bbdev_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
 
 /** Queue information */
@@ -358,7 +358,7 @@ struct rte_bbdev_queue_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_queue_info *queue_info);
 
@@ -466,7 +466,7 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually enqueued (this is the number of processed
  *   entries in the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -496,7 +496,7 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually enqueued (this is the number of processed
  *   entries in the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -526,7 +526,7 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually dequeued (this is the number of entries
  *   copied into the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -557,7 +557,7 @@ struct __rte_cache_aligned rte_bbdev {
  *   copied into the @p ops array).
  */
 
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_bbdev_dequeue_dec_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -608,7 +608,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  * @return
  *   Zero on success, negative value on failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg);
 
@@ -631,7 +631,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - EINVAL if invalid parameter pointer is provided
  *   - EAGAIN if the provided callback pointer does not exist
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg);
 
@@ -651,7 +651,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -667,7 +667,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -694,7 +694,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - ENOTSUP if interrupts are not supported by the identified device
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 		void *data);
 
diff --git a/lib/librte_bbdev/rte_bbdev_op.h b/lib/librte_bbdev/rte_bbdev_op.h
index 6be53f5..a36625a 100644
--- a/lib/librte_bbdev/rte_bbdev_op.h
+++ b/lib/librte_bbdev/rte_bbdev_op.h
@@ -461,7 +461,7 @@ struct rte_bbdev_op_pool_private {
  *   Operation type as string or NULL if op_type is invalid
  *
  */
-const char* __rte_experimental
+__rte_experimental const char*
 rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type);
 
 /**
@@ -484,7 +484,7 @@ struct rte_bbdev_op_pool_private {
  *   - Pointer to a mempool on success,
  *   - NULL pointer on failure.
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental struct rte_mempool *
 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 		unsigned int num_elements, unsigned int cache_size,
 		int socket_id);
@@ -503,7 +503,7 @@ struct rte_mempool * __rte_experimental
  *   - 0 on success
  *   - EINVAL if invalid mempool is provided
  */
-static inline int __rte_experimental
+__rte_experimental static inline int
 rte_bbdev_enc_op_alloc_bulk(struct rte_mempool *mempool,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -538,7 +538,7 @@ struct rte_mempool * __rte_experimental
  *   - 0 on success
  *   - EINVAL if invalid mempool is provided
  */
-static inline int __rte_experimental
+__rte_experimental static inline int
 rte_bbdev_dec_op_alloc_bulk(struct rte_mempool *mempool,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -569,7 +569,7 @@ struct rte_mempool * __rte_experimental
  * @param num_ops
  *   Number of structures
  */
-static inline void __rte_experimental
+__rte_experimental static inline void
 rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
 {
 	if (num_ops > 0)
@@ -586,7 +586,7 @@ struct rte_mempool * __rte_experimental
  * @param num_ops
  *   Number of structures
  */
-static inline void __rte_experimental
+__rte_experimental static inline void
 rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
 {
 	if (num_ops > 0)
diff --git a/lib/librte_bbdev/rte_bbdev_pmd.h b/lib/librte_bbdev/rte_bbdev_pmd.h
index db9a04c..b5aa267 100644
--- a/lib/librte_bbdev/rte_bbdev_pmd.h
+++ b/lib/librte_bbdev/rte_bbdev_pmd.h
@@ -43,7 +43,7 @@
  * @return
  *   - Slot in the rte_bbdev array for a new device;
  */
-struct rte_bbdev * __rte_experimental
+__rte_experimental struct rte_bbdev *
 rte_bbdev_allocate(const char *name);
 
 /**
@@ -55,7 +55,7 @@ struct rte_bbdev * __rte_experimental
  * @return
  *   - 0 on success, negative on error
  */
-int __rte_experimental
+__rte_experimental int
 rte_bbdev_release(struct rte_bbdev *bbdev);
 
 /**
@@ -69,7 +69,7 @@ struct rte_bbdev * __rte_experimental
  *   - NULL otherwise
  *
  */
-struct rte_bbdev * __rte_experimental
+__rte_experimental struct rte_bbdev *
 rte_bbdev_get_named_dev(const char *name);
 
 /**
@@ -187,7 +187,7 @@ struct rte_bbdev_ops {
  * @param ret_param
  *   To pass data back to user application.
  */
-void __rte_experimental
+__rte_experimental void
 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	enum rte_bbdev_event_type event, void *ret_param);
 
diff --git a/lib/librte_bpf/rte_bpf.h b/lib/librte_bpf/rte_bpf.h
index c8b9601..2f275ed 100644
--- a/lib/librte_bpf/rte_bpf.h
+++ b/lib/librte_bpf/rte_bpf.h
@@ -113,7 +113,7 @@ struct rte_bpf_jit {
  * @param bpf
  *   BPF handle to destroy.
  */
-void __rte_experimental
+__rte_experimental void
 rte_bpf_destroy(struct rte_bpf *bpf);
 
 /**
@@ -128,7 +128,7 @@ struct rte_bpf_jit {
  *   - EINVAL - invalid parameter passed to function
  *   - ENOMEM - can't reserve enough memory
  */
-struct rte_bpf * __rte_experimental
+__rte_experimental struct rte_bpf *
 rte_bpf_load(const struct rte_bpf_prm *prm);
 
 /**
@@ -151,7 +151,7 @@ struct rte_bpf * __rte_experimental
  *   - EINVAL - invalid parameter passed to function
  *   - ENOMEM - can't reserve enough memory
  */
-struct rte_bpf * __rte_experimental
+__rte_experimental struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 		const char *sname);
 /**
@@ -164,7 +164,7 @@ struct rte_bpf * __rte_experimental
  * @return
  *   BPF execution return value.
  */
-uint64_t __rte_experimental
+__rte_experimental uint64_t
 rte_bpf_exec(const struct rte_bpf *bpf, void *ctx);
 
 /**
@@ -181,7 +181,7 @@ struct rte_bpf * __rte_experimental
  * @return
  *   number of successfully processed inputs.
  */
-uint32_t __rte_experimental
+__rte_experimental uint32_t
 rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 		uint32_t num);
 
@@ -196,7 +196,7 @@ struct rte_bpf * __rte_experimental
  *   - -EINVAL if the parameters are invalid.
  *   - Zero if operation completed successfully.
  */
-int __rte_experimental
+__rte_experimental int
 rte_bpf_get_jit(const struct rte_bpf *bpf, struct rte_bpf_jit *jit);
 
 #ifdef __cplusplus
diff --git a/lib/librte_bpf/rte_bpf_ethdev.h b/lib/librte_bpf/rte_bpf_ethdev.h
index 1943372..0a63ac2 100644
--- a/lib/librte_bpf/rte_bpf_ethdev.h
+++ b/lib/librte_bpf/rte_bpf_ethdev.h
@@ -45,7 +45,7 @@ enum {
  * @param queue
  *   The identifier of the RX queue on the given port
  */
-void __rte_experimental
+__rte_experimental void
 rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue);
 
 /**
@@ -57,7 +57,7 @@ enum {
  * @param queue
  *   The identifier of the TX queue on the given port
  */
-void __rte_experimental
+__rte_experimental void
 rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue);
 
 /**
@@ -80,7 +80,7 @@ enum {
  * @return
  *   Zero on successful completion or negative error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags);
@@ -105,7 +105,7 @@ enum {
  * @return
  *   Zero on successful completion or negative error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags);
diff --git a/lib/librte_compressdev/rte_comp.h b/lib/librte_compressdev/rte_comp.h
index 67423bd..a4f35e4 100644
--- a/lib/librte_compressdev/rte_comp.h
+++ b/lib/librte_compressdev/rte_comp.h
@@ -420,7 +420,7 @@ struct rte_comp_op {
  *  - On success pointer to mempool
  *  - On failure NULL
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental struct rte_mempool *
 rte_comp_op_pool_create(const char *name,
 		unsigned int nb_elts, unsigned int cache_size,
 		uint16_t user_size, int socket_id);
@@ -435,7 +435,7 @@ struct rte_mempool * __rte_experimental
  * - On success returns a valid rte_comp_op structure
  * - On failure returns NULL
  */
-struct rte_comp_op * __rte_experimental
+__rte_experimental struct rte_comp_op *
 rte_comp_op_alloc(struct rte_mempool *mempool);
 
 /**
@@ -451,7 +451,7 @@ struct rte_comp_op * __rte_experimental
  *   - nb_ops: Success, the nb_ops requested was allocated
  *   - 0: Not enough entries in the mempool; no ops are retrieved.
  */
-int __rte_experimental
+__rte_experimental int
 rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -463,7 +463,7 @@ struct rte_comp_op * __rte_experimental
  * @param op
  *   Compress operation
  */
-void __rte_experimental
+__rte_experimental void
 rte_comp_op_free(struct rte_comp_op *op);
 
 /**
@@ -477,7 +477,7 @@ struct rte_comp_op * __rte_experimental
  * @param nb_ops
  *   Number of operations to free
  */
-void __rte_experimental
+__rte_experimental void
 rte_comp_op_bulk_free(struct rte_comp_op **ops, uint16_t nb_ops);
 
 /**
@@ -489,7 +489,7 @@ struct rte_comp_op * __rte_experimental
  * @return
  *   The name of this flag, or NULL if it's not a valid feature flag.
  */
-const char * __rte_experimental
+__rte_experimental const char *
 rte_comp_get_feature_name(uint64_t flag);
 
 #ifdef __cplusplus
diff --git a/lib/librte_compressdev/rte_compressdev.h b/lib/librte_compressdev/rte_compressdev.h
index d3c0000..c3d7797 100644
--- a/lib/librte_compressdev/rte_compressdev.h
+++ b/lib/librte_compressdev/rte_compressdev.h
@@ -50,7 +50,7 @@ struct rte_compressdev_capabilities {
 #define RTE_COMP_END_OF_CAPABILITIES_LIST() \
 	{ RTE_COMP_ALGO_UNSPECIFIED }
 
-const struct rte_compressdev_capabilities * __rte_experimental
+__rte_experimental const struct rte_compressdev_capabilities *
 rte_compressdev_capability_get(uint8_t dev_id,
 			enum rte_comp_algorithm algo);
 
@@ -89,7 +89,7 @@ struct rte_compressdev_capabilities {
  * @return
  *   The name of this flag, or NULL if it's not a valid feature flag.
  */
-const char * __rte_experimental
+__rte_experimental const char *
 rte_compressdev_get_feature_name(uint64_t flag);
 
 /**  comp device information */
@@ -127,7 +127,7 @@ struct rte_compressdev_stats {
  *   - Returns compress device identifier on success.
  *   - Return -1 on failure to find named compress device.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_get_dev_id(const char *name);
 
 /**
@@ -139,7 +139,7 @@ struct rte_compressdev_stats {
  *   - Returns compress device name.
  *   - Returns NULL if compress device is not present.
  */
-const char * __rte_experimental
+__rte_experimental const char *
 rte_compressdev_name_get(uint8_t dev_id);
 
 /**
@@ -149,7 +149,7 @@ struct rte_compressdev_stats {
  * @return
  *   - The total number of usable compress devices.
  */
-uint8_t __rte_experimental
+__rte_experimental uint8_t
 rte_compressdev_count(void);
 
 /**
@@ -166,7 +166,7 @@ struct rte_compressdev_stats {
  * @return
  *   Returns number of attached compress devices.
  */
-uint8_t __rte_experimental
+__rte_experimental uint8_t
 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 		uint8_t nb_devices);
 
@@ -180,7 +180,7 @@ struct rte_compressdev_stats {
  *   a default of zero if the socket could not be determined.
  *   -1 if returned is the dev_id value is out of range.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_socket_id(uint8_t dev_id);
 
 /** Compress device configuration structure */
@@ -210,7 +210,7 @@ struct rte_compressdev_config {
  *   - 0: Success, device configured.
  *   - <0: Error code returned by the driver configuration function.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_configure(uint8_t dev_id,
 			struct rte_compressdev_config *config);
 
@@ -228,7 +228,7 @@ struct rte_compressdev_config {
  *   - 0: Success, device started.
  *   - <0: Error code of the driver device start function.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_start(uint8_t dev_id);
 
 /**
@@ -238,7 +238,7 @@ struct rte_compressdev_config {
  * @param dev_id
  *   Compress device identifier
  */
-void __rte_experimental
+__rte_experimental void
 rte_compressdev_stop(uint8_t dev_id);
 
 /**
@@ -255,7 +255,7 @@ struct rte_compressdev_config {
  *  - 0 on successfully closing device
  *  - <0 on failure to close device
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_close(uint8_t dev_id);
 
 /**
@@ -281,7 +281,7 @@ struct rte_compressdev_config {
  *   - 0: Success, queue pair correctly set up.
  *   - <0: Queue pair configuration failed
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		uint32_t max_inflight_ops, int socket_id);
 
@@ -293,7 +293,7 @@ struct rte_compressdev_config {
  * @return
  *   - The number of configured queue pairs.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_compressdev_queue_pair_count(uint8_t dev_id);
 
 
@@ -310,7 +310,7 @@ struct rte_compressdev_config {
  *   - Zero if successful.
  *   - Non-zero otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats);
 
 /**
@@ -319,7 +319,7 @@ struct rte_compressdev_config {
  * @param dev_id
  *   The identifier of the device.
  */
-void __rte_experimental
+__rte_experimental void
 rte_compressdev_stats_reset(uint8_t dev_id);
 
 /**
@@ -336,7 +336,7 @@ struct rte_compressdev_config {
  * The element after the last valid element has it's op field set to
  * RTE_COMP_ALGO_LIST_END.
  */
-void __rte_experimental
+__rte_experimental void
 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info);
 
 /**
@@ -393,7 +393,7 @@ struct rte_compressdev_config {
  *   of pointers to *rte_comp_op* structures effectively supplied to the
  *   *ops* array.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -447,7 +447,7 @@ struct rte_compressdev_config {
  *   comp devices queue is full or if invalid parameters are specified in
  *   a *rte_comp_op*.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -475,7 +475,7 @@ struct rte_compressdev_config {
  *  - Returns -ENOMEM if the private stream could not be allocated.
  *
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_stream_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **stream);
@@ -496,7 +496,7 @@ struct rte_compressdev_config {
  *  - Returns -ENOTSUP if comp device does not support STATEFUL operations.
  *  - Returns -EBUSY if can't free stream as there are inflight operations
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_stream_free(uint8_t dev_id, void *stream);
 
 /**
@@ -522,7 +522,7 @@ struct rte_compressdev_config {
  *  - Returns -ENOTSUP if comp device does not support the comp transform.
  *  - Returns -ENOMEM if the private_xform could not be allocated.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_private_xform_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **private_xform);
@@ -543,7 +543,7 @@ struct rte_compressdev_config {
  *  - <0 in error cases
  *  - Returns -EINVAL if input parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_private_xform_free(uint8_t dev_id, void *private_xform);
 
 #ifdef __cplusplus
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.h b/lib/librte_compressdev/rte_compressdev_pmd.h
index 043353c..7d947e0 100644
--- a/lib/librte_compressdev/rte_compressdev_pmd.h
+++ b/lib/librte_compressdev/rte_compressdev_pmd.h
@@ -59,7 +59,7 @@ struct rte_compressdev_global {
  * @return
  *   - The rte_compressdev structure pointer for the given device identifier.
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name);
 
 /**
@@ -299,7 +299,7 @@ struct rte_compressdev_ops {
  * @return
  *   - Slot in the rte_dev_devices array for a new device;
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental struct rte_compressdev *
 rte_compressdev_pmd_allocate(const char *name, int socket_id);
 
 /**
@@ -314,7 +314,7 @@ struct rte_compressdev * __rte_experimental
  * @return
  *   - 0 on success, negative on error
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_pmd_release_device(struct rte_compressdev *dev);
 
 
@@ -336,7 +336,7 @@ struct rte_compressdev * __rte_experimental
  *  - 0 on success
  *  - errno on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_pmd_parse_input_args(
 		struct rte_compressdev_pmd_init_params *params,
 		const char *args);
@@ -357,7 +357,7 @@ struct rte_compressdev * __rte_experimental
  *  - comp device instance on success
  *  - NULL on creation failure
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental struct rte_compressdev *
 rte_compressdev_pmd_create(const char *name,
 		struct rte_device *device,
 		size_t private_data_size,
@@ -375,7 +375,7 @@ struct rte_compressdev * __rte_experimental
  *  - 0 on success
  *  - errno on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_compressdev_pmd_destroy(struct rte_compressdev *dev);
 
 #ifdef __cplusplus
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index 2d4f6d7..09a0468 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -230,7 +230,7 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return description of the asymmetric crypto capability if exist.
  *   - Return NULL if the capability not exist.
  */
-const struct rte_cryptodev_asymmetric_xform_capability * __rte_experimental
+__rte_experimental const struct rte_cryptodev_asymmetric_xform_capability *
 rte_cryptodev_asym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_asym_capability_idx *idx);
 
@@ -299,7 +299,7 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return 1 if the op type is supported
  *   - Return 0 if unsupported
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_xform_capability_check_optype(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 		enum rte_crypto_asym_op_type op_type);
@@ -314,7 +314,7 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return 0 if the parameters are in range of the capability.
  *   - Return -1 if the parameters are out of range of the capability.
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_xform_capability_check_modlen(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 		uint16_t modlen);
@@ -375,7 +375,7 @@ struct rte_cryptodev_asym_capability_idx {
  * - Return -1 if string is not valid
  * - Return 0 if the string is valid
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 		const char *xform_string);
 
@@ -1002,7 +1002,7 @@ struct rte_cryptodev_asym_session {
  *  - On success return size of the session
  *  - On failure returns 0
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental struct rte_mempool *
 rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t elt_size, uint32_t cache_size, uint16_t priv_size,
 	int socket_id);
@@ -1028,7 +1028,7 @@ struct rte_cryptodev_sym_session *
  *  - On success return pointer to asym-session
  *  - On failure returns NULL
  */
-struct rte_cryptodev_asym_session * __rte_experimental
+__rte_experimental struct rte_cryptodev_asym_session *
 rte_cryptodev_asym_session_create(struct rte_mempool *mempool);
 
 /**
@@ -1058,7 +1058,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - -EINVAL if session is NULL.
  *  - -EBUSY if not all device private data has been freed.
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess);
 
 /**
@@ -1098,7 +1098,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - -ENOTSUP if crypto device does not support the crypto transform.
  *  - -ENOMEM if the private session could not be allocated.
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_session_init(uint8_t dev_id,
 			struct rte_cryptodev_asym_session *sess,
 			struct rte_crypto_asym_xform *xforms,
@@ -1132,7 +1132,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - 0 if successful.
  *  - -EINVAL if device is invalid or session is NULL.
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_asym_session_clear(uint8_t dev_id,
 			struct rte_cryptodev_asym_session *sess);
 
@@ -1157,7 +1157,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *   the private data size defined within sess.
  *   - If sess is NULL, return 0.
  */
-unsigned int __rte_experimental
+__rte_experimental unsigned int
 rte_cryptodev_sym_get_existing_header_session_size(
 		struct rte_cryptodev_sym_session *sess);
 
@@ -1167,7 +1167,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  * @return
  *   Size of the asymmetric header session.
  */
-unsigned int __rte_experimental
+__rte_experimental unsigned int
 rte_cryptodev_asym_get_header_session_size(void);
 
 /**
@@ -1194,7 +1194,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *   - Size of the asymmetric private data, if successful
  *   - 0 if device is invalid or does not have private session
  */
-unsigned int __rte_experimental
+__rte_experimental unsigned int
 rte_cryptodev_asym_get_private_session_size(uint8_t dev_id);
 
 /**
@@ -1229,7 +1229,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - On success, zero.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_cryptodev_sym_session_set_user_data(
 					struct rte_cryptodev_sym_session *sess,
 					void *data,
@@ -1245,7 +1245,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - On success return pointer to user data.
  *  - On failure returns NULL.
  */
-void * __rte_experimental
+__rte_experimental void *
 rte_cryptodev_sym_session_get_user_data(
 					struct rte_cryptodev_sym_session *sess);
 
diff --git a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
index 6232c57..4943a98 100644
--- a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
+++ b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
@@ -224,7 +224,7 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v)
 	};
 } __rte_aligned(16) rte_int128_t;
 
-static inline int __rte_experimental
+__rte_experimental static inline int
 rte_atomic128_cmp_exchange(rte_int128_t *dst,
 			   rte_int128_t *exp,
 			   const rte_int128_t *src,
diff --git a/lib/librte_eal/common/include/generic/rte_atomic.h b/lib/librte_eal/common/include/generic/rte_atomic.h
index 9958543..1eb55d9 100644
--- a/lib/librte_eal/common/include/generic/rte_atomic.h
+++ b/lib/librte_eal/common/include/generic/rte_atomic.h
@@ -1121,7 +1121,7 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v)
  * @return
  *   Non-zero on success; 0 on failure.
  */
-static inline int __rte_experimental
+__rte_experimental static inline int
 rte_atomic128_cmp_exchange(rte_int128_t *dst,
 			   rte_int128_t *exp,
 			   const rte_int128_t *src,
diff --git a/lib/librte_eal/common/include/generic/rte_cycles.h b/lib/librte_eal/common/include/generic/rte_cycles.h
index d318b91..4c7e3e0 100644
--- a/lib/librte_eal/common/include/generic/rte_cycles.h
+++ b/lib/librte_eal/common/include/generic/rte_cycles.h
@@ -165,7 +165,7 @@ enum timer_source {
  * @param us
  *   Number of microseconds to wait.
  */
-void __rte_experimental
+__rte_experimental void
 rte_delay_us_sleep(unsigned int us);
 
 /**
diff --git a/lib/librte_eal/common/include/generic/rte_rwlock.h b/lib/librte_eal/common/include/generic/rte_rwlock.h
index 31608fa..4139a04 100644
--- a/lib/librte_eal/common/include/generic/rte_rwlock.h
+++ b/lib/librte_eal/common/include/generic/rte_rwlock.h
@@ -88,7 +88,7 @@
  *   - -EBUSY if lock could not be acquired for reading because a
  *     writer holds the lock
  */
-static inline __rte_experimental int
+__rte_experimental static inline int
 rte_rwlock_read_trylock(rte_rwlock_t *rwl)
 {
 	int32_t x;
@@ -131,7 +131,7 @@
  *   - -EBUSY if lock could not be acquired for writing because
  *     it was already locked for reading or writing
  */
-static inline __rte_experimental int
+__rte_experimental static inline int
 rte_rwlock_write_trylock(rte_rwlock_t *rwl)
 {
 	int32_t x;
diff --git a/lib/librte_eal/common/include/generic/rte_ticketlock.h b/lib/librte_eal/common/include/generic/rte_ticketlock.h
index 191146f..d93d387 100644
--- a/lib/librte_eal/common/include/generic/rte_ticketlock.h
+++ b/lib/librte_eal/common/include/generic/rte_ticketlock.h
@@ -48,7 +48,7 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_init(rte_ticketlock_t *tl)
 {
 	__atomic_store_n(&tl->tickets, 0, __ATOMIC_RELAXED);
@@ -60,7 +60,7 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_lock(rte_ticketlock_t *tl)
 {
 	uint16_t me = __atomic_fetch_add(&tl->s.next, 1, __ATOMIC_RELAXED);
@@ -74,7 +74,7 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_unlock(rte_ticketlock_t *tl)
 {
 	uint16_t i = __atomic_load_n(&tl->s.current, __ATOMIC_RELAXED);
@@ -89,7 +89,7 @@
  * @return
  *   1 if the lock is successfully taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental static inline int
 rte_ticketlock_trylock(rte_ticketlock_t *tl)
 {
 	rte_ticketlock_t old, new;
@@ -113,7 +113,7 @@
  * @return
  *   1 if the lock is currently taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental static inline int
 rte_ticketlock_is_locked(rte_ticketlock_t *tl)
 {
 	rte_ticketlock_t tic;
@@ -144,7 +144,7 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_recursive_init(rte_ticketlock_recursive_t *tlr)
 {
 	rte_ticketlock_init(&tlr->tl);
@@ -158,7 +158,7 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_recursive_lock(rte_ticketlock_recursive_t *tlr)
 {
 	int id = rte_gettid();
@@ -176,7 +176,7 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental static inline void
 rte_ticketlock_recursive_unlock(rte_ticketlock_recursive_t *tlr)
 {
 	if (--(tlr->count) == 0) {
@@ -194,7 +194,7 @@
  * @return
  *   1 if the lock is successfully taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental static inline int
 rte_ticketlock_recursive_trylock(rte_ticketlock_recursive_t *tlr)
 {
 	int id = rte_gettid();
diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index a17023d..6c3b8be 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -363,7 +363,7 @@ struct rte_device *
  *  - On success, zero.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_event_callback_register(const char *device_name,
 				rte_dev_event_cb_fn cb_fn,
 				void *cb_arg);
@@ -387,7 +387,7 @@ struct rte_device *
  *  - On success, return the number of callback entities removed.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_event_callback_unregister(const char *device_name,
 				  rte_dev_event_cb_fn cb_fn,
 				  void *cb_arg);
@@ -404,7 +404,7 @@ struct rte_device *
  * @param event
  *  the device event type.
  */
-void  __rte_experimental
+__rte_experimental void
 rte_dev_event_callback_process(const char *device_name,
 			       enum rte_dev_event_type event);
 
@@ -418,7 +418,7 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_event_monitor_start(void);
 
 /**
@@ -431,7 +431,7 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_event_monitor_stop(void);
 
 /**
@@ -444,7 +444,7 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_hotplug_handle_enable(void);
 
 /**
@@ -457,7 +457,7 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_hotplug_handle_disable(void);
 
 /**
@@ -480,7 +480,7 @@ struct rte_device *
  *	0 if mapping was successful.
  *	Negative value and rte_errno is set otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len);
 
 /**
@@ -503,7 +503,7 @@ struct rte_device *
  *	0 if un-mapping was successful.
  *	Negative value and rte_errno is set otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_dev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
 		  size_t len);
 
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index 27808a3..1500ded 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -275,7 +275,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - 0 on success.
  *  - (<0) on failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mp_action_register(const char *name, rte_mp_t action);
 
 /**
@@ -295,7 +295,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *   The name argument plays as the nonredundant key to find the action.
  *
  */
-void __rte_experimental
+__rte_experimental void
 rte_mp_action_unregister(const char *name);
 
 /**
@@ -314,7 +314,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mp_sendmsg(struct rte_mp_msg *msg);
 
 /**
@@ -348,7 +348,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 	       const struct timespec *ts);
 
@@ -377,7 +377,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb);
 
@@ -405,7 +405,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer);
 
 /**
diff --git a/lib/librte_eal/common/include/rte_fbarray.h b/lib/librte_eal/common/include/rte_fbarray.h
index 33841ca..57fb204 100644
--- a/lib/librte_eal/common/include/rte_fbarray.h
+++ b/lib/librte_eal/common/include/rte_fbarray.h
@@ -75,7 +75,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 		unsigned int elt_sz);
 
@@ -97,7 +97,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_attach(struct rte_fbarray *arr);
 
 
@@ -118,7 +118,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_destroy(struct rte_fbarray *arr);
 
 
@@ -136,7 +136,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_detach(struct rte_fbarray *arr);
 
 
@@ -153,7 +153,7 @@ struct rte_fbarray {
  *  - non-NULL pointer on success.
  *  - NULL on failure, with ``rte_errno`` indicating reason for failure.
  */
-void * __rte_experimental
+__rte_experimental void *
 rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -170,7 +170,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt);
 
 
@@ -187,7 +187,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -204,7 +204,7 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -222,7 +222,7 @@ struct rte_fbarray {
  *  - 0 if element is unused.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -239,7 +239,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -256,7 +256,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -276,7 +276,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -297,7 +297,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -315,7 +315,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_contig_free(struct rte_fbarray *arr,
 		unsigned int start);
 
@@ -333,7 +333,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start);
 
 /**
@@ -349,7 +349,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -366,7 +366,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -387,7 +387,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -409,7 +409,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -428,7 +428,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr,
 		unsigned int start);
 
@@ -447,7 +447,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -464,7 +464,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -481,7 +481,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -499,7 +499,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -517,7 +517,7 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -530,7 +530,7 @@ struct rte_fbarray {
  * @param f
  *   File object to dump information into.
  */
-void __rte_experimental
+__rte_experimental void
 rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f);
 
 #ifdef __cplusplus
diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h
index 225dae2..109e5a3 100644
--- a/lib/librte_eal/common/include/rte_interrupts.h
+++ b/lib/librte_eal/common/include/rte_interrupts.h
@@ -88,7 +88,7 @@ int rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
  *  - On success, return the number of callback entities marked for remove.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn);
diff --git a/lib/librte_eal/common/include/rte_malloc.h b/lib/librte_eal/common/include/rte_malloc.h
index 5ff1a39..429f7f8 100644
--- a/lib/librte_eal/common/include/rte_malloc.h
+++ b/lib/librte_eal/common/include/rte_malloc.h
@@ -153,7 +153,7 @@ struct rte_malloc_socket_stats {
  *     align is not a power of two).
  *   - Otherwise, the pointer to the reallocated memory.
  */
-void * __rte_experimental
+__rte_experimental void *
 rte_realloc_socket(void *ptr, size_t size, unsigned int align, int socket);
 
 /**
@@ -330,7 +330,7 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to add memory to a reserved heap
  *     ENOSPC - no more space in internal config to store a new memory chunk
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_memory_add(const char *heap_name, void *va_addr, size_t len,
 		rte_iova_t iova_addrs[], unsigned int n_pages, size_t page_sz);
 
@@ -361,7 +361,7 @@ struct rte_malloc_socket_stats {
  *     ENOENT - heap or memory chunk was not found
  *     EBUSY  - memory chunk still contains data
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_memory_remove(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -385,7 +385,7 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to attach memory to a reserved heap
  *     ENOENT - heap or memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_memory_attach(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -409,7 +409,7 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to detach memory from a reserved heap
  *     ENOENT - heap or memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_memory_detach(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -428,7 +428,7 @@ struct rte_malloc_socket_stats {
  *     EEXIST - heap by name of ``heap_name`` already exists
  *     ENOSPC - no more space in internal config to store a new heap
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_create(const char *heap_name);
 
 /**
@@ -451,7 +451,7 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempting to destroy reserved heap
  *     EBUSY  - heap still contains data
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_destroy(const char *heap_name);
 
 /**
@@ -465,7 +465,7 @@ struct rte_malloc_socket_stats {
  *     EINVAL - ``name`` was NULL
  *     ENOENT - heap identified by the name ``name`` was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_get_socket(const char *name);
 
 /**
@@ -480,7 +480,7 @@ struct rte_malloc_socket_stats {
  *   0 if socket ID refers to internal DPDK memory
  *   -1 if socket ID is invalid
  */
-int __rte_experimental
+__rte_experimental int
 rte_malloc_heap_socket_is_external(int socket_id);
 
 /**
@@ -510,7 +510,7 @@ struct rte_malloc_socket_stats {
  * @param f
  *   A pointer to a file for output
  */
-void __rte_experimental
+__rte_experimental void
 rte_malloc_dump_heaps(FILE *f);
 
 /**
diff --git a/lib/librte_eal/common/include/rte_memory.h b/lib/librte_eal/common/include/rte_memory.h
index 7ca703b..3f159f8 100644
--- a/lib/librte_eal/common/include/rte_memory.h
+++ b/lib/librte_eal/common/include/rte_memory.h
@@ -227,7 +227,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_walk(rte_memseg_walk_t func, void *arg);
 
 /**
@@ -248,7 +248,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg);
 
 /**
@@ -269,7 +269,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg);
 
 /**
@@ -287,7 +287,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg);
 
 /**
@@ -305,7 +305,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg);
 
 /**
@@ -323,7 +323,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg);
 
 /**
@@ -347,7 +347,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_get_fd(const struct rte_memseg *ms);
 
 /**
@@ -371,7 +371,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms);
 
 /**
@@ -395,7 +395,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset);
 
 /**
@@ -419,7 +419,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental int
 rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 		size_t *offset);
 
@@ -460,7 +460,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EEXIST - memory chunk is already registered
  *     ENOSPC - no more space in internal config to store a new memory chunk
  */
-int __rte_experimental
+__rte_experimental int
 rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 		unsigned int n_pages, size_t page_sz);
 
@@ -490,7 +490,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_extmem_unregister(void *va_addr, size_t len);
 
 /**
@@ -516,7 +516,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_extmem_attach(void *va_addr, size_t len);
 
 /**
@@ -542,7 +542,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental int
 rte_extmem_detach(void *va_addr, size_t len);
 
 /**
@@ -595,7 +595,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  @param maskbits
  *    Address width to check against.
  */
-int __rte_experimental rte_mem_check_dma_mask(uint8_t maskbits);
+__rte_experimental int rte_mem_check_dma_mask(uint8_t maskbits);
 
 /**
  * @warning
@@ -613,7 +613,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  @param maskbits
  *    Address width to check against.
  */
-int __rte_experimental rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits);
+__rte_experimental int rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits);
 
 /**
  * @warning
@@ -623,7 +623,7 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  rte_mem_check_dma_mask and rte_mem_check_dma_mask_thread_unsafe can not be
  *  used safely until memory has been initialized.
  */
-void __rte_experimental rte_mem_set_dma_mask(uint8_t maskbits);
+__rte_experimental void rte_mem_set_dma_mask(uint8_t maskbits);
 
 /**
  * Drivers based on uio will not load unless physical
@@ -679,7 +679,7 @@ typedef void (*rte_mem_event_callback_t)(enum rte_mem_event event_type,
  *   -1 on unsuccessful callback register, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 		void *arg);
 
@@ -697,7 +697,7 @@ typedef void (*rte_mem_event_callback_t)(enum rte_mem_event event_type,
  *   -1 on unsuccessful callback unregister, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mem_event_callback_unregister(const char *name, void *arg);
 
 
@@ -746,7 +746,7 @@ typedef int (*rte_mem_alloc_validator_t)(int socket_id,
  *   -1 on unsuccessful callback register, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mem_alloc_validator_register(const char *name,
 		rte_mem_alloc_validator_t clb, int socket_id, size_t limit);
 
@@ -764,7 +764,7 @@ typedef int (*rte_mem_alloc_validator_t)(int socket_id,
  *   -1 on unsuccessful callback unregister, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mem_alloc_validator_unregister(const char *name, int socket_id);
 
 #ifdef __cplusplus
diff --git a/lib/librte_eal/common/include/rte_service.h b/lib/librte_eal/common/include/rte_service.h
index bf25aec..e54ec50 100644
--- a/lib/librte_eal/common/include/rte_service.h
+++ b/lib/librte_eal/common/include/rte_service.h
@@ -178,7 +178,7 @@ int32_t rte_service_map_lcore_set(uint32_t service_id, uint32_t lcore,
  * @retval 0 Service is not running on any lcore
  * @retval -EINVAL Invalid service id
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_service_may_be_active(uint32_t id);
 
 /**
@@ -401,7 +401,7 @@ int32_t rte_service_attr_get(uint32_t id, uint32_t attr_id,
  *         -EINVAL Invalid lcore, attr_id or attr_value was NULL.
  *         -ENOTSUP lcore is not a service core.
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 			   uint64_t *attr_value);
 
@@ -416,7 +416,7 @@ int32_t rte_service_attr_get(uint32_t id, uint32_t attr_id,
  *         -EINVAL Invalid service id provided
  *         -ENOTSUP lcore is not a service core.
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_service_lcore_attr_reset_all(uint32_t lcore);
 
 #ifdef __cplusplus
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 50c6936..2a0c0b2 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1453,7 +1453,7 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  *   Next port id of the device, possibly port_id_start,
  *   RTE_MAX_ETHPORTS if there is none.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_eth_find_next_of(uint16_t port_id_start,
 		const struct rte_device *parent);
 
@@ -1484,7 +1484,7 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  *   Next sibling port id, possibly port_id_start or ref_port_id itself,
  *   RTE_MAX_ETHPORTS if there is none.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_eth_find_next_sibling(uint16_t port_id_start,
 		uint16_t ref_port_id);
 
@@ -1516,7 +1516,7 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental rte_eth_dev_owner_new(uint64_t *owner_id);
+__rte_experimental int rte_eth_dev_owner_new(uint64_t *owner_id);
 
 /**
  * @warning
@@ -1531,7 +1531,7 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  * @return
  *  Negative errno value on error, 0 on success.
  */
-int __rte_experimental rte_eth_dev_owner_set(const uint16_t port_id,
+__rte_experimental int rte_eth_dev_owner_set(const uint16_t port_id,
 		const struct rte_eth_dev_owner *owner);
 
 /**
@@ -1547,7 +1547,7 @@ int __rte_experimental rte_eth_dev_owner_set(const uint16_t port_id,
  * @return
  *  0 on success, negative errno value on error.
  */
-int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
+__rte_experimental int rte_eth_dev_owner_unset(const uint16_t port_id,
 		const uint64_t owner_id);
 
 /**
@@ -1559,7 +1559,7 @@ int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
  * @param	owner_id
  *  The owner identifier.
  */
-void __rte_experimental rte_eth_dev_owner_delete(const uint64_t owner_id);
+__rte_experimental void rte_eth_dev_owner_delete(const uint64_t owner_id);
 
 /**
  * @warning
@@ -1574,7 +1574,7 @@ int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
  * @return
  *  0 on success, negative errno value on error..
  */
-int __rte_experimental rte_eth_dev_owner_get(const uint16_t port_id,
+__rte_experimental int rte_eth_dev_owner_get(const uint16_t port_id,
 		struct rte_eth_dev_owner *owner);
 
 /**
@@ -1700,7 +1700,7 @@ int rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_queue,
  * @return
  *   1 when the Ethernet device is removed, otherwise 0.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_is_removed(uint16_t port_id);
 
 /**
@@ -2928,7 +2928,7 @@ int rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id,
  *           successful.
  *   - (-1) on error.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id);
 
 /**
@@ -3626,7 +3626,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
  *   - (-EIO) if device is removed.
  *   - others depends on the specific operations implementation.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_get_module_info(uint16_t port_id,
 			    struct rte_eth_dev_module_info *modinfo);
 
@@ -3648,7 +3648,7 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
  *   - (-EIO) if device is removed.
  *   - others depends on the specific operations implementation.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_get_module_eeprom(uint16_t port_id,
 			      struct rte_dev_eeprom_info *info);
 
@@ -3840,7 +3840,7 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id,
  *   - -ENODEV: The port ID is invalid.
  *   - -ENOTSUP: The function is not supported by the Ethernet driver.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_read_clock(uint16_t port_id, uint64_t *clock);
 
 /**
diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h
index f227480..217a02b 100644
--- a/lib/librte_ethdev/rte_ethdev_driver.h
+++ b/lib/librte_ethdev/rte_ethdev_driver.h
@@ -225,7 +225,7 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_switch_domain_alloc(uint16_t *domain_id);
 
 /**
@@ -243,7 +243,7 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_switch_domain_free(uint16_t domain_id);
 
 /** Generic Ethernet device arguments  */
@@ -272,7 +272,7 @@ struct rte_eth_devargs {
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs);
 
 
@@ -304,7 +304,7 @@ typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_create(struct rte_device *device, const char *name,
 	size_t priv_data_size,
 	ethdev_bus_specific_init bus_specific_init, void *bus_init_params,
@@ -328,7 +328,7 @@ typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental int
 rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit);
 
 #ifdef __cplusplus
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index 688f723..e41b815 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -171,7 +171,7 @@ struct rte_flow_expand_rss {
  *
  *   -E2BIG: graph-depth @p graph is too deep.
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_expand_rss(struct rte_flow_expand_rss *buf, size_t size,
 		    const struct rte_flow_item *pattern, uint64_t types,
 		    const struct rte_flow_expand_node graph[],
diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h
index 88f1301..49be06b 100644
--- a/lib/librte_ethdev/rte_mtr.h
+++ b/lib/librte_ethdev/rte_mtr.h
@@ -438,7 +438,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_capabilities_get(uint16_t port_id,
 	struct rte_mtr_capabilities *cap,
 	struct rte_mtr_error *error);
@@ -461,7 +461,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_profile_add(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_meter_profile *profile,
@@ -482,7 +482,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_profile_delete(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_error *error);
@@ -510,7 +510,7 @@ struct rte_mtr_error {
  *
  * @see enum rte_flow_action_type::RTE_FLOW_ACTION_TYPE_METER
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_create(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_params *params,
@@ -533,7 +533,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_destroy(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -560,7 +560,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_disable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -581,7 +581,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_enable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -600,7 +600,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_profile_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t meter_profile_id,
@@ -624,7 +624,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_meter_dscp_table_update(uint16_t port_id,
 	uint32_t mtr_id,
 	enum rte_color *dscp_table,
@@ -650,7 +650,7 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_policer_actions_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t action_mask,
@@ -675,7 +675,7 @@ struct rte_mtr_error {
  *
  * @see enum rte_mtr_stats_type
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_stats_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint64_t stats_mask,
@@ -706,7 +706,7 @@ struct rte_mtr_error {
  *
  * @see enum rte_mtr_stats_type
  */
-int __rte_experimental
+__rte_experimental int
 rte_mtr_stats_read(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_stats *stats,
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.h b/lib/librte_eventdev/rte_event_eth_rx_adapter.h
index beab870..0423c08 100644
--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.h
+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.h
@@ -413,7 +413,7 @@ int rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
  *  - 0: Success, retrieved successfully.
  *  - <0: Error code on failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_event_eth_rx_adapter_stats_get(uint8_t id,
 				struct rte_event_eth_rx_adapter_stats *stats);
 
@@ -466,7 +466,7 @@ int rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
  *  - 0: Success
  *  - <0: Error code on failure.
  */
-int __rte_experimental
+__rte_experimental int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
 				uint16_t eth_dev_id,
 				rte_event_eth_rx_adapter_cb_fn cb_fn,
diff --git a/lib/librte_flow_classify/rte_flow_classify.h b/lib/librte_flow_classify/rte_flow_classify.h
index 01e88e5..eefadfc 100644
--- a/lib/librte_flow_classify/rte_flow_classify.h
+++ b/lib/librte_flow_classify/rte_flow_classify.h
@@ -155,7 +155,7 @@ struct rte_flow_classify_ipv4_5tuple_stats {
  * @return
  *   Handle to flow classifier instance on success or NULL otherwise
  */
-struct rte_flow_classifier * __rte_experimental
+__rte_experimental struct rte_flow_classifier *
 rte_flow_classifier_create(struct rte_flow_classifier_params *params);
 
 /**
@@ -166,7 +166,7 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_classifier_free(struct rte_flow_classifier *cls);
 
 /**
@@ -179,7 +179,7 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_classify_table_create(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_table_params *params);
 
@@ -200,7 +200,7 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_classify_validate(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -226,7 +226,7 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   A valid handle in case of success, NULL otherwise.
  */
-struct rte_flow_classify_rule * __rte_experimental
+__rte_experimental struct rte_flow_classify_rule *
 rte_flow_classify_table_entry_add(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -244,7 +244,7 @@ struct rte_flow_classify_rule * __rte_experimental
  * @return
  *   0 on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_classify_table_entry_delete(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_rule *rule);
 
@@ -265,7 +265,7 @@ struct rte_flow_classify_rule * __rte_experimental
  * @return
  *   0 on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_flow_classifier_query(struct rte_flow_classifier *cls,
 		struct rte_mbuf **pkts,
 		const uint16_t nb_pkts,
diff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h
index 4432aef..20ca990 100644
--- a/lib/librte_hash/rte_hash.h
+++ b/lib/librte_hash/rte_hash.h
@@ -366,7 +366,7 @@ struct rte_hash *
  *   - 0 if freed successfully
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental int
 rte_hash_free_key_with_position(const struct rte_hash *h,
 				const int32_t position);
 
diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h
index 2273f38..1c2a7e2 100644
--- a/lib/librte_ip_frag/rte_ip_frag.h
+++ b/lib/librte_ip_frag/rte_ip_frag.h
@@ -348,7 +348,7 @@ void rte_ip_frag_free_death_row(struct rte_ip_frag_death_row *dr,
  * @param tms
  *   Current timestamp
  */
-void __rte_experimental
+__rte_experimental void
 rte_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, uint64_t tms);
 
diff --git a/lib/librte_ipsec/rte_ipsec.h b/lib/librte_ipsec/rte_ipsec.h
index ff1ec80..b7dfc37 100644
--- a/lib/librte_ipsec/rte_ipsec.h
+++ b/lib/librte_ipsec/rte_ipsec.h
@@ -84,7 +84,7 @@ struct rte_ipsec_session {
  *   - Zero if operation completed successfully.
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental int
 rte_ipsec_session_prepare(struct rte_ipsec_session *ss);
 
 /**
@@ -108,7 +108,7 @@ struct rte_ipsec_session {
  * @return
  *   Number of successfully processed packets, with error code set in rte_errno.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_ipsec_pkt_crypto_prepare(const struct rte_ipsec_session *ss,
 	struct rte_mbuf *mb[], struct rte_crypto_op *cop[], uint16_t num)
 {
@@ -138,7 +138,7 @@ struct rte_ipsec_session {
  * @return
  *   Number of successfully processed packets, with error code set in rte_errno.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_ipsec_pkt_process(const struct rte_ipsec_session *ss, struct rte_mbuf *mb[],
 	uint16_t num)
 {
diff --git a/lib/librte_ipsec/rte_ipsec_group.h b/lib/librte_ipsec/rte_ipsec_group.h
index 740fa7c..1de96d4 100644
--- a/lib/librte_ipsec/rte_ipsec_group.h
+++ b/lib/librte_ipsec/rte_ipsec_group.h
@@ -42,7 +42,7 @@ struct rte_ipsec_group {
  * @return
  *   The pointer to the related *rte_ipsec_session* structure.
  */
-static inline __rte_experimental struct rte_ipsec_session *
+__rte_experimental static inline struct rte_ipsec_session *
 rte_ipsec_ses_from_crypto(const struct rte_crypto_op *cop)
 {
 	const struct rte_security_session *ss;
@@ -78,7 +78,7 @@ struct rte_ipsec_group {
  * @return
  *   Number of filled elements in *grp* array.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental static inline uint16_t
 rte_ipsec_pkt_crypto_group(const struct rte_crypto_op *cop[],
 	struct rte_mbuf *mb[], struct rte_ipsec_group grp[], uint16_t num)
 {
diff --git a/lib/librte_ipsec/rte_ipsec_sa.h b/lib/librte_ipsec/rte_ipsec_sa.h
index fd9b3ed..5070701 100644
--- a/lib/librte_ipsec/rte_ipsec_sa.h
+++ b/lib/librte_ipsec/rte_ipsec_sa.h
@@ -128,7 +128,7 @@ enum {
  * @return
  *   SA type value.
  */
-uint64_t __rte_experimental
+__rte_experimental uint64_t
 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa);
 
 /**
@@ -139,7 +139,7 @@ enum {
  *   - Actual size required for SA with given parameters.
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental int
 rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm);
 
 /**
@@ -155,7 +155,7 @@ enum {
  *   - -EINVAL if the parameters are invalid.
  *   - -ENOSPC if the size of the provided buffer is not big enough.
  */
-int __rte_experimental
+__rte_experimental int
 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 	uint32_t size);
 
@@ -164,7 +164,7 @@ enum {
  * @param sa
  *   Pointer to SA object to de-initialize.
  */
-void __rte_experimental
+__rte_experimental void
 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa);
 
 #ifdef __cplusplus
diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h
index e11a32b..dda7de6 100644
--- a/lib/librte_kni/rte_kni.h
+++ b/lib/librte_kni/rte_kni.h
@@ -249,7 +249,7 @@ unsigned rte_kni_tx_burst(struct rte_kni *kni, struct rte_mbuf **mbufs,
  *  Previous link state == linkdown: 0
  *  Previous link state == linkup: 1
  */
-int __rte_experimental
+__rte_experimental int
 rte_kni_update_link(struct rte_kni *kni, unsigned int linkup);
 
 /**
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index 0d9fef0..21a8870 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -866,7 +866,7 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The pointer of the mbuf buffer.
  */
-static inline char * __rte_experimental
+__rte_experimental static inline char *
 rte_mbuf_buf_addr(struct rte_mbuf *mb, struct rte_mempool *mp)
 {
 	return (char *)mb + sizeof(*mb) + rte_pktmbuf_priv_size(mp);
@@ -883,10 +883,17 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The pointer of the beginning of the mbuf data.
  */
-static inline char * __rte_experimental
-rte_mbuf_data_addr_default(struct rte_mbuf *mb)
+__rte_experimental static inline char *
+rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
 {
+	/* gcc complains about calling this experimental function even
+	 * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
+	 */
+#ifdef ALLOW_EXPERIMENTAL_API
 	return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
+#else
+	return NULL;
+#endif
 }
 
 /**
@@ -926,7 +933,7 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The starting address of the private data area of the given mbuf.
  */
-static inline void * __rte_experimental
+__rte_experimental static inline void *
 rte_mbuf_to_priv(struct rte_mbuf *m)
 {
 	return RTE_PTR_ADD(m, sizeof(struct rte_mbuf));
diff --git a/lib/librte_meter/rte_meter.h b/lib/librte_meter/rte_meter.h
index 3e383d2..59f7b90 100644
--- a/lib/librte_meter/rte_meter.h
+++ b/lib/librte_meter/rte_meter.h
@@ -140,7 +140,7 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params);
@@ -186,7 +186,7 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p);
 
@@ -293,7 +293,7 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    Color assigned to the current IP packet
  */
-static inline enum rte_color __rte_experimental
+__rte_experimental static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_blind_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -319,7 +319,7 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    Color assigned to the current IP packet
  */
-static inline enum rte_color __rte_experimental
+__rte_experimental static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_aware_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -578,7 +578,7 @@ struct rte_meter_trtcm_rfc4115 {
 	return RTE_COLOR_GREEN;
 }
 
-static inline enum rte_color __rte_experimental
+__rte_experimental static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_blind_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -621,7 +621,7 @@ struct rte_meter_trtcm_rfc4115 {
 	return RTE_COLOR_RED;
 }
 
-static inline enum rte_color __rte_experimental
+__rte_experimental static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_aware_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
diff --git a/lib/librte_net/rte_arp.h b/lib/librte_net/rte_arp.h
index f17c529..6db6dfa 100644
--- a/lib/librte_net/rte_arp.h
+++ b/lib/librte_net/rte_arp.h
@@ -63,7 +63,7 @@ struct rte_arp_hdr {
  * @return
  *   - RARP packet pointer on success, or NULL on error
  */
-struct rte_mbuf * __rte_experimental
+__rte_experimental struct rte_mbuf *
 rte_net_make_rarp_packet(struct rte_mempool *mpool,
 		const struct rte_ether_addr *mac);
 
diff --git a/lib/librte_net/rte_net.h b/lib/librte_net/rte_net.h
index 7088584..f219621 100644
--- a/lib/librte_net/rte_net.h
+++ b/lib/librte_net/rte_net.h
@@ -51,7 +51,7 @@ struct rte_net_hdr_lens {
  *   Protocol that follows IPv6 header.
  *   -1 if an error occurs during mbuf parsing.
  */
-int __rte_experimental
+__rte_experimental int
 rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	int *frag);
 
diff --git a/lib/librte_pipeline/rte_port_in_action.h b/lib/librte_pipeline/rte_port_in_action.h
index 0a85e4e..3e0d4a6 100644
--- a/lib/librte_pipeline/rte_port_in_action.h
+++ b/lib/librte_pipeline/rte_port_in_action.h
@@ -172,7 +172,7 @@ struct rte_port_in_action_lb_params {
  * @return
  *   Input port action profile handle on success, NULL otherwise.
  */
-struct rte_port_in_action_profile * __rte_experimental
+__rte_experimental struct rte_port_in_action_profile *
 rte_port_in_action_profile_create(uint32_t socket_id);
 
 /**
@@ -183,7 +183,7 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_profile_free(struct rte_port_in_action_profile *profile);
 
 /**
@@ -201,7 +201,7 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_profile_action_register(
 	struct rte_port_in_action_profile *profile,
 	enum rte_port_in_action_type type,
@@ -223,7 +223,7 @@ struct rte_port_in_action_profile * __rte_experimental
  *
  * @see rte_port_in_action_create()
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_profile_freeze(struct rte_port_in_action_profile *profile);
 
 /**
@@ -245,7 +245,7 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Handle to input port action object on success, NULL on error.
  */
-struct rte_port_in_action * __rte_experimental
+__rte_experimental struct rte_port_in_action *
 rte_port_in_action_create(struct rte_port_in_action_profile *profile,
 	uint32_t socket_id);
 
@@ -257,7 +257,7 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_free(struct rte_port_in_action *action);
 
 /**
@@ -270,7 +270,7 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_params_get(struct rte_port_in_action *action,
 	struct rte_pipeline_port_in_params *params);
 
@@ -289,7 +289,7 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_port_in_action_apply(struct rte_port_in_action *action,
 	enum rte_port_in_action_type type,
 	void *action_params);
diff --git a/lib/librte_pipeline/rte_table_action.h b/lib/librte_pipeline/rte_table_action.h
index ef45a30..da4ec42 100644
--- a/lib/librte_pipeline/rte_table_action.h
+++ b/lib/librte_pipeline/rte_table_action.h
@@ -823,7 +823,7 @@ struct rte_table_action_decap_params {
  * @return
  *   Table action profile handle on success, NULL otherwise.
  */
-struct rte_table_action_profile * __rte_experimental
+__rte_experimental struct rte_table_action_profile *
 rte_table_action_profile_create(struct rte_table_action_common_config *common);
 
 /**
@@ -834,7 +834,7 @@ struct rte_table_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_profile_free(struct rte_table_action_profile *profile);
 
 /**
@@ -852,7 +852,7 @@ struct rte_table_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_profile_action_register(struct rte_table_action_profile *profile,
 	enum rte_table_action_type type,
 	void *action_config);
@@ -872,7 +872,7 @@ struct rte_table_action_profile * __rte_experimental
  *
  * @see rte_table_action_create()
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_profile_freeze(struct rte_table_action_profile *profile);
 
 /**
@@ -895,7 +895,7 @@ struct rte_table_action_profile * __rte_experimental
  *
  * @see rte_table_action_create()
  */
-struct rte_table_action * __rte_experimental
+__rte_experimental struct rte_table_action *
 rte_table_action_create(struct rte_table_action_profile *profile,
 	uint32_t socket_id);
 
@@ -907,7 +907,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_free(struct rte_table_action *action);
 
 /**
@@ -920,7 +920,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_table_params_get(struct rte_table_action *action,
 	struct rte_pipeline_table_params *params);
 
@@ -942,7 +942,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_apply(struct rte_table_action *action,
 	void *data,
 	enum rte_table_action_type type,
@@ -961,7 +961,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_dscp_table_update(struct rte_table_action *action,
 	uint64_t dscp_mask,
 	struct rte_table_action_dscp_table *table);
@@ -980,7 +980,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_meter_profile_add(struct rte_table_action *action,
 	uint32_t meter_profile_id,
 	struct rte_table_action_meter_profile *profile);
@@ -996,7 +996,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_meter_profile_delete(struct rte_table_action *action,
 	uint32_t meter_profile_id);
 
@@ -1027,7 +1027,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_meter_read(struct rte_table_action *action,
 	void *data,
 	uint32_t tc_mask,
@@ -1053,7 +1053,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_ttl_read(struct rte_table_action *action,
 	void *data,
 	struct rte_table_action_ttl_counters *stats,
@@ -1078,7 +1078,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_stats_read(struct rte_table_action *action,
 	void *data,
 	struct rte_table_action_stats_counters *stats,
@@ -1098,7 +1098,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_table_action_time_read(struct rte_table_action *action,
 	void *data,
 	uint64_t *timestamp);
@@ -1113,7 +1113,7 @@ struct rte_table_action * __rte_experimental
  * @return
  *   The pointer to the session on success, NULL otherwise.
  */
-struct rte_cryptodev_sym_session *__rte_experimental
+__rte_experimental struct rte_cryptodev_sym_session *
 rte_table_action_crypto_sym_session_get(struct rte_table_action *action,
 	void *data);
 
diff --git a/lib/librte_power/rte_power_empty_poll.h b/lib/librte_power/rte_power_empty_poll.h
index 33f24e0..e246a09 100644
--- a/lib/librte_power/rte_power_empty_poll.h
+++ b/lib/librte_power/rte_power_empty_poll.h
@@ -142,14 +142,14 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental int
 rte_power_empty_poll_stat_init(struct ep_params **eptr, uint8_t *freq_tlb,
 		struct ep_policy *policy);
 
 /**
  * Free the resource hold by power management system.
  */
-void __rte_experimental
+__rte_experimental void
 rte_power_empty_poll_stat_free(void);
 
 /**
@@ -163,7 +163,7 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental int
 rte_power_empty_poll_stat_update(unsigned int lcore_id);
 
 /**
@@ -178,7 +178,7 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental int
 rte_power_poll_stat_update(unsigned int lcore_id, uint8_t nb_pkt);
 
 /**
@@ -190,7 +190,7 @@ struct ep_policy {
  * @return
  *  Current lcore empty poll counter value.
  */
-uint64_t __rte_experimental
+__rte_experimental uint64_t
 rte_power_empty_poll_stat_fetch(unsigned int lcore_id);
 
 /**
@@ -202,7 +202,7 @@ struct ep_policy {
  * @return
  *  Current lcore valid poll counter value.
  */
-uint64_t __rte_experimental
+__rte_experimental uint64_t
 rte_power_poll_stat_fetch(unsigned int lcore_id);
 
 /**
@@ -213,7 +213,7 @@ struct ep_policy {
  * @param  arg
  *  The customized parameter
  */
-void  __rte_experimental
+__rte_experimental void
 rte_empty_poll_detection(struct rte_timer *tim, void *arg);
 
 #ifdef __cplusplus
diff --git a/lib/librte_rcu/rte_rcu_qsbr.h b/lib/librte_rcu/rte_rcu_qsbr.h
index 9727f49..b48ed47 100644
--- a/lib/librte_rcu/rte_rcu_qsbr.h
+++ b/lib/librte_rcu/rte_rcu_qsbr.h
@@ -122,7 +122,7 @@ struct rte_rcu_qsbr {
  *   Possible rte_errno codes are:
  *   - EINVAL - max_threads is 0
  */
-size_t __rte_experimental
+__rte_experimental size_t
 rte_rcu_qsbr_get_memsize(uint32_t max_threads);
 
 /**
@@ -143,7 +143,7 @@ struct rte_rcu_qsbr {
  *   - EINVAL - max_threads is 0 or 'v' is NULL.
  *
  */
-int __rte_experimental
+__rte_experimental int
 rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads);
 
 /**
@@ -169,7 +169,7 @@ struct rte_rcu_qsbr {
  *   the QS variable. thread_id is a value between 0 and (max_threads - 1).
  *   'max_threads' is the parameter passed in 'rte_rcu_qsbr_init' API.
  */
-int __rte_experimental
+__rte_experimental int
 rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -190,7 +190,7 @@ struct rte_rcu_qsbr {
  *   Reader thread with this thread ID will stop reporting its quiescent
  *   state on the QS variable.
  */
-int __rte_experimental
+__rte_experimental int
 rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -221,7 +221,7 @@ struct rte_rcu_qsbr {
  *   Reader thread with this thread ID will report its quiescent state on
  *   the QS variable.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental static __rte_always_inline void
 rte_rcu_qsbr_thread_online(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -282,7 +282,7 @@ struct rte_rcu_qsbr {
  *   rte_rcu_qsbr_check API will not wait for the reader thread with
  *   this thread ID to report its quiescent state on the QS variable.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental static __rte_always_inline void
 rte_rcu_qsbr_thread_offline(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	RTE_ASSERT(v != NULL && thread_id < v->max_threads);
@@ -322,7 +322,7 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Reader thread id
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental static __rte_always_inline void
 rte_rcu_qsbr_lock(__rte_unused struct rte_rcu_qsbr *v,
 			__rte_unused unsigned int thread_id)
 {
@@ -358,7 +358,7 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Reader thread id
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental static __rte_always_inline void
 rte_rcu_qsbr_unlock(__rte_unused struct rte_rcu_qsbr *v,
 			__rte_unused unsigned int thread_id)
 {
@@ -391,7 +391,7 @@ struct rte_rcu_qsbr {
  *   - This is the token for this call of the API. This should be
  *     passed to rte_rcu_qsbr_check API.
  */
-static __rte_always_inline uint64_t __rte_experimental
+__rte_experimental static __rte_always_inline uint64_t
 rte_rcu_qsbr_start(struct rte_rcu_qsbr *v)
 {
 	uint64_t t;
@@ -423,7 +423,7 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Update the quiescent state for the reader with this thread ID.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental static __rte_always_inline void
 rte_rcu_qsbr_quiescent(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -578,7 +578,7 @@ struct rte_rcu_qsbr {
  *   - 1 if all reader threads have passed through specified number
  *     of quiescent states.
  */
-static __rte_always_inline int __rte_experimental
+__rte_experimental static __rte_always_inline int
 rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait)
 {
 	RTE_ASSERT(v != NULL);
@@ -610,7 +610,7 @@ struct rte_rcu_qsbr {
  *   on this QS variable (i.e. the calling thread is also part of the
  *   readside critical section). If not, pass RTE_QSBR_THRID_INVALID.
  */
-void __rte_experimental
+__rte_experimental void
 rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -631,7 +631,7 @@ struct rte_rcu_qsbr {
  *   Possible rte_errno codes are:
  *   - EINVAL - NULL parameters are passed
  */
-int __rte_experimental
+__rte_experimental int
 rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v);
 
 #ifdef __cplusplus
diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h
index 9c55a78..a6ef9ee 100644
--- a/lib/librte_sched/rte_sched.h
+++ b/lib/librte_sched/rte_sched.h
@@ -249,7 +249,7 @@ struct rte_sched_port *
  * @return
  *   0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_sched_port_pipe_profile_add(struct rte_sched_port *port,
 	struct rte_sched_pipe_params *params,
 	uint32_t *pipe_profile_id);
diff --git a/lib/librte_security/rte_security.h b/lib/librte_security/rte_security.h
index 76f54e0..0292d93 100644
--- a/lib/librte_security/rte_security.h
+++ b/lib/librte_security/rte_security.h
@@ -346,7 +346,7 @@ struct rte_security_session *
  *  - On success returns 0
  *  - On failure return errno
  */
-int __rte_experimental
+__rte_experimental int
 rte_security_session_update(struct rte_security_ctx *instance,
 			    struct rte_security_session *sess,
 			    struct rte_security_session_conf *conf);
@@ -414,7 +414,7 @@ struct rte_security_session *
  *  - On success, userdata
  *  - On failure, NULL
  */
-void * __rte_experimental
+__rte_experimental void *
 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md);
 
 /**
@@ -501,7 +501,7 @@ struct rte_security_stats {
  *  - On success return 0
  *  - On failure errno
  */
-int __rte_experimental
+__rte_experimental int
 rte_security_session_stats_get(struct rte_security_ctx *instance,
 			       struct rte_security_session *sess,
 			       struct rte_security_stats *stats);
diff --git a/lib/librte_stack/rte_stack.h b/lib/librte_stack/rte_stack.h
index fe048f0..cc0898c 100644
--- a/lib/librte_stack/rte_stack.h
+++ b/lib/librte_stack/rte_stack.h
@@ -112,7 +112,7 @@ struct rte_stack {
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
 {
 	RTE_ASSERT(s != NULL);
@@ -139,7 +139,7 @@ struct rte_stack {
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	RTE_ASSERT(s != NULL);
@@ -162,7 +162,7 @@ struct rte_stack {
  * @return
  *   The number of used entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 rte_stack_count(struct rte_stack *s)
 {
 	RTE_ASSERT(s != NULL);
@@ -184,7 +184,7 @@ struct rte_stack {
  * @return
  *   The number of free entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 rte_stack_free_count(struct rte_stack *s)
 {
 	RTE_ASSERT(s != NULL);
@@ -222,7 +222,7 @@ struct rte_stack {
  *    - ENOMEM - insufficient memory to create the stack
  *    - ENAMETOOLONG - name size exceeds RTE_STACK_NAMESIZE
  */
-struct rte_stack *__rte_experimental
+__rte_experimental struct rte_stack *
 rte_stack_create(const char *name, unsigned int count, int socket_id,
 		 uint32_t flags);
 
@@ -235,7 +235,7 @@ struct rte_stack *__rte_experimental
  * @param s
  *   Stack to free
  */
-void __rte_experimental
+__rte_experimental void
 rte_stack_free(struct rte_stack *s);
 
 /**
@@ -252,7 +252,7 @@ struct rte_stack *__rte_experimental
  *    - ENOENT - Stack with name *name* not found.
  *    - EINVAL - *name* pointer is NULL.
  */
-struct rte_stack * __rte_experimental
+__rte_experimental struct rte_stack *
 rte_stack_lookup(const char *name);
 
 #ifdef __cplusplus
diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h
index 518889a..28702b2 100644
--- a/lib/librte_stack/rte_stack_lf.h
+++ b/lib/librte_stack/rte_stack_lf.h
@@ -23,7 +23,7 @@
  * @return
  *   Actual number of objects enqueued.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 __rte_stack_lf_push(struct rte_stack *s,
 		    void * const *obj_table,
 		    unsigned int n)
@@ -61,7 +61,7 @@
  * @return
  *   - Actual number of objects popped.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 __rte_stack_lf_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	struct rte_stack_lf_elem *first, *last = NULL;
diff --git a/lib/librte_stack/rte_stack_std.h b/lib/librte_stack/rte_stack_std.h
index 5dc9409..1306ea3 100644
--- a/lib/librte_stack/rte_stack_std.h
+++ b/lib/librte_stack/rte_stack_std.h
@@ -19,7 +19,7 @@
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
 		     unsigned int n)
 {
@@ -58,7 +58,7 @@
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	struct rte_stack_std *stack = &s->stack_std;
@@ -92,7 +92,7 @@
  * @return
  *   The number of used entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental static __rte_always_inline unsigned int
 __rte_stack_std_count(struct rte_stack *s)
 {
 	return (unsigned int)s->stack_std.len;
diff --git a/lib/librte_table/rte_table_hash_func.h b/lib/librte_table/rte_table_hash_func.h
index 11ea5a9..6c7db1c 100644
--- a/lib/librte_table/rte_table_hash_func.h
+++ b/lib/librte_table/rte_table_hash_func.h
@@ -14,7 +14,7 @@
 #include <rte_compat.h>
 #include <rte_common.h>
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_crc32_u64_generic(uint64_t crc, uint64_t value)
 {
 	int i;
@@ -52,7 +52,7 @@
 
 #endif
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key8(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -65,7 +65,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key16(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -83,7 +83,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key24(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -104,7 +104,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key32(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -129,7 +129,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key40(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -154,7 +154,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key48(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -180,7 +180,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key56(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -209,7 +209,7 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental static inline uint64_t
 rte_table_hash_crc_key64(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
diff --git a/lib/librte_telemetry/rte_telemetry.h b/lib/librte_telemetry/rte_telemetry.h
index 119db16..0c54ca4 100644
--- a/lib/librte_telemetry/rte_telemetry.h
+++ b/lib/librte_telemetry/rte_telemetry.h
@@ -31,7 +31,7 @@
  * @return
  *  -EALREADY if Telemetry is already initialised.
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_telemetry_init(void);
 
 /**
@@ -45,7 +45,7 @@
  * @return
  *  -EPERM on failure
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_telemetry_cleanup(void);
 
 /**
@@ -60,7 +60,7 @@
  * @return
  *  -1 on failure when the test has failed
  */
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_telemetry_selftest(void);
 
 #endif
diff --git a/lib/librte_telemetry/rte_telemetry_parser.h b/lib/librte_telemetry/rte_telemetry_parser.h
index b705194..85040b8 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.h
+++ b/lib/librte_telemetry/rte_telemetry_parser.h
@@ -8,7 +8,7 @@
 #ifndef _RTE_TELEMETRY_PARSER_H_
 #define _RTE_TELEMETRY_PARSER_H_
 
-int32_t __rte_experimental
+__rte_experimental int32_t
 rte_telemetry_parse(struct telemetry_impl *telemetry, char *socket_rx_data);
 
 #endif
diff --git a/lib/librte_timer/rte_timer.h b/lib/librte_timer/rte_timer.h
index 2196934..39fc1d5 100644
--- a/lib/librte_timer/rte_timer.h
+++ b/lib/librte_timer/rte_timer.h
@@ -147,7 +147,7 @@ struct rte_timer
  *   - 0: Success
  *   - -ENOSPC: maximum number of timer data instances already allocated
  */
-int __rte_experimental rte_timer_data_alloc(uint32_t *id_ptr);
+__rte_experimental int rte_timer_data_alloc(uint32_t *id_ptr);
 
 /**
  * @warning
@@ -162,7 +162,7 @@ struct rte_timer
  *   - 0: Success
  *   - -EINVAL: invalid timer data instance identifier
  */
-int __rte_experimental rte_timer_data_dealloc(uint32_t id);
+__rte_experimental int rte_timer_data_dealloc(uint32_t id);
 
 /**
  * Initialize the timer library.
@@ -187,7 +187,7 @@ struct rte_timer
  *
  * Free timer subsystem resources.
  */
-void __rte_experimental rte_timer_subsystem_finalize(void);
+__rte_experimental void rte_timer_subsystem_finalize(void);
 
 /**
  * Initialize a timer handle.
@@ -408,7 +408,7 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - (-1): Timer is in the RUNNING or CONFIG state.
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 		    uint64_t ticks, enum rte_timer_type type,
 		    unsigned int tim_lcore, rte_timer_cb_t fct, void *arg);
@@ -433,7 +433,7 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - (-1): The timer is in the RUNNING or CONFIG state.
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim);
 
 /**
@@ -469,7 +469,7 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental int
 rte_timer_alt_manage(uint32_t timer_data_id, unsigned int *poll_lcores,
 		     int n_poll_lcores, rte_timer_alt_manage_cb_t f);
 
@@ -501,7 +501,7 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental int
 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 		   int nb_walk_lcores, rte_timer_stop_all_cb_t f, void *f_arg);
 
@@ -523,7 +523,7 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental int
 rte_timer_alt_dump_stats(uint32_t timer_data_id, FILE *f);
 
 #ifdef __cplusplus
diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
index 51a9a7b..f3a51a8 100644
--- a/lib/librte_vhost/rte_vdpa.h
+++ b/lib/librte_vhost/rte_vdpa.h
@@ -100,7 +100,7 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr,
 		struct rte_vdpa_dev_ops *ops);
 
@@ -115,7 +115,7 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vdpa_unregister_device(int did);
 
 /**
@@ -129,7 +129,7 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr);
 
 /**
@@ -143,7 +143,7 @@ struct rte_vdpa_device {
  * @return
  *  rte_vdpa_device on success, NULL on failure
  */
-struct rte_vdpa_device * __rte_experimental
+__rte_experimental struct rte_vdpa_device *
 rte_vdpa_get_device(int did);
 
 /**
@@ -155,7 +155,7 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  available vdpa device number
  */
-int __rte_experimental
+__rte_experimental int
 rte_vdpa_get_device_num(void);
 
 /**
@@ -171,7 +171,7 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_host_notifier_ctrl(int vid, bool enable);
 
 /**
@@ -191,6 +191,6 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  number of synced used entries on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
 #endif /* _RTE_VDPA_H_ */
diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
index 338e47c..66bdbf4 100644
--- a/lib/librte_vhost/rte_vhost.h
+++ b/lib/librte_vhost/rte_vhost.h
@@ -313,7 +313,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_attach_vdpa_device(const char *path, int did);
 
 /**
@@ -324,7 +324,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_detach_vdpa_device(const char *path);
 
 /**
@@ -335,7 +335,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  Device id, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_get_vdpa_device_id(const char *path);
 
 /**
@@ -403,7 +403,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_set_protocol_features(const char *path,
 		uint64_t protocol_features);
 
@@ -417,7 +417,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_get_protocol_features(const char *path,
 		uint64_t *protocol_features);
 
@@ -431,7 +431,7 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num);
 
 /**
@@ -656,7 +656,7 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_get_log_base(int vid, uint64_t *log_base, uint64_t *log_size);
 
 /**
@@ -673,7 +673,7 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 		uint16_t *last_avail_idx, uint16_t *last_used_idx);
 
@@ -691,7 +691,7 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_set_vring_base(int vid, uint16_t queue_id,
 		uint16_t last_avail_idx, uint16_t last_used_idx);
 
@@ -707,7 +707,7 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_extern_callback_register(int vid,
 		struct rte_vhost_user_extern_ops const * const ops, void *ctx);
 
@@ -719,7 +719,7 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  device id
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_get_vdpa_device_id(int vid);
 
 #ifdef __cplusplus
diff --git a/lib/librte_vhost/rte_vhost_crypto.h b/lib/librte_vhost/rte_vhost_crypto.h
index d08e0ff..5014295 100644
--- a/lib/librte_vhost/rte_vhost_crypto.h
+++ b/lib/librte_vhost/rte_vhost_crypto.h
@@ -35,7 +35,7 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if the Vhost Crypto Instance is created successfully.
  *  Negative integer if otherwise
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 		struct rte_mempool *sess_pool,
 		struct rte_mempool *sess_priv_pool,
@@ -50,7 +50,7 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if the Vhost Crypto Instance is created successfully.
  *  Negative integer if otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_crypto_free(int vid);
 
 /**
@@ -64,7 +64,7 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if completed successfully.
  *  Negative integer if otherwise.
  */
-int __rte_experimental
+__rte_experimental int
 rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option);
 
 /**
@@ -84,7 +84,7 @@ enum rte_vhost_crypto_zero_copy {
  * @return
  *  The number of fetched and processed vhost crypto request operations.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 		struct rte_crypto_op **ops, uint16_t nb_ops);
 /**
@@ -105,7 +105,7 @@ enum rte_vhost_crypto_zero_copy {
  * @return
  *  The number of ops processed.
  */
-uint16_t __rte_experimental
+__rte_experimental uint16_t
 rte_vhost_crypto_finalize_requests(struct rte_crypto_op **ops,
 		uint16_t nb_ops, int *callfds, uint16_t *nb_callfds);
 
-- 
1.8.3.1


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

* Re: [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations David Marchand
@ 2019-06-27 12:23   ` Adrien Mazarguil
  2019-06-27 12:38     ` Gaëtan Rivet
  0 siblings, 1 reply; 43+ messages in thread
From: Adrien Mazarguil @ 2019-06-27 12:23 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, nhorman, aconole, thomas, Wenzhuo Lu, Konstantin Ananyev,
	Jasvinder Singh, Cristian Dumitrescu, Amr Mokhtar, Fiona Trahe,
	Pablo de Lara, Ashish Gupta, Declan Doherty, Bruce Richardson,
	Joyce Kong, Anatoly Burakov, Harry van Haaren, Ferruh Yigit,
	Andrew Rybchenko, Nikhil Rao, Jerin Jacob, Bernard Iremonger,
	Yipeng Wang, Sameh Gobriel, Olivier Matz, David Hunt,
	Honnappa Nagarahalli, Akhil Goyal, Gage Eads, Kevin Laatz,
	Robert Sanford, Erik Gabriel Carrillo, Maxime Coquelin,
	Tiwei Bie, Zhihong Wang

Hey David,

On Thu, Jun 27, 2019 at 01:33:55PM +0200, David Marchand wrote:
> Putting a '__attribute__((deprecated))' in the middle of a function
> prototype does not result in the expected result with gcc (while clang
> is fine with this syntax).
> 
> $ cat deprecated.c
> void * __attribute__((deprecated)) incorrect() { return 0; }
> __attribute__((deprecated)) void *correct(void) { return 0; }
> int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
> $ gcc -o deprecated.o -c deprecated.c
> deprecated.c: In function ‘main’:
> deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
> deprecated.c:2) [-Wdeprecated-declarations]
>  int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
>  ^
> 
> Let's enforce the tag is at the very start of the lines, this is not
> perfect but we will trust reviewers to catch the other not so easy to
> detect patterns.
> 
> tag=__rte_experimental
> git grep -l [^^]$tag |grep \\.h$ |while read file; do
> 	[ "$file" != 'lib/librte_eal/common/include/rte_compat.h' ] ||
> 		continue
> 	sed -i -e 's#^\(.*\)  *'$tag'#'$tag' \1#' $file
> 	sed -i -e 's#^\(..*\)'$tag'#'$tag' \1#' $file
> done

Just a suggestion, how about putting __rte_experimental on its own line
before the actual prototype? So that instead of:

 __rte_experimental struct rte_compressdev * __rte_experimental
 rte_compressdev_pmd_get_named_dev(const char *name);

We'd get:

 __rte_experimental
 struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name);

I personally find the latter much more readable.

Here's the relevant sed expression:

 sed -i \
     -e '/^\([^#].*\)__rte_experimental */{' \
     -e 's//\1/; s/ *$//; i\' \
     -e __rte_experimental \
     -e '}' \
     $(git grep -l __rte_experimental -- '*.h')

Otherwise this series looks good to me.

-- 
Adrien Mazarguil
6WIND

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

* Re: [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations
  2019-06-27 12:23   ` Adrien Mazarguil
@ 2019-06-27 12:38     ` Gaëtan Rivet
  2019-06-28 13:38       ` Thomas Monjalon
  0 siblings, 1 reply; 43+ messages in thread
From: Gaëtan Rivet @ 2019-06-27 12:38 UTC (permalink / raw)
  To: Adrien Mazarguil
  Cc: David Marchand, dev, nhorman, aconole, thomas, Wenzhuo Lu,
	Konstantin Ananyev, Jasvinder Singh, Cristian Dumitrescu,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Bruce Richardson, Joyce Kong, Anatoly Burakov,
	Harry van Haaren, Ferruh Yigit, Andrew Rybchenko, Nikhil Rao,
	Jerin Jacob, Bernard Iremonger, Yipeng Wang, Sameh Gobriel,
	Olivier Matz, David Hunt, Honnappa Nagarahalli, Akhil Goyal,
	Gage Eads, Kevin Laatz, Robert Sanford, Erik Gabriel Carrillo,
	Maxime Coquelin, Tiwei Bie, Zhihong Wang

On Thu, Jun 27, 2019 at 02:23:59PM +0200, Adrien Mazarguil wrote:
> Hey David,
> 
> On Thu, Jun 27, 2019 at 01:33:55PM +0200, David Marchand wrote:
> > Putting a '__attribute__((deprecated))' in the middle of a function
> > prototype does not result in the expected result with gcc (while clang
> > is fine with this syntax).
> > 
> > $ cat deprecated.c
> > void * __attribute__((deprecated)) incorrect() { return 0; }
> > __attribute__((deprecated)) void *correct(void) { return 0; }
> > int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
> > $ gcc -o deprecated.o -c deprecated.c
> > deprecated.c: In function ‘main’:
> > deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
> > deprecated.c:2) [-Wdeprecated-declarations]
> >  int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
> >  ^
> > 
> > Let's enforce the tag is at the very start of the lines, this is not
> > perfect but we will trust reviewers to catch the other not so easy to
> > detect patterns.
> > 
> > tag=__rte_experimental
> > git grep -l [^^]$tag |grep \\.h$ |while read file; do
> > 	[ "$file" != 'lib/librte_eal/common/include/rte_compat.h' ] ||
> > 		continue
> > 	sed -i -e 's#^\(.*\)  *'$tag'#'$tag' \1#' $file
> > 	sed -i -e 's#^\(..*\)'$tag'#'$tag' \1#' $file
> > done
> 
> Just a suggestion, how about putting __rte_experimental on its own line
> before the actual prototype? So that instead of:
> 
>  __rte_experimental struct rte_compressdev * __rte_experimental
>  rte_compressdev_pmd_get_named_dev(const char *name);
> 
> We'd get:
> 
>  __rte_experimental
>  struct rte_compressdev *
>  rte_compressdev_pmd_get_named_dev(const char *name);
> 
> I personally find the latter much more readable.

+1, with the added benefit of having only one line to remove when
making the API stable, which is critical.

> 
> Here's the relevant sed expression:
> 
>  sed -i \
>      -e '/^\([^#].*\)__rte_experimental */{' \
>      -e 's//\1/; s/ *$//; i\' \
>      -e __rte_experimental \
>      -e '}' \
>      $(git grep -l __rte_experimental -- '*.h')
> 
> Otherwise this series looks good to me.
> 
> -- 
> Adrien Mazarguil
> 6WIND

-- 
Gaëtan Rivet
6WIND

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

* Re: [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations
  2019-06-27 12:38     ` Gaëtan Rivet
@ 2019-06-28 13:38       ` Thomas Monjalon
  0 siblings, 0 replies; 43+ messages in thread
From: Thomas Monjalon @ 2019-06-28 13:38 UTC (permalink / raw)
  To: Gaëtan Rivet, Adrien Mazarguil
  Cc: dev, David Marchand, nhorman, aconole, Wenzhuo Lu,
	Konstantin Ananyev, Jasvinder Singh, Cristian Dumitrescu,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Bruce Richardson, Joyce Kong, Anatoly Burakov,
	Harry van Haaren, Ferruh Yigit, Andrew Rybchenko, Nikhil Rao,
	Jerin Jacob, Bernard Iremonger, Yipeng Wang, Sameh Gobriel,
	Olivier Matz, David Hunt, Honnappa Nagarahalli, Akhil Goyal,
	Gage Eads, Kevin Laatz, Robert Sanford, Erik Gabriel Carrillo,
	Maxime Coquelin, Tiwei Bie, Zhihong Wang

27/06/2019 14:38, Gaëtan Rivet:
> On Thu, Jun 27, 2019 at 02:23:59PM +0200, Adrien Mazarguil wrote:
> > Hey David,
> > 
> > On Thu, Jun 27, 2019 at 01:33:55PM +0200, David Marchand wrote:
> > > Putting a '__attribute__((deprecated))' in the middle of a function
> > > prototype does not result in the expected result with gcc (while clang
> > > is fine with this syntax).
> > > 
> > > $ cat deprecated.c
> > > void * __attribute__((deprecated)) incorrect() { return 0; }
> > > __attribute__((deprecated)) void *correct(void) { return 0; }
> > > int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
> > > $ gcc -o deprecated.o -c deprecated.c
> > > deprecated.c: In function ‘main’:
> > > deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
> > > deprecated.c:2) [-Wdeprecated-declarations]
> > >  int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
> > >  ^
> > > 
> > > Let's enforce the tag is at the very start of the lines, this is not
> > > perfect but we will trust reviewers to catch the other not so easy to
> > > detect patterns.
> > > 
> > > tag=__rte_experimental
> > > git grep -l [^^]$tag |grep \\.h$ |while read file; do
> > > 	[ "$file" != 'lib/librte_eal/common/include/rte_compat.h' ] ||
> > > 		continue
> > > 	sed -i -e 's#^\(.*\)  *'$tag'#'$tag' \1#' $file
> > > 	sed -i -e 's#^\(..*\)'$tag'#'$tag' \1#' $file
> > > done
> > 
> > Just a suggestion, how about putting __rte_experimental on its own line
> > before the actual prototype? So that instead of:
> > 
> >  __rte_experimental struct rte_compressdev * __rte_experimental
> >  rte_compressdev_pmd_get_named_dev(const char *name);
> > 
> > We'd get:
> > 
> >  __rte_experimental
> >  struct rte_compressdev *
> >  rte_compressdev_pmd_get_named_dev(const char *name);
> > 
> > I personally find the latter much more readable.
> 
> +1, with the added benefit of having only one line to remove when
> making the API stable, which is critical.

You're right, but it needs a different check.
Given it is minor and we don't have a patch,
I will merge David's version, except if you can provide a patch quickly.




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

* Re: [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions David Marchand
@ 2019-06-28 15:56   ` Thomas Monjalon
  2019-06-28 19:20     ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: Thomas Monjalon @ 2019-06-28 15:56 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, nhorman, aconole, John McNamara, Marko Kovacevic,
	Hemant Agrawal, Shreyansh Jain, Wenzhuo Lu, Konstantin Ananyev,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Anatoly Burakov, Harry van Haaren,
	Bruce Richardson, Ferruh Yigit, Andrew Rybchenko,
	Adrien Mazarguil, Cristian Dumitrescu, Nikhil Rao, Jerin Jacob,
	Bernard Iremonger, Yipeng Wang, Sameh Gobriel, Olivier Matz,
	David Hunt, Honnappa Nagarahalli, Akhil Goyal, Kevin Laatz,
	Robert Sanford, Erik Gabriel Carrillo, Maxime Coquelin,
	Tiwei Bie, Zhihong Wang

27/06/2019 13:33, David Marchand:
> We had some inconsistencies between functions prototypes and actual
> definitions.
> Let's avoid this by only adding the experimental tag to the prototypes.
> Tests with gcc and clang show it is enough.
> 
> git grep -l __rte_experimental |grep \.c$ |while read file; do
> 	sed -i -e '/^__rte_experimental$/d' $file;
> 	sed -i -e 's/  *__rte_experimental//' $file;
> 	sed -i -e 's/__rte_experimental  *//' $file;
> done

There is one miss:

rte_telemetry_parse is not flagged as experimental
but is listed in version map
Please add __rte_experimental to the definition of rte_telemetry_parse

If it is the only change, I can do it.




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

* Re: [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags David Marchand
@ 2019-06-28 16:23   ` Stephen Hemminger
  0 siblings, 0 replies; 43+ messages in thread
From: Stephen Hemminger @ 2019-06-28 16:23 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, nhorman, aconole, thomas, stable

On Thu, 27 Jun 2019 13:33:48 +0200
David Marchand <david.marchand@redhat.com> wrote:

> The incriminated commit promoted those symbols as stable but the
> prototypes still have the tag.
> 
> Fixes: 73eca2f77f4c ("devargs: promote experimental API as stable")
> Cc: stable@dpdk.org
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>

Acked-by: Stephen Hemminger <stephen@networkplumber.org>

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

* Re: [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag David Marchand
@ 2019-06-28 16:24   ` Stephen Hemminger
  0 siblings, 0 replies; 43+ messages in thread
From: Stephen Hemminger @ 2019-06-28 16:24 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, nhorman, aconole, thomas, stable, Anatoly Burakov

On Thu, 27 Jun 2019 13:33:49 +0200
David Marchand <david.marchand@redhat.com> wrote:

> The incriminated commit promoted this symbol as stable but the
> definition still has the tag.
> 
> Fixes: 787ae736a3d9 ("vfio: remove experimental tag")
> Cc: stable@dpdk.org
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---

Acked-by: Stephen Hemminger <stephen@networkplumber.org>

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

* Re: [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol David Marchand
@ 2019-06-28 16:25   ` Stephen Hemminger
  0 siblings, 0 replies; 43+ messages in thread
From: Stephen Hemminger @ 2019-06-28 16:25 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, nhorman, aconole, thomas, stable

On Thu, 27 Jun 2019 13:33:47 +0200
David Marchand <david.marchand@redhat.com> wrote:

> This api was experimental and not properly marked in the map file.
> But looking more closely, this is just an internal wrapper for EAL init.
> Hide it in the hotplug code.
> 
> Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
> Cc: stable@dpdk.org
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>


Acked-by: Stephen Hemminger <stephen@networkplumber.org>

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

* Re: [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-28 15:56   ` Thomas Monjalon
@ 2019-06-28 19:20     ` David Marchand
  2019-06-29  5:57       ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-28 19:20 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Neil Horman, Aaron Conole, John McNamara, Marko Kovacevic,
	Hemant Agrawal, Shreyansh Jain, Wenzhuo Lu, Konstantin Ananyev,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Anatoly Burakov, Harry van Haaren,
	Bruce Richardson, Ferruh Yigit, Andrew Rybchenko,
	Adrien Mazarguil, Cristian Dumitrescu, Nikhil Rao, Jerin Jacob,
	Bernard Iremonger, Yipeng Wang, Sameh Gobriel, Olivier Matz,
	David Hunt, Honnappa Nagarahalli, Akhil Goyal, Kevin Laatz,
	Robert Sanford, Erik Gabriel Carrillo, Maxime Coquelin,
	Tiwei Bie, Zhihong Wang

On Fri, Jun 28, 2019 at 5:57 PM Thomas Monjalon <thomas@monjalon.net> wrote:

> 27/06/2019 13:33, David Marchand:
> > We had some inconsistencies between functions prototypes and actual
> > definitions.
> > Let's avoid this by only adding the experimental tag to the prototypes.
> > Tests with gcc and clang show it is enough.
> >
> > git grep -l __rte_experimental |grep \.c$ |while read file; do
> >       sed -i -e '/^__rte_experimental$/d' $file;
> >       sed -i -e 's/  *__rte_experimental//' $file;
> >       sed -i -e 's/__rte_experimental  *//' $file;
> > done
>
> There is one miss:
>
> rte_telemetry_parse is not flagged as experimental
> but is listed in version map
> Please add __rte_experimental to the definition of rte_telemetry_parse
>

Not sure I get you.
How did you get this warning?


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH 0/9] experimental tags fixes
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (8 preceding siblings ...)
  2019-06-27 11:33 ` [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations David Marchand
@ 2019-06-28 19:58 ` Neil Horman
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
  10 siblings, 0 replies; 43+ messages in thread
From: Neil Horman @ 2019-06-28 19:58 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, aconole, thomas

On Thu, Jun 27, 2019 at 01:33:46PM +0200, David Marchand wrote:
> Here is a new series on __rte_experimental tags.
> 
> Following the build error reported by Aaron [1], I noticed that some
> experimental functions could go unnoticed because of a gcc peculiarity.
> 
> To catch those, I went and added a new check on the object files to
> ensure that any experimental api flagged in the map files is really
> exported as such.
> 
> Then went with my previous idea of only adding the tags on the functions
> prototypes and enforcing it (a new check in checkpatches.sh).
> And finally enforcing that the __rte_experimental tag is always the first
> part of a function prototype which seems to work with both gcc and clang.
> 
> Comments and reviews highly welcome :-).
> 
> [1]: http://mails.dpdk.org/archives/dev/2019-June/135365.html
> 
> -- 
> David Marchand
> 
> David Marchand (9):
>   eal: hide internal hotplug symbol
>   devargs: remove incorrect experimental tags
>   vfio: remove incorrect experimental tag
>   raw/dpaa2_qdma: remove incorrect experimental tag
>   buildtools: detect discrepancies for experimental symbols
>   net/atlantic: add missing experimental api tags
>   mem: remove incorrect experimental tag on static symbol
>   remove experimental tags from all symbol definitions
>   enforce __rte_experimental at the start of symbol declarations
> 
>  buildtools/check-experimental-syms.sh              | 29 ++++++---
>  buildtools/map-list-symbol.sh                      | 70 ++++++++++++++++++++++
>  devtools/checkpatches.sh                           | 37 ++++++++++++
>  doc/guides/contributing/versioning.rst             |  6 +-
>  drivers/net/atlantic/rte_pmd_atlantic.c            | 12 ++--
>  drivers/net/atlantic/rte_pmd_atlantic.h            | 24 ++++++++
>  drivers/net/dpaa2/dpaa2_ethdev.c                   |  2 +-
>  drivers/net/ixgbe/rte_pmd_ixgbe.c                  | 10 ++--
>  drivers/net/ixgbe/rte_pmd_ixgbe.h                  | 10 ++--
>  drivers/net/softnic/rte_eth_softnic.h              |  2 +-
>  drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h        |  2 +-
>  lib/librte_bbdev/rte_bbdev.c                       | 52 ++++++++--------
>  lib/librte_bbdev/rte_bbdev.h                       | 48 +++++++--------
>  lib/librte_bbdev/rte_bbdev_op.h                    | 12 ++--
>  lib/librte_bbdev/rte_bbdev_pmd.h                   |  8 +--
>  lib/librte_bpf/bpf.c                               |  4 +-
>  lib/librte_bpf/bpf_exec.c                          |  4 +-
>  lib/librte_bpf/bpf_load.c                          |  4 +-
>  lib/librte_bpf/bpf_load_elf.c                      |  2 +-
>  lib/librte_bpf/bpf_pkt.c                           |  8 +--
>  lib/librte_bpf/rte_bpf.h                           | 12 ++--
>  lib/librte_bpf/rte_bpf_ethdev.h                    |  8 +--
>  lib/librte_compressdev/rte_comp.c                  | 12 ++--
>  lib/librte_compressdev/rte_comp.h                  | 12 ++--
>  lib/librte_compressdev/rte_compressdev.c           | 50 ++++++++--------
>  lib/librte_compressdev/rte_compressdev.h           | 44 +++++++-------
>  lib/librte_compressdev/rte_compressdev_pmd.c       |  6 +-
>  lib/librte_compressdev/rte_compressdev_pmd.h       | 12 ++--
>  lib/librte_cryptodev/rte_cryptodev.c               | 28 ++++-----
>  lib/librte_cryptodev/rte_cryptodev.h               | 28 ++++-----
>  lib/librte_eal/common/eal_common_class.c           |  6 +-
>  lib/librte_eal/common/eal_common_dev.c             |  8 +--
>  lib/librte_eal/common/eal_common_fbarray.c         | 52 ++++++++--------
>  lib/librte_eal/common/eal_common_log.c             |  2 +-
>  lib/librte_eal/common/eal_common_memory.c          | 50 ++++++++--------
>  lib/librte_eal/common/eal_common_proc.c            | 12 ++--
>  lib/librte_eal/common/eal_common_timer.c           |  2 +-
>  lib/librte_eal/common/hotplug_mp.c                 |  2 +-
>  lib/librte_eal/common/hotplug_mp.h                 |  9 +++
>  .../common/include/arch/x86/rte_atomic_64.h        |  2 +-
>  lib/librte_eal/common/include/generic/rte_atomic.h |  2 +-
>  lib/librte_eal/common/include/generic/rte_cycles.h |  2 +-
>  lib/librte_eal/common/include/generic/rte_rwlock.h |  4 +-
>  .../common/include/generic/rte_ticketlock.h        | 18 +++---
>  lib/librte_eal/common/include/rte_dev.h            | 18 +++---
>  lib/librte_eal/common/include/rte_devargs.h        |  2 -
>  lib/librte_eal/common/include/rte_eal.h            | 21 ++-----
>  lib/librte_eal/common/include/rte_fbarray.h        | 52 ++++++++--------
>  lib/librte_eal/common/include/rte_interrupts.h     |  2 +-
>  lib/librte_eal/common/include/rte_malloc.h         | 20 +++----
>  lib/librte_eal/common/include/rte_memory.h         | 42 ++++++-------
>  lib/librte_eal/common/include/rte_service.h        |  6 +-
>  lib/librte_eal/common/rte_malloc.c                 |  2 +-
>  lib/librte_eal/common/rte_option.c                 |  1 -
>  lib/librte_eal/common/rte_service.c                |  6 +-
>  lib/librte_eal/freebsd/eal/eal.c                   |  2 +-
>  lib/librte_eal/freebsd/eal/eal_dev.c               |  8 +--
>  lib/librte_eal/freebsd/eal/eal_interrupts.c        |  2 +-
>  lib/librte_eal/linux/eal/eal.c                     |  3 +-
>  lib/librte_eal/linux/eal/eal_dev.c                 |  8 +--
>  lib/librte_eal/linux/eal/eal_interrupts.c          |  2 +-
>  lib/librte_eal/linux/eal/eal_vfio.c                |  2 +-
>  lib/librte_ethdev/rte_ethdev.c                     | 28 ++++-----
>  lib/librte_ethdev/rte_ethdev.h                     | 24 ++++----
>  lib/librte_ethdev/rte_ethdev_driver.h              | 10 ++--
>  lib/librte_ethdev/rte_flow.c                       |  2 +-
>  lib/librte_ethdev/rte_flow_driver.h                |  2 +-
>  lib/librte_ethdev/rte_mtr.c                        | 24 ++++----
>  lib/librte_ethdev/rte_mtr.h                        | 24 ++++----
>  lib/librte_eventdev/rte_event_eth_rx_adapter.c     |  4 +-
>  lib/librte_eventdev/rte_event_eth_rx_adapter.h     |  4 +-
>  lib/librte_flow_classify/rte_flow_classify.c       | 14 ++---
>  lib/librte_flow_classify/rte_flow_classify.h       | 14 ++---
>  lib/librte_hash/rte_cuckoo_hash.c                  |  2 +-
>  lib/librte_hash/rte_hash.h                         |  2 +-
>  lib/librte_ip_frag/rte_ip_frag.h                   |  2 +-
>  lib/librte_ip_frag/rte_ip_frag_common.c            |  2 +-
>  lib/librte_ipsec/rte_ipsec.h                       |  6 +-
>  lib/librte_ipsec/rte_ipsec_group.h                 |  4 +-
>  lib/librte_ipsec/rte_ipsec_sa.h                    |  8 +--
>  lib/librte_ipsec/sa.c                              |  8 +--
>  lib/librte_ipsec/ses.c                             |  2 +-
>  lib/librte_kni/rte_kni.c                           |  2 +-
>  lib/librte_kni/rte_kni.h                           |  2 +-
>  lib/librte_kvargs/rte_kvargs.c                     |  2 -
>  lib/librte_mbuf/rte_mbuf.c                         |  1 -
>  lib/librte_mbuf/rte_mbuf.h                         | 15 +++--
>  lib/librte_meter/rte_meter.c                       |  4 +-
>  lib/librte_meter/rte_meter.h                       | 12 ++--
>  lib/librte_net/rte_arp.c                           |  2 +-
>  lib/librte_net/rte_arp.h                           |  2 +-
>  lib/librte_net/rte_net.c                           |  2 +-
>  lib/librte_net/rte_net.h                           |  2 +-
>  lib/librte_pipeline/rte_port_in_action.h           | 16 ++---
>  lib/librte_pipeline/rte_table_action.h             | 32 +++++-----
>  lib/librte_power/rte_power_empty_poll.c            | 14 ++---
>  lib/librte_power/rte_power_empty_poll.h            | 14 ++---
>  lib/librte_rcu/rte_rcu_qsbr.c                      | 12 ++--
>  lib/librte_rcu/rte_rcu_qsbr.h                      | 26 ++++----
>  lib/librte_sched/rte_sched.c                       |  2 +-
>  lib/librte_sched/rte_sched.h                       |  2 +-
>  lib/librte_security/rte_security.c                 |  6 +-
>  lib/librte_security/rte_security.h                 |  6 +-
>  lib/librte_stack/rte_stack.h                       | 14 ++---
>  lib/librte_stack/rte_stack_lf.h                    |  4 +-
>  lib/librte_stack/rte_stack_std.h                   |  6 +-
>  lib/librte_table/rte_table_hash_func.h             | 18 +++---
>  lib/librte_telemetry/rte_telemetry.c               |  6 +-
>  lib/librte_telemetry/rte_telemetry.h               |  6 +-
>  lib/librte_telemetry/rte_telemetry_parser.c        |  2 +-
>  lib/librte_telemetry/rte_telemetry_parser.h        |  2 +-
>  lib/librte_timer/rte_timer.c                       | 16 ++---
>  lib/librte_timer/rte_timer.h                       | 16 ++---
>  lib/librte_vhost/rte_vdpa.h                        | 14 ++---
>  lib/librte_vhost/rte_vhost.h                       | 22 +++----
>  lib/librte_vhost/rte_vhost_crypto.h                | 10 ++--
>  lib/librte_vhost/vdpa.c                            |  2 +-
>  lib/librte_vhost/vhost_crypto.c                    | 10 ++--
>  118 files changed, 791 insertions(+), 647 deletions(-)
>  create mode 100755 buildtools/map-list-symbol.sh
> 
> -- 
> 1.8.3.1
> 
> 
With the fix for rte_telemetry_parse

Series
Acked-by: Neil Horman <nhorman@tuxdriver.com>

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

* Re: [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-28 19:20     ` David Marchand
@ 2019-06-29  5:57       ` David Marchand
  2019-06-29  6:19         ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-29  5:57 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Neil Horman, Aaron Conole, John McNamara, Marko Kovacevic,
	Hemant Agrawal, Shreyansh Jain, Wenzhuo Lu, Konstantin Ananyev,
	Amr Mokhtar, Fiona Trahe, Pablo de Lara, Ashish Gupta,
	Declan Doherty, Anatoly Burakov, Harry van Haaren,
	Bruce Richardson, Ferruh Yigit, Andrew Rybchenko,
	Adrien Mazarguil, Cristian Dumitrescu, Nikhil Rao, Jerin Jacob,
	Bernard Iremonger, Yipeng Wang, Sameh Gobriel, Olivier Matz,
	David Hunt, Honnappa Nagarahalli, Akhil Goyal, Kevin Laatz,
	Robert Sanford, Erik Gabriel Carrillo, Maxime Coquelin,
	Tiwei Bie, Zhihong Wang

On Fri, Jun 28, 2019 at 9:20 PM David Marchand <david.marchand@redhat.com>
wrote:

>
> On Fri, Jun 28, 2019 at 5:57 PM Thomas Monjalon <thomas@monjalon.net>
> wrote:
>
>> 27/06/2019 13:33, David Marchand:
>> > We had some inconsistencies between functions prototypes and actual
>> > definitions.
>> > Let's avoid this by only adding the experimental tag to the prototypes.
>> > Tests with gcc and clang show it is enough.
>> >
>> > git grep -l __rte_experimental |grep \.c$ |while read file; do
>> >       sed -i -e '/^__rte_experimental$/d' $file;
>> >       sed -i -e 's/  *__rte_experimental//' $file;
>> >       sed -i -e 's/__rte_experimental  *//' $file;
>> > done
>>
>> There is one miss:
>>
>> rte_telemetry_parse is not flagged as experimental
>> but is listed in version map
>> Please add __rte_experimental to the definition of rte_telemetry_parse
>>
>
> Not sure I get you.
> How did you get this warning?
>
>
Ah ok, this library is disabled by default.
Another fix being cooked.

Expect a v2 maybe later today, but I still need an answer on which approach
we take :-)


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-29  5:57       ` David Marchand
@ 2019-06-29  6:19         ` David Marchand
  2019-07-01  9:57           ` Laatz, Kevin
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-29  6:19 UTC (permalink / raw)
  To: Kevin Laatz; +Cc: dev, Thomas Monjalon

On Sat, Jun 29, 2019 at 7:57 AM David Marchand <david.marchand@redhat.com>
wrote:

> On Fri, Jun 28, 2019 at 9:20 PM David Marchand <david.marchand@redhat.com>
> wrote:
>
>>
>> On Fri, Jun 28, 2019 at 5:57 PM Thomas Monjalon <thomas@monjalon.net>
>> wrote:
>>
>>> 27/06/2019 13:33, David Marchand:
>>> > We had some inconsistencies between functions prototypes and actual
>>> > definitions.
>>> > Let's avoid this by only adding the experimental tag to the prototypes.
>>> > Tests with gcc and clang show it is enough.
>>> >
>>> > git grep -l __rte_experimental |grep \.c$ |while read file; do
>>> >       sed -i -e '/^__rte_experimental$/d' $file;
>>> >       sed -i -e 's/  *__rte_experimental//' $file;
>>> >       sed -i -e 's/__rte_experimental  *//' $file;
>>> > done
>>>
>>> There is one miss:
>>>
>>> rte_telemetry_parse is not flagged as experimental
>>> but is listed in version map
>>> Please add __rte_experimental to the definition of rte_telemetry_parse
>>>
>>
>> Not sure I get you.
>> How did you get this warning?
>>
>>
> Ah ok, this library is disabled by default.
> Another fix being cooked.
>
> Expect a v2 maybe later today, but I still need an answer on which
> approach we take :-)
>

Reducing the CC: list.

So, the reason why it is not flagged is that rte_telemetry_parser.h is not
included in rte_telemetry_parser.c.
But then I wondered why we did not see it.
rte_telemetry Makefile does not add WERROR_FLAGS in its CFLAGS.
If I try to add it, we have an avalanche of warnings for trivial things
like symbol not marked as static, and a more bizarre "null" string passed
as a marker that something went bad.

I will send the fix on the missing header as part of my series.
But please Kevin, fix the rest of the warnings and add WERROR_FLAGS in the
lib Makefile.

Thanks.

-- 
David Marchand


-- 
David Marchand

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

* [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
                   ` (9 preceding siblings ...)
  2019-06-28 19:58 ` [dpdk-dev] [PATCH 0/9] experimental tags fixes Neil Horman
@ 2019-06-29 11:58 ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 01/10] eal: hide internal hotplug symbol David Marchand
                     ` (10 more replies)
  10 siblings, 11 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen

Here is a new series on __rte_experimental tags.

Following the build error reported by Aaron [1], I noticed that some
experimental functions could go unnoticed because of a gcc peculiarity.

To catch those, I went and added a new check on the object files to
ensure that any experimental api flagged in the map files is really
exported as such.

Then went with my previous idea of only adding the tags on the functions
prototypes and enforcing it (a new check in checkpatches.sh).
And finally enforcing that the __rte_experimental tag is always the first
part of a function prototype which seems to work with both gcc and clang.

Comments and reviews highly welcome :-).

Changelog since v1:
- rebased on master, caught newly introduced issues in eal
- added acks
- fixed telemetry issue
- squashed Adrien proposition in the last patch

[1]: http://mails.dpdk.org/archives/dev/2019-June/135365.html

-- 
David Marchand

David Marchand (10):
  eal: hide internal hotplug symbol
  devargs: remove incorrect experimental tags
  vfio: remove incorrect experimental tag
  raw/dpaa2_qdma: remove incorrect experimental tag
  buildtools: detect discrepancies for experimental symbols
  net/atlantic: add missing experimental api tags
  mem: remove incorrect experimental tag on static symbol
  telemetry: add missing header include
  remove experimental tags from all symbol definitions
  enforce __rte_experimental at the start of symbol declarations

 buildtools/check-experimental-syms.sh              | 29 ++++++--
 buildtools/map-list-symbol.sh                      | 70 +++++++++++++++++++
 devtools/checkpatches.sh                           | 38 +++++++++++
 doc/guides/contributing/versioning.rst             |  6 +-
 drivers/net/atlantic/rte_pmd_atlantic.c            | 12 ++--
 drivers/net/atlantic/rte_pmd_atlantic.h            | 24 +++++++
 drivers/net/dpaa2/dpaa2_ethdev.c                   |  2 +-
 drivers/net/ixgbe/rte_pmd_ixgbe.c                  | 10 +--
 drivers/net/ixgbe/rte_pmd_ixgbe.h                  | 15 +++--
 drivers/net/softnic/rte_eth_softnic.h              |  3 +-
 drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h        |  2 +-
 lib/librte_bbdev/rte_bbdev.c                       | 52 +++++++--------
 lib/librte_bbdev/rte_bbdev.h                       | 72 +++++++++++++-------
 lib/librte_bbdev/rte_bbdev_op.h                    | 18 +++--
 lib/librte_bbdev/rte_bbdev_pmd.h                   | 12 ++--
 lib/librte_bpf/bpf.c                               |  4 +-
 lib/librte_bpf/bpf_exec.c                          |  4 +-
 lib/librte_bpf/bpf_load.c                          |  4 +-
 lib/librte_bpf/bpf_load_elf.c                      |  2 +-
 lib/librte_bpf/bpf_pkt.c                           |  8 +--
 lib/librte_bpf/rte_bpf.h                           | 18 +++--
 lib/librte_bpf/rte_bpf_ethdev.h                    | 12 ++--
 lib/librte_compressdev/rte_comp.c                  | 12 ++--
 lib/librte_compressdev/rte_comp.h                  | 18 +++--
 lib/librte_compressdev/rte_compressdev.c           | 50 +++++++-------
 lib/librte_compressdev/rte_compressdev.h           | 66 ++++++++++++------
 lib/librte_compressdev/rte_compressdev_pmd.c       |  6 +-
 lib/librte_compressdev/rte_compressdev_pmd.h       | 18 +++--
 lib/librte_cryptodev/rte_cryptodev.c               | 28 ++++----
 lib/librte_cryptodev/rte_cryptodev.h               | 42 ++++++++----
 lib/librte_eal/common/eal_common_class.c           |  6 +-
 lib/librte_eal/common/eal_common_dev.c             |  8 +--
 lib/librte_eal/common/eal_common_fbarray.c         | 52 +++++++--------
 lib/librte_eal/common/eal_common_log.c             |  2 +-
 lib/librte_eal/common/eal_common_memory.c          | 50 +++++++-------
 lib/librte_eal/common/eal_common_proc.c            | 12 ++--
 lib/librte_eal/common/eal_common_timer.c           |  2 +-
 lib/librte_eal/common/hotplug_mp.c                 |  2 +-
 lib/librte_eal/common/hotplug_mp.h                 |  9 +++
 .../common/include/arch/x86/rte_atomic_64.h        |  3 +-
 lib/librte_eal/common/include/generic/rte_atomic.h |  3 +-
 lib/librte_eal/common/include/generic/rte_cycles.h |  3 +-
 lib/librte_eal/common/include/generic/rte_rwlock.h |  6 +-
 .../common/include/generic/rte_ticketlock.h        | 27 +++++---
 lib/librte_eal/common/include/rte_dev.h            | 27 +++++---
 lib/librte_eal/common/include/rte_devargs.h        |  2 -
 lib/librte_eal/common/include/rte_eal.h            | 27 ++++----
 lib/librte_eal/common/include/rte_fbarray.h        | 78 ++++++++++++++--------
 lib/librte_eal/common/include/rte_interrupts.h     |  3 +-
 lib/librte_eal/common/include/rte_lcore.h          |  6 +-
 lib/librte_eal/common/include/rte_malloc.h         | 30 ++++++---
 lib/librte_eal/common/include/rte_memory.h         | 72 +++++++++++++-------
 lib/librte_eal/common/include/rte_random.h         |  3 +-
 lib/librte_eal/common/include/rte_service.h        |  9 ++-
 lib/librte_eal/common/rte_malloc.c                 |  2 +-
 lib/librte_eal/common/rte_option.c                 |  1 -
 lib/librte_eal/common/rte_random.c                 |  2 +-
 lib/librte_eal/common/rte_service.c                |  6 +-
 lib/librte_eal/freebsd/eal/eal.c                   |  2 +-
 lib/librte_eal/freebsd/eal/eal_dev.c               |  8 +--
 lib/librte_eal/freebsd/eal/eal_interrupts.c        |  2 +-
 lib/librte_eal/linux/eal/eal.c                     |  3 +-
 lib/librte_eal/linux/eal/eal_dev.c                 |  8 +--
 lib/librte_eal/linux/eal/eal_interrupts.c          |  2 +-
 lib/librte_eal/linux/eal/eal_vfio.c                |  2 +-
 lib/librte_ethdev/rte_ethdev.c                     | 28 ++++----
 lib/librte_ethdev/rte_ethdev.h                     | 36 ++++++----
 lib/librte_ethdev/rte_ethdev_driver.h              | 15 +++--
 lib/librte_ethdev/rte_flow.c                       |  2 +-
 lib/librte_ethdev/rte_flow_driver.h                |  3 +-
 lib/librte_ethdev/rte_mtr.c                        | 24 +++----
 lib/librte_ethdev/rte_mtr.h                        | 36 ++++++----
 lib/librte_eventdev/rte_event_eth_rx_adapter.c     |  4 +-
 lib/librte_eventdev/rte_event_eth_rx_adapter.h     |  6 +-
 lib/librte_flow_classify/rte_flow_classify.c       | 14 ++--
 lib/librte_flow_classify/rte_flow_classify.h       | 21 ++++--
 lib/librte_hash/rte_cuckoo_hash.c                  |  2 +-
 lib/librte_hash/rte_hash.h                         |  3 +-
 lib/librte_ip_frag/rte_ip_frag.h                   |  3 +-
 lib/librte_ip_frag/rte_ip_frag_common.c            |  2 +-
 lib/librte_ipsec/rte_ipsec.h                       |  9 ++-
 lib/librte_ipsec/rte_ipsec_group.h                 |  6 +-
 lib/librte_ipsec/rte_ipsec_sa.h                    | 12 ++--
 lib/librte_ipsec/sa.c                              |  8 +--
 lib/librte_ipsec/ses.c                             |  2 +-
 lib/librte_kni/rte_kni.c                           |  2 +-
 lib/librte_kni/rte_kni.h                           |  3 +-
 lib/librte_kvargs/rte_kvargs.c                     |  2 -
 lib/librte_mbuf/rte_mbuf.c                         |  1 -
 lib/librte_mbuf/rte_mbuf.h                         | 18 +++--
 lib/librte_meter/rte_meter.c                       |  4 +-
 lib/librte_meter/rte_meter.h                       | 18 +++--
 lib/librte_net/rte_arp.c                           |  2 +-
 lib/librte_net/rte_arp.h                           |  3 +-
 lib/librte_net/rte_net.c                           |  2 +-
 lib/librte_net/rte_net.h                           |  3 +-
 lib/librte_pipeline/rte_port_in_action.h           | 24 ++++---
 lib/librte_pipeline/rte_table_action.h             | 48 ++++++++-----
 lib/librte_power/rte_power_empty_poll.c            | 14 ++--
 lib/librte_power/rte_power_empty_poll.h            | 21 ++++--
 lib/librte_rcu/rte_rcu_qsbr.c                      | 12 ++--
 lib/librte_rcu/rte_rcu_qsbr.h                      | 39 +++++++----
 lib/librte_sched/rte_sched.c                       |  2 +-
 lib/librte_sched/rte_sched.h                       |  3 +-
 lib/librte_security/rte_security.c                 |  6 +-
 lib/librte_security/rte_security.h                 |  9 ++-
 lib/librte_stack/rte_stack.h                       | 21 ++++--
 lib/librte_stack/rte_stack_lf.h                    |  6 +-
 lib/librte_stack/rte_stack_std.h                   |  9 ++-
 lib/librte_table/rte_table_hash_func.h             | 27 +++++---
 lib/librte_telemetry/rte_telemetry.c               |  6 +-
 lib/librte_telemetry/rte_telemetry.h               |  9 ++-
 lib/librte_telemetry/rte_telemetry_parser.c        |  3 +-
 lib/librte_telemetry/rte_telemetry_parser.h        |  3 +-
 lib/librte_timer/rte_timer.c                       | 16 ++---
 lib/librte_timer/rte_timer.h                       | 24 ++++---
 lib/librte_vhost/rte_vdpa.h                        | 21 ++++--
 lib/librte_vhost/rte_vhost.h                       | 33 ++++++---
 lib/librte_vhost/rte_vhost_crypto.h                | 15 +++--
 lib/librte_vhost/vdpa.c                            |  2 +-
 lib/librte_vhost/vhost_crypto.c                    | 10 +--
 121 files changed, 1160 insertions(+), 654 deletions(-)
 create mode 100755 buildtools/map-list-symbol.sh

-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 01/10] eal: hide internal hotplug symbol
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 02/10] devargs: remove incorrect experimental tags David Marchand
                     ` (9 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

This api was experimental and not properly marked in the map file.
But looking more closely, this is just an internal wrapper for EAL init.
Hide it in the hotplug code.

Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 lib/librte_eal/common/hotplug_mp.c      | 2 +-
 lib/librte_eal/common/hotplug_mp.h      | 9 +++++++++
 lib/librte_eal/common/include/rte_eal.h | 9 ---------
 lib/librte_eal/linux/eal/eal.c          | 3 ++-
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/lib/librte_eal/common/hotplug_mp.c b/lib/librte_eal/common/hotplug_mp.c
index 4f316ba..ee79190 100644
--- a/lib/librte_eal/common/hotplug_mp.c
+++ b/lib/librte_eal/common/hotplug_mp.c
@@ -438,7 +438,7 @@ int eal_dev_hotplug_request_to_secondary(struct eal_dev_mp_req *req)
 	return 0;
 }
 
-int rte_mp_dev_hotplug_init(void)
+int eal_mp_dev_hotplug_init(void)
 {
 	int ret;
 
diff --git a/lib/librte_eal/common/hotplug_mp.h b/lib/librte_eal/common/hotplug_mp.h
index 597fde3..8fcf9b5 100644
--- a/lib/librte_eal/common/hotplug_mp.h
+++ b/lib/librte_eal/common/hotplug_mp.h
@@ -29,6 +29,15 @@ struct eal_dev_mp_req {
 };
 
 /**
+ * Register all mp action callbacks for hotplug.
+ *
+ * @return
+ *   0 on success, negative on error.
+ */
+int
+eal_mp_dev_hotplug_init(void);
+
+/**
  * This is a synchronous wrapper for secondary process send
  * request to primary process, this is invoked when an attach
  * or detach request is issued from primary process.
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index cf701e1..27808a3 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -409,15 +409,6 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer);
 
 /**
- * Register all mp action callbacks for hotplug.
- *
- * @return
- *   0 on success, negative on error.
- */
-int __rte_experimental
-rte_mp_dev_hotplug_init(void);
-
-/**
  * Usage function typedef used by the application usage function.
  *
  * Use this function typedef to define and call rte_set_application_usage_hook()
diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
index aa0137e..8a0b387 100644
--- a/lib/librte_eal/linux/eal/eal.c
+++ b/lib/librte_eal/linux/eal/eal.c
@@ -59,6 +59,7 @@
 #include "eal_hugepages.h"
 #include "eal_options.h"
 #include "eal_vfio.h"
+#include "hotplug_mp.h"
 
 #define MEMSIZE_IF_NO_HUGE_PAGE (64ULL * 1024ULL * 1024ULL)
 
@@ -1062,7 +1063,7 @@ static void rte_eal_init_alert(const char *msg)
 	}
 
 	/* register multi-process action callbacks for hotplug */
-	if (rte_mp_dev_hotplug_init() < 0) {
+	if (eal_mp_dev_hotplug_init() < 0) {
 		rte_eal_init_alert("failed to register mp callback for hotplug");
 		return -1;
 	}
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 02/10] devargs: remove incorrect experimental tags
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 01/10] eal: hide internal hotplug symbol David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 03/10] vfio: remove incorrect experimental tag David Marchand
                     ` (8 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

The incriminated commit promoted those symbols as stable but the
prototypes still have the tag.

Fixes: 73eca2f77f4c ("devargs: promote experimental API as stable")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 lib/librte_eal/common/include/rte_devargs.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h
index 89d9432..882dfa0 100644
--- a/lib/librte_eal/common/include/rte_devargs.h
+++ b/lib/librte_eal/common/include/rte_devargs.h
@@ -151,7 +151,6 @@ struct rte_devargs {
  *   - 0 on success
  *   - Negative on error.
  */
-__rte_experimental
 int
 rte_devargs_insert(struct rte_devargs **da);
 
@@ -183,7 +182,6 @@ struct rte_devargs {
  *   <0 on error.
  *   >0 if the devargs was not within the user device list.
  */
-__rte_experimental
 int rte_devargs_remove(struct rte_devargs *devargs);
 
 /**
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 03/10] vfio: remove incorrect experimental tag
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 01/10] eal: hide internal hotplug symbol David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 02/10] devargs: remove incorrect experimental tags David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 04/10] raw/dpaa2_qdma: " David Marchand
                     ` (7 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

The incriminated commit promoted this symbol as stable but the
definition still has the tag.

Fixes: 787ae736a3d9 ("vfio: remove experimental tag")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 lib/librte_eal/linux/eal/eal_vfio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/linux/eal/eal_vfio.c b/lib/librte_eal/linux/eal/eal_vfio.c
index 6892a2c..feada64 100644
--- a/lib/librte_eal/linux/eal/eal_vfio.c
+++ b/lib/librte_eal/linux/eal/eal_vfio.c
@@ -1834,7 +1834,7 @@ struct spapr_walk_param {
 	return vfio_cfgs[i].vfio_container_fd;
 }
 
-int __rte_experimental
+int
 rte_vfio_container_destroy(int container_fd)
 {
 	struct vfio_config *vfio_cfg;
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 04/10] raw/dpaa2_qdma: remove incorrect experimental tag
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (2 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 03/10] vfio: remove incorrect experimental tag David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 05/10] buildtools: detect discrepancies for experimental symbols David Marchand
                     ` (6 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

The incriminated commit promoted this symbol as stable but the
prototype still has the tag.

Fixes: fb1a20331d70 ("raw/dpaa2_qdma: remove experimental tag from APIs")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
index caf0293..a1f9050 100644
--- a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
+++ b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h
@@ -286,7 +286,7 @@ struct rte_qdma_job {
  * @returns
  *   - A completed job or NULL if no job is there.
  */
-struct rte_qdma_job * __rte_experimental
+struct rte_qdma_job *
 rte_qdma_vq_dequeue(uint16_t vq_id);
 
 /**
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 05/10] buildtools: detect discrepancies for experimental symbols
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (3 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 04/10] raw/dpaa2_qdma: " David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 06/10] net/atlantic: add missing experimental api tags David Marchand
                     ` (5 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen

When promoting those symbols as stable, there is no check to ensure that
the final result is consistent.

Add a little script to get the symbols per section from the library map
files.
Validate that all experimental symbols in object files are referenced by
library map files.

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 buildtools/check-experimental-syms.sh | 29 +++++++++++----
 buildtools/map-list-symbol.sh         | 70 +++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+), 7 deletions(-)
 create mode 100755 buildtools/map-list-symbol.sh

diff --git a/buildtools/check-experimental-syms.sh b/buildtools/check-experimental-syms.sh
index 7d1f3a5..653756e 100755
--- a/buildtools/check-experimental-syms.sh
+++ b/buildtools/check-experimental-syms.sh
@@ -5,6 +5,8 @@
 MAPFILE=$1
 OBJFILE=$2
 
+LIST_SYMBOL=$RTE_SDK/buildtools/map-list-symbol.sh
+
 # added check for "make -C test/" usage
 if [ ! -e $MAPFILE ] || [ ! -f $OBJFILE ]
 then
@@ -16,12 +18,9 @@ then
 	exit 0
 fi
 
-for i in `awk 'BEGIN {found=0}
-		/.*EXPERIMENTAL.*/ {found=1}
-		/.*}.*;/ {found=0}
-		/.*;/ {if (found == 1) print $1}' $MAPFILE`
+ret=0
+for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE`
 do
-	SYM=`echo $i | sed -e"s/;//"`
 	objdump -t $OBJFILE | grep -q "\.text.*$SYM$"
 	IN_TEXT=$?
 	objdump -t $OBJFILE | grep -q "\.text\.experimental.*$SYM$"
@@ -33,8 +32,24 @@ do
 		but is listed in version map
 		Please add __rte_experimental to the definition of $SYM
 		END_OF_MESSAGE
-		exit 1
+		ret=1
 	fi
 done
-exit 0
 
+for SYM in `objdump -t $OBJFILE |awk '{
+	if ($2 != "l" && $4 == ".text.experimental") {
+		print $NF
+	}
+}'`
+do
+	$LIST_SYMBOL -S EXPERIMENTAL -s $SYM -q $MAPFILE || {
+		cat >&2 <<- END_OF_MESSAGE
+		$SYM is flagged as experimental
+		but is not listed in version map
+		Please add $SYM to the version map
+		END_OF_MESSAGE
+		ret=1
+	}
+done
+
+exit $ret
diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
new file mode 100755
index 0000000..5509b4a
--- /dev/null
+++ b/buildtools/map-list-symbol.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 David Marchand <david.marchand@redhat.com>
+
+section=all
+symbol=all
+quiet=
+
+while getopts 'S:s:q' name; do
+	case $name in
+	S)
+		[ $section = 'all' ] || {
+			echo 'Cannot list in multiple sections'
+			exit 1
+		}
+		section=$OPTARG
+	;;
+	s)
+		[ $symbol = 'all' ] || {
+			echo 'Cannot list multiple symbols'
+			exit 1
+		}
+		symbol=$OPTARG
+	;;
+	q)
+		quiet='y'
+	;;
+	?)
+		echo 'usage: $0 [-S section] [-s symbol] [-q]'
+		exit 1
+	;;
+	esac
+done
+
+shift $(($OPTIND - 1))
+
+for file in $@; do
+	cat "$file" |awk '
+	BEGIN {
+		current_section = "";
+		if ("'$section'" == "all" && "'$symbol'" == "all") {
+			ret = 0;
+		} else {
+			ret = 1;
+		}
+	}
+	/^.*{/ {
+		if ("'$section'" == "all" || $1 == "'$section'") {
+			current_section = $1;
+		}
+	}
+	/.*}/ { current_section = ""; }
+	/^[^}].*[^:*];/ {
+		if (current_section != "") {
+			gsub(";","");
+			if ("'$symbol'" == "all" || $1 == "'$symbol'") {
+				ret = 0;
+				if ("'$quiet'" == "") {
+					print "'$file' "current_section" "$1;
+				}
+				if ("'$symbol'" != "all") {
+					exit 0;
+				}
+			}
+		}
+	}
+	END {
+		exit ret;
+	}'
+done
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 06/10] net/atlantic: add missing experimental api tags
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (4 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 05/10] buildtools: detect discrepancies for experimental symbols David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 07/10] mem: remove incorrect experimental tag on static symbol David Marchand
                     ` (4 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

Those symbols are declared in the library map but the prototypes are
missing the experimental tag.
Without it, existing users won't notice it is experimental.

Fixes: ec0dec44ecb9 ("net/atlantic: enable MACsec configuration")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 drivers/net/atlantic/rte_pmd_atlantic.c | 12 ++++++------
 drivers/net/atlantic/rte_pmd_atlantic.h | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/drivers/net/atlantic/rte_pmd_atlantic.c b/drivers/net/atlantic/rte_pmd_atlantic.c
index 5bf4da2..2962f5c 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic.c
+++ b/drivers/net/atlantic/rte_pmd_atlantic.c
@@ -8,7 +8,7 @@
 #include "atl_ethdev.h"
 
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_enable(uint16_t port,
 			  uint8_t encr, uint8_t repl_prot)
 {
@@ -24,7 +24,7 @@
 	return atl_macsec_enable(dev, encr, repl_prot);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_disable(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -39,7 +39,7 @@
 	return atl_macsec_disable(dev);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac)
 {
 	struct rte_eth_dev *dev;
@@ -54,7 +54,7 @@
 	return atl_macsec_config_txsc(dev, mac);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 {
 	struct rte_eth_dev *dev;
@@ -69,7 +69,7 @@
 	return atl_macsec_config_rxsc(dev, mac, pi);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
 {
@@ -85,7 +85,7 @@
 	return atl_macsec_select_txsa(dev, idx, an, pn, key);
 }
 
-__rte_experimental int
+int
 rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
 {
diff --git a/drivers/net/atlantic/rte_pmd_atlantic.h b/drivers/net/atlantic/rte_pmd_atlantic.h
index e4db7c6..c020856 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic.h
+++ b/drivers/net/atlantic/rte_pmd_atlantic.h
@@ -14,6 +14,9 @@
 #include <rte_ethdev_driver.h>
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable MACsec offload.
  *
  * @param port
@@ -29,9 +32,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_enable(uint16_t port, uint8_t encr, uint8_t repl_prot);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Disable MACsec offload.
  *
  * @param port
@@ -41,9 +48,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_disable(uint16_t port);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Configure Tx SC (Secure Connection).
  *
  * @param port
@@ -55,9 +66,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Configure Rx SC (Secure Connection).
  *
  * @param port
@@ -71,9 +86,13 @@
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable Tx SA (Secure Association).
  *
  * @param port
@@ -92,10 +111,14 @@
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  *   - (-EINVAL) if bad parameter.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				   uint32_t pn, uint8_t *key);
 
 /**
+ * @warning
+ * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
+ *
  * Enable Rx SA (Secure Association).
  *
  * @param port
@@ -114,6 +137,7 @@ int rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  *   - (-EINVAL) if bad parameter.
  */
+__rte_experimental
 int rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				   uint32_t pn, uint8_t *key);
 
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 07/10] mem: remove incorrect experimental tag on static symbol
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (5 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 06/10] net/atlantic: add missing experimental api tags David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 08/10] telemetry: add missing header include David Marchand
                     ` (3 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

This function is not visible from outside this code unit.

Fixes: 84e7477e10b1 ("mem: add thread unsafe version for DMA mask check")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
 lib/librte_eal/common/eal_common_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index 5ae8d01..de6fc1b 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -448,7 +448,7 @@ struct virtiova {
 #define MAX_DMA_MASK_BITS 63
 
 /* check memseg iovas are within the required range based on dma mask */
-static int __rte_experimental
+static int
 check_dma_mask(uint8_t maskbits, bool thread_unsafe)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 08/10] telemetry: add missing header include
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (6 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 07/10] mem: remove incorrect experimental tag on static symbol David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 09/10] remove experimental tags from all symbol definitions David Marchand
                     ` (2 subsequent siblings)
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen, stable

Fixes: 1b756087db93 ("telemetry: add parser for client socket messages")
Cc: stable@dpdk.org

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/librte_telemetry/rte_telemetry_parser.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/librte_telemetry/rte_telemetry_parser.c b/lib/librte_telemetry/rte_telemetry_parser.c
index e76382a..956d783 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.c
+++ b/lib/librte_telemetry/rte_telemetry_parser.c
@@ -13,6 +13,7 @@
 #include <rte_ethdev.h>
 
 #include "rte_telemetry_internal.h"
+#include "rte_telemetry_parser.h"
 
 typedef int (*command_func)(struct telemetry_impl *, int, json_t *);
 
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 09/10] remove experimental tags from all symbol definitions
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (7 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 08/10] telemetry: add missing header include David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations David Marchand
  2019-06-29 17:06   ` [dpdk-dev] [PATCH v2 00/10] experimental tags fixes Thomas Monjalon
  10 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen

We had some inconsistencies between functions prototypes and actual
definitions.
Let's avoid this by only adding the experimental tag to the prototypes.
Tests with gcc and clang show it is enough.

git grep -l __rte_experimental |grep \.c$ |while read file; do
	sed -i -e '/^__rte_experimental$/d' $file;
	sed -i -e 's/  *__rte_experimental//' $file;
	sed -i -e 's/__rte_experimental  *//' $file;
done

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
Changelog since v1:
- fixed checkpatch warning
- fixed rte_random new symbol

---
 devtools/checkpatches.sh                       | 33 ++++++++++++++++
 doc/guides/contributing/versioning.rst         |  6 +--
 drivers/net/dpaa2/dpaa2_ethdev.c               |  2 +-
 drivers/net/ixgbe/rte_pmd_ixgbe.c              | 10 ++---
 lib/librte_bbdev/rte_bbdev.c                   | 52 +++++++++++++-------------
 lib/librte_bpf/bpf.c                           |  4 +-
 lib/librte_bpf/bpf_exec.c                      |  4 +-
 lib/librte_bpf/bpf_load.c                      |  4 +-
 lib/librte_bpf/bpf_load_elf.c                  |  2 +-
 lib/librte_bpf/bpf_pkt.c                       |  8 ++--
 lib/librte_compressdev/rte_comp.c              | 12 +++---
 lib/librte_compressdev/rte_compressdev.c       | 50 ++++++++++++-------------
 lib/librte_compressdev/rte_compressdev_pmd.c   |  6 +--
 lib/librte_cryptodev/rte_cryptodev.c           | 28 +++++++-------
 lib/librte_eal/common/eal_common_class.c       |  6 +--
 lib/librte_eal/common/eal_common_dev.c         |  8 ++--
 lib/librte_eal/common/eal_common_fbarray.c     | 52 +++++++++++++-------------
 lib/librte_eal/common/eal_common_log.c         |  2 +-
 lib/librte_eal/common/eal_common_memory.c      | 48 ++++++++++++------------
 lib/librte_eal/common/eal_common_proc.c        | 12 +++---
 lib/librte_eal/common/eal_common_timer.c       |  2 +-
 lib/librte_eal/common/rte_malloc.c             |  2 +-
 lib/librte_eal/common/rte_option.c             |  1 -
 lib/librte_eal/common/rte_random.c             |  2 +-
 lib/librte_eal/common/rte_service.c            |  6 +--
 lib/librte_eal/freebsd/eal/eal.c               |  2 +-
 lib/librte_eal/freebsd/eal/eal_dev.c           |  8 ++--
 lib/librte_eal/freebsd/eal/eal_interrupts.c    |  2 +-
 lib/librte_eal/linux/eal/eal_dev.c             |  8 ++--
 lib/librte_eal/linux/eal/eal_interrupts.c      |  2 +-
 lib/librte_ethdev/rte_ethdev.c                 | 28 +++++++-------
 lib/librte_ethdev/rte_flow.c                   |  2 +-
 lib/librte_ethdev/rte_mtr.c                    | 24 ++++++------
 lib/librte_eventdev/rte_event_eth_rx_adapter.c |  4 +-
 lib/librte_flow_classify/rte_flow_classify.c   | 14 +++----
 lib/librte_hash/rte_cuckoo_hash.c              |  2 +-
 lib/librte_ip_frag/rte_ip_frag_common.c        |  2 +-
 lib/librte_ipsec/sa.c                          |  8 ++--
 lib/librte_ipsec/ses.c                         |  2 +-
 lib/librte_kni/rte_kni.c                       |  2 +-
 lib/librte_kvargs/rte_kvargs.c                 |  2 -
 lib/librte_mbuf/rte_mbuf.c                     |  1 -
 lib/librte_meter/rte_meter.c                   |  4 +-
 lib/librte_net/rte_arp.c                       |  2 +-
 lib/librte_net/rte_net.c                       |  2 +-
 lib/librte_power/rte_power_empty_poll.c        | 14 +++----
 lib/librte_rcu/rte_rcu_qsbr.c                  | 12 +++---
 lib/librte_sched/rte_sched.c                   |  2 +-
 lib/librte_security/rte_security.c             |  6 +--
 lib/librte_telemetry/rte_telemetry.c           |  6 +--
 lib/librte_telemetry/rte_telemetry_parser.c    |  2 +-
 lib/librte_timer/rte_timer.c                   | 16 ++++----
 lib/librte_vhost/vdpa.c                        |  2 +-
 lib/librte_vhost/vhost_crypto.c                | 10 ++---
 54 files changed, 289 insertions(+), 264 deletions(-)

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 6a01b39..d150353 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -79,6 +79,31 @@ check_forbidden_additions() { # <patch>
 	return $res
 }
 
+check_experimental_tags() { # <patch>
+	res=0
+
+	cat "$1" |awk '
+	BEGIN {
+		current_file = "";
+		ret = 0;
+	}
+	/^+++ b\// {
+		current_file = $2;
+	}
+	/^+.*__rte_experimental/ {
+		if (current_file ~ ".c$" ) {
+			print "Please only put __rte_experimental tags in " \
+				"headers ("current_file")";
+			ret = 1;
+		}
+	}
+	END {
+		exit ret;
+	}' || res=1
+
+	return $res
+}
+
 number=0
 range='origin/master..'
 quiet=false
@@ -151,6 +176,14 @@ check () { # <patch> <commit> <title>
 		ret=1
 	fi
 
+	! $verbose || printf '\nChecking __rte_experimental tags:\n'
+	report=$(check_experimental_tags "$tmpinput")
+	if [ $? -ne 0 ] ; then
+		$headline_printed || print_headline "$3"
+		printf '%s\n' "$report"
+		ret=1
+	fi
+
 	clean_tmp_files
 	[ $ret -eq 0 ] && return 0
 
diff --git a/doc/guides/contributing/versioning.rst b/doc/guides/contributing/versioning.rst
index 5d93b18..3ab2c43 100644
--- a/doc/guides/contributing/versioning.rst
+++ b/doc/guides/contributing/versioning.rst
@@ -149,9 +149,9 @@ Note that marking an API as experimental is a multi step process.
 To mark an API as experimental, the symbols which are desired to be exported
 must be placed in an EXPERIMENTAL version block in the corresponding libraries'
 version map script.
-Secondly, the corresponding definitions of those exported functions, and
-their forward declarations (in the development header files), must be marked
-with the ``__rte_experimental`` tag (see ``rte_compat.h``).
+Secondly, the corresponding prototypes of those exported functions (in the
+development header files), must be marked with the ``__rte_experimental`` tag
+(see ``rte_compat.h``).
 The DPDK build makefiles perform a check to ensure that the map file and the
 C code reflect the same list of symbols.
 This check can be circumvented by defining ``ALLOW_EXPERIMENTAL_API``
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index d668f3e..03f6959 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -102,7 +102,7 @@ static int dpaa2_dev_link_update(struct rte_eth_dev *dev,
 
 int dpaa2_logtype_pmd;
 
-__rte_experimental void
+void
 rte_pmd_dpaa2_set_timestamp(enum pmd_dpaa2_ts enable)
 {
 	dpaa2_enable_ts = enable;
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.c b/drivers/net/ixgbe/rte_pmd_ixgbe.c
index 077afab..9514f2c 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.c
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.c
@@ -882,7 +882,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable)
 {
 	struct ixgbe_hw *hw;
@@ -1096,7 +1096,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	ixgbe_release_swfw_semaphore(hw, mask);
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_lock(uint16_t port)
 {
 	struct ixgbe_hw *hw;
@@ -1123,7 +1123,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return IXGBE_SUCCESS;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlock(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -1150,7 +1150,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return IXGBE_SUCCESS;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 				 uint32_t dev_type, uint16_t *phy_data)
 {
@@ -1197,7 +1197,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 				  uint32_t dev_type, uint16_t phy_data)
 {
diff --git a/lib/librte_bbdev/rte_bbdev.c b/lib/librte_bbdev/rte_bbdev.c
index a3ab5d9..0c35480 100644
--- a/lib/librte_bbdev/rte_bbdev.c
+++ b/lib/librte_bbdev/rte_bbdev.c
@@ -173,7 +173,7 @@ struct rte_bbdev_callback {
 	return RTE_BBDEV_MAX_DEVS;
 }
 
-struct rte_bbdev * __rte_experimental
+struct rte_bbdev *
 rte_bbdev_allocate(const char *name)
 {
 	int ret;
@@ -232,7 +232,7 @@ struct rte_bbdev * __rte_experimental
 	return bbdev;
 }
 
-int __rte_experimental
+int
 rte_bbdev_release(struct rte_bbdev *bbdev)
 {
 	uint16_t dev_id;
@@ -266,7 +266,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-struct rte_bbdev * __rte_experimental
+struct rte_bbdev *
 rte_bbdev_get_named_dev(const char *name)
 {
 	unsigned int i;
@@ -286,13 +286,13 @@ struct rte_bbdev * __rte_experimental
 	return NULL;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_bbdev_count(void)
 {
 	return num_devs;
 }
 
-bool __rte_experimental
+bool
 rte_bbdev_is_valid(uint16_t dev_id)
 {
 	if ((dev_id < RTE_BBDEV_MAX_DEVS) &&
@@ -301,7 +301,7 @@ struct rte_bbdev * __rte_experimental
 	return false;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_bbdev_find_next(uint16_t dev_id)
 {
 	dev_id++;
@@ -311,7 +311,7 @@ struct rte_bbdev * __rte_experimental
 	return dev_id;
 }
 
-int __rte_experimental
+int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
 {
 	unsigned int i;
@@ -401,7 +401,7 @@ struct rte_bbdev * __rte_experimental
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_bbdev_intr_enable(uint16_t dev_id)
 {
 	int ret;
@@ -433,7 +433,7 @@ struct rte_bbdev * __rte_experimental
 	return -ENOTSUP;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 		const struct rte_bbdev_queue_conf *conf)
 {
@@ -551,7 +551,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_start(uint16_t dev_id)
 {
 	int i;
@@ -583,7 +583,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_stop(uint16_t dev_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -604,7 +604,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_close(uint16_t dev_id)
 {
 	int ret;
@@ -649,7 +649,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -679,7 +679,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -739,7 +739,7 @@ struct rte_bbdev * __rte_experimental
 	rte_bbdev_log_debug("Reset stats on %u", dev->data->dev_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -762,7 +762,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_stats_reset(uint16_t dev_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -779,7 +779,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -807,7 +807,7 @@ struct rte_bbdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_queue_info *queue_info)
 {
@@ -872,7 +872,7 @@ struct rte_bbdev * __rte_experimental
 	}
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 		unsigned int num_elements, unsigned int cache_size,
 		int socket_id)
@@ -919,7 +919,7 @@ struct rte_mempool * __rte_experimental
 	return mp;
 }
 
-int __rte_experimental
+int
 rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
 {
@@ -964,7 +964,7 @@ struct rte_mempool * __rte_experimental
 	return (user_cb == NULL) ? -ENOMEM : 0;
 }
 
-int __rte_experimental
+int
 rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
 {
@@ -1009,7 +1009,7 @@ struct rte_mempool * __rte_experimental
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	enum rte_bbdev_event_type event, void *ret_param)
 {
@@ -1051,7 +1051,7 @@ struct rte_mempool * __rte_experimental
 	rte_spinlock_unlock(&rte_bbdev_cb_lock);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -1062,7 +1062,7 @@ struct rte_mempool * __rte_experimental
 	return dev->dev_ops->queue_intr_enable(dev, queue_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
 {
 	struct rte_bbdev *dev = get_dev(dev_id);
@@ -1073,7 +1073,7 @@ struct rte_mempool * __rte_experimental
 	return dev->dev_ops->queue_intr_disable(dev, queue_id);
 }
 
-int __rte_experimental
+int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 		void *data)
 {
@@ -1110,7 +1110,7 @@ struct rte_mempool * __rte_experimental
 }
 
 
-const char * __rte_experimental
+const char *
 rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
 {
 	static const char * const op_types[] = {
diff --git a/lib/librte_bpf/bpf.c b/lib/librte_bpf/bpf.c
index f590c8c..cc963d5 100644
--- a/lib/librte_bpf/bpf.c
+++ b/lib/librte_bpf/bpf.c
@@ -16,7 +16,7 @@
 
 int rte_bpf_logtype;
 
-__rte_experimental void
+void
 rte_bpf_destroy(struct rte_bpf *bpf)
 {
 	if (bpf != NULL) {
@@ -26,7 +26,7 @@
 	}
 }
 
-__rte_experimental int
+int
 rte_bpf_get_jit(const struct rte_bpf *bpf, struct rte_bpf_jit *jit)
 {
 	if (bpf == NULL || jit == NULL)
diff --git a/lib/librte_bpf/bpf_exec.c b/lib/librte_bpf/bpf_exec.c
index 6a79139..1bb2266 100644
--- a/lib/librte_bpf/bpf_exec.c
+++ b/lib/librte_bpf/bpf_exec.c
@@ -424,7 +424,7 @@
 	return 0;
 }
 
-__rte_experimental uint32_t
+uint32_t
 rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 	uint32_t num)
 {
@@ -443,7 +443,7 @@
 	return i;
 }
 
-__rte_experimental uint64_t
+uint64_t
 rte_bpf_exec(const struct rte_bpf *bpf, void *ctx)
 {
 	uint64_t rc;
diff --git a/lib/librte_bpf/bpf_load.c b/lib/librte_bpf/bpf_load.c
index 194103e..2a3b901 100644
--- a/lib/librte_bpf/bpf_load.c
+++ b/lib/librte_bpf/bpf_load.c
@@ -86,7 +86,7 @@
 	return 0;
 }
 
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_load(const struct rte_bpf_prm *prm)
 {
 	struct rte_bpf *bpf;
@@ -132,7 +132,7 @@
 }
 
 #ifndef RTE_LIBRTE_BPF_ELF
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
 {
diff --git a/lib/librte_bpf/bpf_load_elf.c b/lib/librte_bpf/bpf_load_elf.c
index 926317b..2b11ade 100644
--- a/lib/librte_bpf/bpf_load_elf.c
+++ b/lib/librte_bpf/bpf_load_elf.c
@@ -294,7 +294,7 @@
 	return bpf;
 }
 
-__rte_experimental struct rte_bpf *
+struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
 {
diff --git a/lib/librte_bpf/bpf_pkt.c b/lib/librte_bpf/bpf_pkt.c
index ab9daa5..6e8248f 100644
--- a/lib/librte_bpf/bpf_pkt.c
+++ b/lib/librte_bpf/bpf_pkt.c
@@ -480,7 +480,7 @@ struct bpf_eth_cbh {
 }
 
 
-__rte_experimental void
+void
 rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue)
 {
 	struct bpf_eth_cbh *cbh;
@@ -491,7 +491,7 @@ struct bpf_eth_cbh {
 	rte_spinlock_unlock(&cbh->lock);
 }
 
-__rte_experimental void
+void
 rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue)
 {
 	struct bpf_eth_cbh *cbh;
@@ -572,7 +572,7 @@ struct bpf_eth_cbh {
 	return rc;
 }
 
-__rte_experimental int
+int
 rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags)
@@ -588,7 +588,7 @@ struct bpf_eth_cbh {
 	return rc;
 }
 
-__rte_experimental int
+int
 rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags)
diff --git a/lib/librte_compressdev/rte_comp.c b/lib/librte_compressdev/rte_comp.c
index 06e3d44..3b0e46f 100644
--- a/lib/librte_compressdev/rte_comp.c
+++ b/lib/librte_compressdev/rte_comp.c
@@ -6,7 +6,7 @@
 #include "rte_compressdev.h"
 #include "rte_compressdev_internal.h"
 
-const char * __rte_experimental
+const char *
 rte_comp_get_feature_name(uint64_t flag)
 {
 	switch (flag) {
@@ -112,7 +112,7 @@ struct rte_comp_op_pool_private {
 	op->mempool = mempool;
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_comp_op_pool_create(const char *name,
 		unsigned int nb_elts, unsigned int cache_size,
 		uint16_t user_size, int socket_id)
@@ -167,7 +167,7 @@ struct rte_mempool * __rte_experimental
 	return mp;
 }
 
-struct rte_comp_op * __rte_experimental
+struct rte_comp_op *
 rte_comp_op_alloc(struct rte_mempool *mempool)
 {
 	struct rte_comp_op *op = NULL;
@@ -182,7 +182,7 @@ struct rte_comp_op * __rte_experimental
 	return op;
 }
 
-int __rte_experimental
+int
 rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -207,14 +207,14 @@ struct rte_comp_op * __rte_experimental
  * @param op
  *   Compress operation
  */
-void __rte_experimental
+void
 rte_comp_op_free(struct rte_comp_op *op)
 {
 	if (op != NULL && op->mempool != NULL)
 		rte_mempool_put(op->mempool, op);
 }
 
-void __rte_experimental
+void
 rte_comp_op_bulk_free(struct rte_comp_op **ops, uint16_t nb_ops)
 {
 	uint16_t i;
diff --git a/lib/librte_compressdev/rte_compressdev.c b/lib/librte_compressdev/rte_compressdev.c
index afba584..b3c5651 100644
--- a/lib/librte_compressdev/rte_compressdev.c
+++ b/lib/librte_compressdev/rte_compressdev.c
@@ -28,7 +28,7 @@
 		.max_devs		= RTE_COMPRESS_MAX_DEVS
 };
 
-const struct rte_compressdev_capabilities * __rte_experimental
+const struct rte_compressdev_capabilities *
 rte_compressdev_capability_get(uint8_t dev_id,
 			enum rte_comp_algorithm algo)
 {
@@ -51,7 +51,7 @@
 	return NULL;
 }
 
-const char * __rte_experimental
+const char *
 rte_compressdev_get_feature_name(uint64_t flag)
 {
 	switch (flag) {
@@ -80,7 +80,7 @@
 	return &compressdev_globals.devs[dev_id];
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name)
 {
 	struct rte_compressdev *dev;
@@ -116,7 +116,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-int __rte_experimental
+int
 rte_compressdev_get_dev_id(const char *name)
 {
 	unsigned int i;
@@ -134,13 +134,13 @@ struct rte_compressdev * __rte_experimental
 	return -1;
 }
 
-uint8_t __rte_experimental
+uint8_t
 rte_compressdev_count(void)
 {
 	return compressdev_globals.nb_devs;
 }
 
-uint8_t __rte_experimental
+uint8_t
 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 	uint8_t nb_devices)
 {
@@ -165,7 +165,7 @@ struct rte_compressdev * __rte_experimental
 	return count;
 }
 
-int __rte_experimental
+int
 rte_compressdev_socket_id(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -222,7 +222,7 @@ struct rte_compressdev * __rte_experimental
 	return RTE_COMPRESS_MAX_DEVS;
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_allocate(const char *name, int socket_id)
 {
 	struct rte_compressdev *compressdev;
@@ -268,7 +268,7 @@ struct rte_compressdev * __rte_experimental
 	return compressdev;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_release_device(struct rte_compressdev *compressdev)
 {
 	int ret;
@@ -288,7 +288,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_queue_pair_count(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -413,7 +413,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)
 {
 	struct rte_compressdev *dev;
@@ -447,7 +447,7 @@ struct rte_compressdev * __rte_experimental
 	return (*dev->dev_ops->dev_configure)(dev, config);
 }
 
-int __rte_experimental
+int
 rte_compressdev_start(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -479,7 +479,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_compressdev_stop(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -503,7 +503,7 @@ struct rte_compressdev * __rte_experimental
 	dev->data->dev_started = 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_close(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -538,7 +538,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		uint32_t max_inflight_ops, int socket_id)
 {
@@ -573,7 +573,7 @@ struct rte_compressdev * __rte_experimental
 			max_inflight_ops, socket_id);
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -585,7 +585,7 @@ struct rte_compressdev * __rte_experimental
 	return nb_ops;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
 {
@@ -595,7 +595,7 @@ struct rte_compressdev * __rte_experimental
 			dev->data->queue_pairs[qp_id], ops, nb_ops);
 }
 
-int __rte_experimental
+int
 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)
 {
 	struct rte_compressdev *dev;
@@ -618,7 +618,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_compressdev_stats_reset(uint8_t dev_id)
 {
 	struct rte_compressdev *dev;
@@ -635,7 +635,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-void __rte_experimental
+void
 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)
 {
 	struct rte_compressdev *dev;
@@ -655,7 +655,7 @@ struct rte_compressdev * __rte_experimental
 	dev_info->driver_name = dev->device->driver->name;
 }
 
-int __rte_experimental
+int
 rte_compressdev_private_xform_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **priv_xform)
@@ -680,7 +680,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
 {
 	struct rte_compressdev *dev;
@@ -703,7 +703,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_stream_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **stream)
@@ -729,7 +729,7 @@ struct rte_compressdev * __rte_experimental
 }
 
 
-int __rte_experimental
+int
 rte_compressdev_stream_free(uint8_t dev_id, void *stream)
 {
 	struct rte_compressdev *dev;
@@ -752,7 +752,7 @@ struct rte_compressdev * __rte_experimental
 	return 0;
 }
 
-const char * __rte_experimental
+const char *
 rte_compressdev_name_get(uint8_t dev_id)
 {
 	struct rte_compressdev *dev = rte_compressdev_get_dev(dev_id);
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.c b/lib/librte_compressdev/rte_compressdev_pmd.c
index cc51d69..46b2556 100644
--- a/lib/librte_compressdev/rte_compressdev_pmd.c
+++ b/lib/librte_compressdev/rte_compressdev_pmd.c
@@ -48,7 +48,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_parse_input_args(
 		struct rte_compressdev_pmd_init_params *params,
 		const char *args)
@@ -84,7 +84,7 @@
 	return ret;
 }
 
-struct rte_compressdev * __rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_create(const char *name,
 		struct rte_device *device,
 		size_t private_data_size,
@@ -133,7 +133,7 @@ struct rte_compressdev * __rte_experimental
 	return compressdev;
 }
 
-int __rte_experimental
+int
 rte_compressdev_pmd_destroy(struct rte_compressdev *compressdev)
 {
 	int retval;
diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c
index 00c2cf4..be9f026 100644
--- a/lib/librte_cryptodev/rte_cryptodev.c
+++ b/lib/librte_cryptodev/rte_cryptodev.c
@@ -250,7 +250,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 		const char *xform_string)
 {
@@ -338,7 +338,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return -1;
 }
 
-const struct rte_cryptodev_asymmetric_xform_capability * __rte_experimental
+const struct rte_cryptodev_asymmetric_xform_capability *
 rte_cryptodev_asym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_asym_capability_idx *idx)
 {
@@ -411,7 +411,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 
 	return 0;
 }
-int __rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_optype(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 	enum rte_crypto_asym_op_type op_type)
@@ -422,7 +422,7 @@ struct rte_cryptodev_sym_session_pool_private_data {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_modlen(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 	uint16_t modlen)
@@ -1235,7 +1235,7 @@ struct rte_cryptodev *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_init(uint8_t dev_id,
 		struct rte_cryptodev_asym_session *sess,
 		struct rte_crypto_asym_xform *xforms,
@@ -1270,7 +1270,7 @@ struct rte_cryptodev *
 	return 0;
 }
 
-struct rte_mempool * __rte_experimental
+struct rte_mempool *
 rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t elt_size, uint32_t cache_size, uint16_t user_data_size,
 	int socket_id)
@@ -1354,7 +1354,7 @@ struct rte_cryptodev_sym_session *
 	return sess;
 }
 
-struct rte_cryptodev_asym_session * __rte_experimental
+struct rte_cryptodev_asym_session *
 rte_cryptodev_asym_session_create(struct rte_mempool *mp)
 {
 	struct rte_cryptodev_asym_session *sess;
@@ -1398,7 +1398,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_clear(uint8_t dev_id,
 		struct rte_cryptodev_asym_session *sess)
 {
@@ -1438,7 +1438,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess)
 {
 	uint8_t i;
@@ -1478,7 +1478,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 			rte_cryptodev_sym_session_data_size(&s));
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_sym_get_existing_header_session_size(
 		struct rte_cryptodev_sym_session *sess)
 {
@@ -1489,7 +1489,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 				rte_cryptodev_sym_session_data_size(sess));
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_asym_get_header_session_size(void)
 {
 	/*
@@ -1519,7 +1519,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return priv_sess_size;
 }
 
-unsigned int __rte_experimental
+unsigned int
 rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
 {
 	struct rte_cryptodev *dev;
@@ -1542,7 +1542,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 
 }
 
-int __rte_experimental
+int
 rte_cryptodev_sym_session_set_user_data(
 					struct rte_cryptodev_sym_session *sess,
 					void *data,
@@ -1558,7 +1558,7 @@ struct rte_cryptodev_asym_session * __rte_experimental
 	return 0;
 }
 
-void * __rte_experimental
+void *
 rte_cryptodev_sym_session_get_user_data(
 					struct rte_cryptodev_sym_session *sess)
 {
diff --git a/lib/librte_eal/common/eal_common_class.c b/lib/librte_eal/common/eal_common_class.c
index d922266..0187076 100644
--- a/lib/librte_eal/common/eal_common_class.c
+++ b/lib/librte_eal/common/eal_common_class.c
@@ -12,7 +12,7 @@
 static struct rte_class_list rte_class_list =
 	TAILQ_HEAD_INITIALIZER(rte_class_list);
 
-__rte_experimental void
+void
 rte_class_register(struct rte_class *class)
 {
 	RTE_VERIFY(class);
@@ -22,14 +22,13 @@
 	RTE_LOG(DEBUG, EAL, "Registered [%s] device class.\n", class->name);
 }
 
-__rte_experimental void
+void
 rte_class_unregister(struct rte_class *class)
 {
 	TAILQ_REMOVE(&rte_class_list, class, next);
 	RTE_LOG(DEBUG, EAL, "Unregistered [%s] device class.\n", class->name);
 }
 
-__rte_experimental
 struct rte_class *
 rte_class_find(const struct rte_class *start, rte_class_cmp_t cmp,
 	       const void *data)
@@ -56,7 +55,6 @@ struct rte_class *
 	return strcmp(class->name, name);
 }
 
-__rte_experimental
 struct rte_class *
 rte_class_find_by_name(const char *name)
 {
diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
index 824b8f9..86f801d 100644
--- a/lib/librte_eal/common/eal_common_dev.c
+++ b/lib/librte_eal/common/eal_common_dev.c
@@ -422,7 +422,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_event_callback_register(const char *device_name,
 				rte_dev_event_cb_fn cb_fn,
 				void *cb_arg)
@@ -488,7 +488,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_event_callback_unregister(const char *device_name,
 				  rte_dev_event_cb_fn cb_fn,
 				  void *cb_arg)
@@ -533,7 +533,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_dev_event_callback_process(const char *device_name,
 			       enum rte_dev_event_type event)
 {
@@ -559,7 +559,6 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	rte_spinlock_unlock(&dev_event_lock);
 }
 
-__rte_experimental
 int
 rte_dev_iterator_init(struct rte_dev_iterator *it,
 		      const char *dev_str)
@@ -712,7 +711,6 @@ class_next_dev_cmp(const struct rte_class *cls,
 	it->device = dev;
 	return dev == NULL;
 }
-__rte_experimental
 struct rte_device *
 rte_dev_iterator_next(struct rte_dev_iterator *it)
 {
diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c
index eb04a1e..b7ddb66 100644
--- a/lib/librte_eal/common/eal_common_fbarray.c
+++ b/lib/librte_eal/common/eal_common_fbarray.c
@@ -709,7 +709,7 @@ struct used_mask {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 		unsigned int elt_sz)
 {
@@ -833,7 +833,7 @@ struct used_mask {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_fbarray_attach(struct rte_fbarray *arr)
 {
 	struct mem_area *ma = NULL, *tmp = NULL;
@@ -924,7 +924,7 @@ struct used_mask {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_fbarray_detach(struct rte_fbarray *arr)
 {
 	struct mem_area *tmp = NULL;
@@ -978,7 +978,7 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_destroy(struct rte_fbarray *arr)
 {
 	struct mem_area *tmp = NULL;
@@ -1060,7 +1060,7 @@ struct used_mask {
 	return ret;
 }
 
-void * __rte_experimental
+void *
 rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx)
 {
 	void *ret = NULL;
@@ -1079,19 +1079,19 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx)
 {
 	struct used_mask *msk;
@@ -1160,25 +1160,25 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, false, true);
@@ -1236,28 +1236,28 @@ struct used_mask {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
 	return fbarray_find_n(arr, start, n, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
 {
@@ -1400,56 +1400,56 @@ struct used_mask {
 	return biggest_idx;
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, true, true);
 }
 
 
-int __rte_experimental
+int
 rte_fbarray_find_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, false);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, true);
 }
 
-int __rte_experimental
+int
 rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt)
 {
 	void *end;
@@ -1475,7 +1475,7 @@ struct used_mask {
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f)
 {
 	struct used_mask *msk;
diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c
index c714a4b..4f6f227 100644
--- a/lib/librte_eal/common/eal_common_log.c
+++ b/lib/librte_eal/common/eal_common_log.c
@@ -268,7 +268,7 @@ int rte_log_cur_msg_logtype(void)
 }
 
 /* Register an extended log type and try to pick its level from EAL options */
-int __rte_experimental
+int
 rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
 {
 	struct rte_eal_opt_loglevel *opt_ll;
diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index de6fc1b..858d563 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -243,7 +243,7 @@
 	return msl;
 }
 
-__rte_experimental struct rte_memseg_list *
+struct rte_memseg_list *
 rte_mem_virt2memseg_list(const void *addr)
 {
 	return virt2memseg_list(addr);
@@ -280,7 +280,7 @@ struct virtiova {
 	return 0;
 }
 
-__rte_experimental void *
+void *
 rte_mem_iova2virt(rte_iova_t iova)
 {
 	struct virtiova vi;
@@ -299,7 +299,7 @@ struct virtiova {
 	return vi.virt;
 }
 
-__rte_experimental struct rte_memseg *
+struct rte_memseg *
 rte_mem_virt2memseg(const void *addr, const struct rte_memseg_list *msl)
 {
 	return virt2memseg(addr, msl != NULL ? msl :
@@ -368,7 +368,7 @@ struct virtiova {
  * Defining here because declared in rte_memory.h, but the actual implementation
  * is in eal_common_memalloc.c, like all other memalloc internals.
  */
-int __rte_experimental
+int
 rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 		void *arg)
 {
@@ -381,7 +381,7 @@ struct virtiova {
 	return eal_memalloc_mem_event_callback_register(name, clb, arg);
 }
 
-int __rte_experimental
+int
 rte_mem_event_callback_unregister(const char *name, void *arg)
 {
 	/* FreeBSD boots with legacy mem enabled by default */
@@ -393,7 +393,7 @@ struct virtiova {
 	return eal_memalloc_mem_event_callback_unregister(name, arg);
 }
 
-int __rte_experimental
+int
 rte_mem_alloc_validator_register(const char *name,
 		rte_mem_alloc_validator_t clb, int socket_id, size_t limit)
 {
@@ -407,7 +407,7 @@ struct virtiova {
 			limit);
 }
 
-int __rte_experimental
+int
 rte_mem_alloc_validator_unregister(const char *name, int socket_id)
 {
 	/* FreeBSD boots with legacy mem enabled by default */
@@ -489,13 +489,13 @@ struct virtiova {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mem_check_dma_mask(uint8_t maskbits)
 {
 	return check_dma_mask(maskbits, false);
 }
 
-int __rte_experimental
+int
 rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits)
 {
 	return check_dma_mask(maskbits, true);
@@ -508,7 +508,7 @@ struct virtiova {
  * initialization. PMDs should use rte_mem_check_dma_mask if addressing
  * limitations by the device.
  */
-void __rte_experimental
+void
 rte_mem_set_dma_mask(uint8_t maskbits)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -554,7 +554,7 @@ unsigned rte_memory_get_nrank(void)
 	return mlock((void *)aligned, page_size);
 }
 
-int __rte_experimental
+int
 rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -593,7 +593,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -607,7 +607,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -635,7 +635,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_walk(rte_memseg_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -649,7 +649,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -668,7 +668,7 @@ unsigned rte_memory_get_nrank(void)
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -682,7 +682,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -724,7 +724,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd(const struct rte_memseg *ms)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -737,7 +737,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 		size_t *offset)
 {
@@ -780,7 +780,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -793,7 +793,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 		unsigned int n_pages, size_t page_sz)
 {
@@ -842,7 +842,7 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_unregister(void *va_addr, size_t len)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -899,13 +899,13 @@ unsigned rte_memory_get_nrank(void)
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_extmem_attach(void *va_addr, size_t len)
 {
 	return sync_memory(va_addr, len, true);
 }
 
-int __rte_experimental
+int
 rte_extmem_detach(void *va_addr, size_t len)
 {
 	return sync_memory(va_addr, len, false);
diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c
index cfd571e..cbe8d10 100644
--- a/lib/librte_eal/common/eal_common_proc.c
+++ b/lib/librte_eal/common/eal_common_proc.c
@@ -197,7 +197,7 @@ struct pending_request {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_action_register(const char *name, rte_mp_t action)
 {
 	struct action_entry *entry;
@@ -231,7 +231,7 @@ struct pending_request {
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_mp_action_unregister(const char *name)
 {
 	struct action_entry *entry;
@@ -801,7 +801,7 @@ enum async_action {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_sendmsg(struct rte_mp_msg *msg)
 {
 	if (check_input(msg) != 0)
@@ -948,7 +948,7 @@ enum async_action {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 		const struct timespec *ts)
 {
@@ -1044,7 +1044,7 @@ enum async_action {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb)
 {
@@ -1194,7 +1194,7 @@ enum async_action {
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer)
 {
 	RTE_LOG(DEBUG, EAL, "reply: %s\n", msg->name);
diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c
index 68d67e6..145543d 100644
--- a/lib/librte_eal/common/eal_common_timer.c
+++ b/lib/librte_eal/common/eal_common_timer.c
@@ -33,7 +33,7 @@
 		rte_pause();
 }
 
-void __rte_experimental
+void
 rte_delay_us_sleep(unsigned int us)
 {
 	struct timespec wait[2];
diff --git a/lib/librte_eal/common/rte_malloc.c b/lib/librte_eal/common/rte_malloc.c
index 54792ea..b119eba 100644
--- a/lib/librte_eal/common/rte_malloc.c
+++ b/lib/librte_eal/common/rte_malloc.c
@@ -196,7 +196,7 @@ void rte_free(void *addr)
 /*
  * Function to dump contents of all heaps
  */
-void __rte_experimental
+void
 rte_malloc_dump_heaps(FILE *f)
 {
 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
diff --git a/lib/librte_eal/common/rte_option.c b/lib/librte_eal/common/rte_option.c
index fe7f2ab..6f8bd6e 100644
--- a/lib/librte_eal/common/rte_option.c
+++ b/lib/librte_eal/common/rte_option.c
@@ -38,7 +38,6 @@ struct rte_option_list rte_option_list =
 	return -1;
 }
 
-__rte_experimental
 int
 rte_option_register(struct rte_option *opt)
 {
diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c
index 3d9b9b7..f851190 100644
--- a/lib/librte_eal/common/rte_random.c
+++ b/lib/librte_eal/common/rte_random.c
@@ -137,7 +137,7 @@ struct rte_rand_state *__rte_rand_get_state(void)
 	return __rte_rand_lfsr258(state);
 }
 
-uint64_t __rte_experimental
+uint64_t
 rte_rand_max(uint64_t upper_bound)
 {
 	struct rte_rand_state *state;
diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c
index 5f75e5a..c3653eb 100644
--- a/lib/librte_eal/common/rte_service.c
+++ b/lib/librte_eal/common/rte_service.c
@@ -378,7 +378,7 @@ int32_t rte_service_init(void)
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_may_be_active(uint32_t id)
 {
 	uint32_t ids[RTE_MAX_LCORE] = {0};
@@ -754,7 +754,7 @@ int32_t rte_service_run_iter_on_app_lcore(uint32_t id,
 	}
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 			   uint64_t *attr_value)
 {
@@ -814,7 +814,7 @@ int32_t rte_service_run_iter_on_app_lcore(uint32_t id,
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_service_lcore_attr_reset_all(uint32_t lcore)
 {
 	struct core_state *cs;
diff --git a/lib/librte_eal/freebsd/eal/eal.c b/lib/librte_eal/freebsd/eal/eal.c
index 2c77a86..a3d4863 100644
--- a/lib/librte_eal/freebsd/eal/eal.c
+++ b/lib/librte_eal/freebsd/eal/eal.c
@@ -881,7 +881,7 @@ static void rte_eal_init_alert(const char *msg)
 	return fctret;
 }
 
-int __rte_experimental
+int
 rte_eal_cleanup(void)
 {
 	rte_service_finalize();
diff --git a/lib/librte_eal/freebsd/eal/eal_dev.c b/lib/librte_eal/freebsd/eal/eal_dev.c
index 255d611..8e06e70 100644
--- a/lib/librte_eal/freebsd/eal/eal_dev.c
+++ b/lib/librte_eal/freebsd/eal/eal_dev.c
@@ -6,28 +6,28 @@
 #include <rte_compat.h>
 #include <rte_dev.h>
 
-int __rte_experimental
+int
 rte_dev_event_monitor_start(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_stop(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_enable(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
 	return -1;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_disable(void)
 {
 	RTE_LOG(ERR, EAL, "Device event is not supported for FreeBSD\n");
diff --git a/lib/librte_eal/freebsd/eal/eal_interrupts.c b/lib/librte_eal/freebsd/eal/eal_interrupts.c
index 4a9aedd..10375bd 100644
--- a/lib/librte_eal/freebsd/eal/eal_interrupts.c
+++ b/lib/librte_eal/freebsd/eal/eal_interrupts.c
@@ -193,7 +193,7 @@ struct rte_intr_source {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn)
diff --git a/lib/librte_eal/linux/eal/eal_dev.c b/lib/librte_eal/linux/eal/eal_dev.c
index c418093..83c9cd6 100644
--- a/lib/librte_eal/linux/eal/eal_dev.c
+++ b/lib/librte_eal/linux/eal/eal_dev.c
@@ -285,7 +285,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	rte_spinlock_unlock(&failure_handle_lock);
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_start(void)
 {
 	int ret;
@@ -312,7 +312,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_dev_event_monitor_stop(void)
 {
 	int ret;
@@ -365,7 +365,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return rte_errno;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_enable(void)
 {
 	int ret = 0;
@@ -380,7 +380,7 @@ static int cmp_dev_name(const struct rte_device *dev,
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_dev_hotplug_handle_disable(void)
 {
 	int ret = 0;
diff --git a/lib/librte_eal/linux/eal/eal_interrupts.c b/lib/librte_eal/linux/eal/eal_interrupts.c
index be0dd44..79ad5e8 100644
--- a/lib/librte_eal/linux/eal/eal_interrupts.c
+++ b/lib/librte_eal/linux/eal/eal_interrupts.c
@@ -522,7 +522,7 @@ struct rte_intr_source {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn)
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 8ac3016..31f02ec 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c
@@ -601,7 +601,7 @@ struct rte_eth_dev *
 	return port_id;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_new(uint64_t *owner_id)
 {
 	rte_eth_dev_shared_data_prepare();
@@ -654,7 +654,7 @@ struct rte_eth_dev *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_set(const uint16_t port_id,
 		      const struct rte_eth_dev_owner *owner)
 {
@@ -670,7 +670,7 @@ struct rte_eth_dev *
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_unset(const uint16_t port_id, const uint64_t owner_id)
 {
 	const struct rte_eth_dev_owner new_owner = (struct rte_eth_dev_owner)
@@ -687,7 +687,7 @@ struct rte_eth_dev *
 	return ret;
 }
 
-void __rte_experimental
+void
 rte_eth_dev_owner_delete(const uint64_t owner_id)
 {
 	uint16_t port_id;
@@ -713,7 +713,7 @@ struct rte_eth_dev *
 	rte_spinlock_unlock(&rte_eth_dev_shared_data->ownership_lock);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
 {
 	int ret = 0;
@@ -1535,7 +1535,7 @@ struct rte_eth_dev *
 	return eth_err(port_id, ret);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_is_removed(uint16_t port_id)
 {
 	struct rte_eth_dev *dev;
@@ -3592,7 +3592,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id)
 {
 	struct rte_intr_handle *intr_handle;
@@ -3654,7 +3654,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 			RTE_MEMZONE_IOVA_CONTIG, align);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_create(struct rte_device *device, const char *name,
 	size_t priv_data_size,
 	ethdev_bus_specific_init ethdev_bus_specific_init,
@@ -3717,7 +3717,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return retval;
 }
 
-int  __rte_experimental
+int
 rte_eth_dev_destroy(struct rte_eth_dev *ethdev,
 	ethdev_uninit_t ethdev_uninit)
 {
@@ -4238,7 +4238,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return eth_err(port_id, (*dev->dev_ops->set_eeprom)(dev, info));
 }
 
-int __rte_experimental
+int
 rte_eth_dev_get_module_info(uint16_t port_id,
 			    struct rte_eth_dev_module_info *modinfo)
 {
@@ -4251,7 +4251,7 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 	return (*dev->dev_ops->get_module_info)(dev, modinfo);
 }
 
-int __rte_experimental
+int
 rte_eth_dev_get_module_eeprom(uint16_t port_id,
 			      struct rte_dev_eeprom_info *info)
 {
@@ -4407,7 +4407,7 @@ enum rte_eth_switch_domain_state {
 	enum rte_eth_switch_domain_state state;
 } rte_eth_switch_domains[RTE_MAX_ETHPORTS];
 
-int __rte_experimental
+int
 rte_eth_switch_domain_alloc(uint16_t *domain_id)
 {
 	unsigned int i;
@@ -4428,7 +4428,7 @@ enum rte_eth_switch_domain_state {
 	return -ENOSPC;
 }
 
-int __rte_experimental
+int
 rte_eth_switch_domain_free(uint16_t domain_id)
 {
 	if (domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID ||
@@ -4508,7 +4508,7 @@ enum rte_eth_switch_domain_state {
 	}
 }
 
-int __rte_experimental
+int
 rte_eth_devargs_parse(const char *dargs, struct rte_eth_devargs *eth_da)
 {
 	struct rte_kvargs args;
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 3277be1..5c49522 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -899,7 +899,7 @@ enum rte_flow_conv_item_spec_type {
  * Expand RSS flows into several possible flows according to the RSS hash
  * fields requested and the driver capabilities.
  */
-int __rte_experimental
+int
 rte_flow_expand_rss(struct rte_flow_expand_rss *buf, size_t size,
 		    const struct rte_flow_item *pattern, uint64_t types,
 		    const struct rte_flow_expand_node graph[],
diff --git a/lib/librte_ethdev/rte_mtr.c b/lib/librte_ethdev/rte_mtr.c
index 12b8154..3073ac0 100644
--- a/lib/librte_ethdev/rte_mtr.c
+++ b/lib/librte_ethdev/rte_mtr.c
@@ -58,7 +58,7 @@
 })
 
 /* MTR capabilities get */
-int __rte_experimental
+int
 rte_mtr_capabilities_get(uint16_t port_id,
 	struct rte_mtr_capabilities *cap,
 	struct rte_mtr_error *error)
@@ -69,7 +69,7 @@
 }
 
 /* MTR meter profile add */
-int __rte_experimental
+int
 rte_mtr_meter_profile_add(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_meter_profile *profile,
@@ -81,7 +81,7 @@
 }
 
 /** MTR meter profile delete */
-int __rte_experimental
+int
 rte_mtr_meter_profile_delete(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_error *error)
@@ -92,7 +92,7 @@
 }
 
 /** MTR object create */
-int __rte_experimental
+int
 rte_mtr_create(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_params *params,
@@ -105,7 +105,7 @@
 }
 
 /** MTR object destroy */
-int __rte_experimental
+int
 rte_mtr_destroy(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -116,7 +116,7 @@
 }
 
 /** MTR object meter enable */
-int __rte_experimental
+int
 rte_mtr_meter_enable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -127,7 +127,7 @@
 }
 
 /** MTR object meter disable */
-int __rte_experimental
+int
 rte_mtr_meter_disable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error)
@@ -138,7 +138,7 @@
 }
 
 /** MTR object meter profile update */
-int __rte_experimental
+int
 rte_mtr_meter_profile_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t meter_profile_id,
@@ -150,7 +150,7 @@
 }
 
 /** MTR object meter DSCP table update */
-int __rte_experimental
+int
 rte_mtr_meter_dscp_table_update(uint16_t port_id,
 	uint32_t mtr_id,
 	enum rte_color *dscp_table,
@@ -162,7 +162,7 @@
 }
 
 /** MTR object policer action update */
-int __rte_experimental
+int
 rte_mtr_policer_actions_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t action_mask,
@@ -175,7 +175,7 @@
 }
 
 /** MTR object enabled stats update */
-int __rte_experimental
+int
 rte_mtr_stats_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint64_t stats_mask,
@@ -187,7 +187,7 @@
 }
 
 /** MTR object stats read */
-int __rte_experimental
+int
 rte_mtr_stats_read(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_stats *stats,
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.c b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
index a97d198..dd251cc 100644
--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.c
@@ -2297,7 +2297,7 @@ static int rxa_sw_add(struct rte_event_eth_rx_adapter *rx_adapter,
 	return rxa_ctrl(id, 0);
 }
 
-int __rte_experimental
+int
 rte_event_eth_rx_adapter_stats_get(uint8_t id,
 			       struct rte_event_eth_rx_adapter_stats *stats)
 {
@@ -2384,7 +2384,7 @@ static int rxa_sw_add(struct rte_event_eth_rx_adapter *rx_adapter,
 	return rx_adapter->service_inited ? 0 : -ESRCH;
 }
 
-int __rte_experimental
+int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
 					uint16_t eth_dev_id,
 					rte_event_eth_rx_adapter_cb_fn cb_fn,
diff --git a/lib/librte_flow_classify/rte_flow_classify.c b/lib/librte_flow_classify/rte_flow_classify.c
index 24f7f7a..5ff5858 100644
--- a/lib/librte_flow_classify/rte_flow_classify.c
+++ b/lib/librte_flow_classify/rte_flow_classify.c
@@ -89,7 +89,7 @@ struct rte_flow_classify_rule {
 	void *entry_ptr; /* handle to the table entry for rule meta data */
 };
 
-int __rte_experimental
+int
 rte_flow_classify_validate(
 		   struct rte_flow_classifier *cls,
 		   const struct rte_flow_attr *attr,
@@ -258,7 +258,7 @@ struct rte_flow_classify_rule {
 	return 0;
 }
 
-struct rte_flow_classifier * __rte_experimental
+struct rte_flow_classifier *
 rte_flow_classifier_create(struct rte_flow_classifier_params *params)
 {
 	struct rte_flow_classifier *cls;
@@ -300,7 +300,7 @@ struct rte_flow_classifier * __rte_experimental
 		table->ops.f_free(table->h_table);
 }
 
-int __rte_experimental
+int
 rte_flow_classifier_free(struct rte_flow_classifier *cls)
 {
 	uint32_t i;
@@ -372,7 +372,7 @@ struct rte_flow_classifier * __rte_experimental
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_flow_classify_table_create(struct rte_flow_classifier *cls,
 	struct rte_flow_classify_table_params *params)
 {
@@ -482,7 +482,7 @@ struct rte_flow_classifier * __rte_experimental
 	return rule;
 }
 
-struct rte_flow_classify_rule * __rte_experimental
+struct rte_flow_classify_rule *
 rte_flow_classify_table_entry_add(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -564,7 +564,7 @@ struct rte_flow_classify_rule * __rte_experimental
 	return NULL;
 }
 
-int __rte_experimental
+int
 rte_flow_classify_table_entry_delete(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_rule *rule)
 {
@@ -642,7 +642,7 @@ struct rte_flow_classify_rule * __rte_experimental
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_flow_classifier_query(struct rte_flow_classifier *cls,
 		struct rte_mbuf **pkts,
 		const uint16_t nb_pkts,
diff --git a/lib/librte_hash/rte_cuckoo_hash.c b/lib/librte_hash/rte_cuckoo_hash.c
index 953928f..51198b4 100644
--- a/lib/librte_hash/rte_cuckoo_hash.c
+++ b/lib/librte_hash/rte_cuckoo_hash.c
@@ -1583,7 +1583,7 @@ struct rte_hash *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_hash_free_key_with_position(const struct rte_hash *h,
 				const int32_t position)
 {
diff --git a/lib/librte_ip_frag/rte_ip_frag_common.c b/lib/librte_ip_frag/rte_ip_frag_common.c
index a23f6f2..6b29e9d 100644
--- a/lib/librte_ip_frag/rte_ip_frag_common.c
+++ b/lib/librte_ip_frag/rte_ip_frag_common.c
@@ -123,7 +123,7 @@ struct rte_ip_frag_tbl *
 }
 
 /* Delete expired fragments */
-void __rte_experimental
+void
 rte_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, uint64_t tms)
 {
diff --git a/lib/librte_ipsec/sa.c b/lib/librte_ipsec/sa.c
index 1cb71ca..81e3437 100644
--- a/lib/librte_ipsec/sa.c
+++ b/lib/librte_ipsec/sa.c
@@ -77,7 +77,7 @@ struct crypto_xform {
 	return 0;
 }
 
-uint64_t __rte_experimental
+uint64_t
 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa)
 {
 	return sa->type;
@@ -149,7 +149,7 @@ struct crypto_xform {
 	return sz;
 }
 
-void __rte_experimental
+void
 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa)
 {
 	memset(sa, 0, sa->size);
@@ -405,7 +405,7 @@ struct crypto_xform {
 			((uintptr_t)sa->sqn.inb.rsn[0] + rsn_size(nb_bucket));
 }
 
-int __rte_experimental
+int
 rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm)
 {
 	uint64_t type;
@@ -425,7 +425,7 @@ struct crypto_xform {
 	return ipsec_sa_size(type, &wsz, &nb);
 }
 
-int __rte_experimental
+int
 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 	uint32_t size)
 {
diff --git a/lib/librte_ipsec/ses.c b/lib/librte_ipsec/ses.c
index 1158097..82c765a 100644
--- a/lib/librte_ipsec/ses.c
+++ b/lib/librte_ipsec/ses.c
@@ -27,7 +27,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_ipsec_session_prepare(struct rte_ipsec_session *ss)
 {
 	int32_t rc;
diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
index e29d0cc..00104a3 100644
--- a/lib/librte_kni/rte_kni.c
+++ b/lib/librte_kni/rte_kni.c
@@ -709,7 +709,7 @@ struct rte_kni *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_kni_update_link(struct rte_kni *kni, unsigned int linkup)
 {
 	char path[64];
diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
index f7030c6..d393329 100644
--- a/lib/librte_kvargs/rte_kvargs.c
+++ b/lib/librte_kvargs/rte_kvargs.c
@@ -186,7 +186,6 @@ struct rte_kvargs *
 	return kvlist;
 }
 
-__rte_experimental
 struct rte_kvargs *
 rte_kvargs_parse_delim(const char *args, const char * const valid_keys[],
 		       const char *valid_ends)
@@ -211,7 +210,6 @@ struct rte_kvargs *
 	return kvlist;
 }
 
-__rte_experimental
 int
 rte_kvargs_strcmp(const char *key __rte_unused,
 		  const char *value, void *opaque)
diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c
index 21f6f74..37718d4 100644
--- a/lib/librte_mbuf/rte_mbuf.c
+++ b/lib/librte_mbuf/rte_mbuf.c
@@ -177,7 +177,6 @@ struct rte_mempool *
 		rte_panic("%s\n", reason);
 }
 
-__rte_experimental
 int rte_mbuf_check(const struct rte_mbuf *m, int is_header,
 		   const char **reason)
 {
diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index 4567944..da01429 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -119,7 +119,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params)
@@ -144,7 +144,7 @@
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_meter_trtcm_rfc4115_config(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p)
diff --git a/lib/librte_net/rte_arp.c b/lib/librte_net/rte_arp.c
index cfd6e03..784b7f4 100644
--- a/lib/librte_net/rte_arp.c
+++ b/lib/librte_net/rte_arp.c
@@ -7,7 +7,7 @@
 #include <rte_arp.h>
 
 #define RARP_PKT_SIZE	64
-struct rte_mbuf * __rte_experimental
+struct rte_mbuf *
 rte_net_make_rarp_packet(struct rte_mempool *mpool,
 		const struct rte_ether_addr *mac)
 {
diff --git a/lib/librte_net/rte_net.c b/lib/librte_net/rte_net.c
index 6515909..dfccbbf 100644
--- a/lib/librte_net/rte_net.c
+++ b/lib/librte_net/rte_net.c
@@ -179,7 +179,7 @@
 }
 
 /* parse ipv6 extended headers, update offset and return next proto */
-int __rte_experimental
+int
 rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	int *frag)
 {
diff --git a/lib/librte_power/rte_power_empty_poll.c b/lib/librte_power/rte_power_empty_poll.c
index 15d4f05..0a8024d 100644
--- a/lib/librte_power/rte_power_empty_poll.c
+++ b/lib/librte_power/rte_power_empty_poll.c
@@ -361,7 +361,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_empty_poll_detection(struct rte_timer *tim, void *arg)
 {
 
@@ -402,7 +402,7 @@ static inline void  __attribute__((always_inline))
 
 }
 
-int __rte_experimental
+int
 rte_power_empty_poll_stat_init(struct ep_params **eptr, uint8_t *freq_tlb,
 		struct ep_policy *policy)
 {
@@ -461,7 +461,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-void __rte_experimental
+void
 rte_power_empty_poll_stat_free(void)
 {
 
@@ -471,7 +471,7 @@ static inline void  __attribute__((always_inline))
 		rte_free(ep_params);
 }
 
-int __rte_experimental
+int
 rte_power_empty_poll_stat_update(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
@@ -489,7 +489,7 @@ static inline void  __attribute__((always_inline))
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_power_poll_stat_update(unsigned int lcore_id, uint8_t nb_pkt)
 {
 
@@ -509,7 +509,7 @@ static inline void  __attribute__((always_inline))
 }
 
 
-uint64_t __rte_experimental
+uint64_t
 rte_power_empty_poll_stat_fetch(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
@@ -525,7 +525,7 @@ static inline void  __attribute__((always_inline))
 	return poll_stats->empty_dequeues;
 }
 
-uint64_t __rte_experimental
+uint64_t
 rte_power_poll_stat_fetch(unsigned int lcore_id)
 {
 	struct priority_worker *poll_stats;
diff --git a/lib/librte_rcu/rte_rcu_qsbr.c b/lib/librte_rcu/rte_rcu_qsbr.c
index de25464..ce7f93d 100644
--- a/lib/librte_rcu/rte_rcu_qsbr.c
+++ b/lib/librte_rcu/rte_rcu_qsbr.c
@@ -23,7 +23,7 @@
 #include "rte_rcu_qsbr.h"
 
 /* Get the memory size of QSBR variable */
-size_t __rte_experimental
+size_t
 rte_rcu_qsbr_get_memsize(uint32_t max_threads)
 {
 	size_t sz;
@@ -49,7 +49,7 @@
 }
 
 /* Initialize a quiescent state variable */
-int __rte_experimental
+int
 rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads)
 {
 	size_t sz;
@@ -80,7 +80,7 @@
 /* Register a reader thread to report its quiescent state
  * on a QS variable.
  */
-int __rte_experimental
+int
 rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	unsigned int i, id, success;
@@ -132,7 +132,7 @@
 /* Remove a reader thread, from the list of threads reporting their
  * quiescent state on a QS variable.
  */
-int __rte_experimental
+int
 rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	unsigned int i, id, success;
@@ -186,7 +186,7 @@
 }
 
 /* Wait till the reader threads have entered quiescent state. */
-void __rte_experimental
+void
 rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -206,7 +206,7 @@
 }
 
 /* Dump the details of a single quiescent state variable to a file. */
-int __rte_experimental
+int
 rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v)
 {
 	uint64_t bmap;
diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
index a60ddf9..bc06bc3 100644
--- a/lib/librte_sched/rte_sched.c
+++ b/lib/librte_sched/rte_sched.c
@@ -953,7 +953,7 @@ struct rte_sched_port *
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_sched_port_pipe_profile_add(struct rte_sched_port *port,
 	struct rte_sched_pipe_params *params,
 	uint32_t *pipe_profile_id)
diff --git a/lib/librte_security/rte_security.c b/lib/librte_security/rte_security.c
index a222b33..bc81ce1 100644
--- a/lib/librte_security/rte_security.c
+++ b/lib/librte_security/rte_security.c
@@ -33,7 +33,7 @@ struct rte_security_session *
 	return sess;
 }
 
-int __rte_experimental
+int
 rte_security_session_update(struct rte_security_ctx *instance,
 			    struct rte_security_session *sess,
 			    struct rte_security_session_conf *conf)
@@ -49,7 +49,7 @@ struct rte_security_session *
 	return instance->ops->session_get_size(instance->device);
 }
 
-int __rte_experimental
+int
 rte_security_session_stats_get(struct rte_security_ctx *instance,
 			       struct rte_security_session *sess,
 			       struct rte_security_stats *stats)
@@ -86,7 +86,7 @@ struct rte_security_session *
 					       sess, m, params);
 }
 
-void * __rte_experimental
+void *
 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)
 {
 	void *userdata = NULL;
diff --git a/lib/librte_telemetry/rte_telemetry.c b/lib/librte_telemetry/rte_telemetry.c
index 949c636..9819b22 100644
--- a/lib/librte_telemetry/rte_telemetry.c
+++ b/lib/librte_telemetry/rte_telemetry.c
@@ -970,7 +970,7 @@ struct json_data {
 	return -1;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_init()
 {
 	int ret;
@@ -1038,7 +1038,7 @@ struct json_data {
 	return 0;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_cleanup(void)
 {
 	int ret;
@@ -1284,7 +1284,7 @@ struct json_data {
 	return sockfd;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_selftest(void)
 {
 	const char *invalid_client_path = SELFTEST_INVALID_CLIENT;
diff --git a/lib/librte_telemetry/rte_telemetry_parser.c b/lib/librte_telemetry/rte_telemetry_parser.c
index 956d783..e3cc19f 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.c
+++ b/lib/librte_telemetry/rte_telemetry_parser.c
@@ -606,7 +606,7 @@ struct rte_telemetry_command {
 	return -1;
 }
 
-int32_t __rte_experimental
+int32_t
 rte_telemetry_parse(struct telemetry_impl *telemetry, char *socket_rx_data)
 {
 	int ret, action_int;
diff --git a/lib/librte_timer/rte_timer.c b/lib/librte_timer/rte_timer.c
index dd79539..eaeafd7 100644
--- a/lib/librte_timer/rte_timer.c
+++ b/lib/librte_timer/rte_timer.c
@@ -92,7 +92,7 @@ struct rte_timer_data {
 	timer_data = &rte_timer_data_arr[id];				\
 } while (0)
 
-int __rte_experimental
+int
 rte_timer_data_alloc(uint32_t *id_ptr)
 {
 	int i;
@@ -116,7 +116,7 @@ struct rte_timer_data {
 	return -ENOSPC;
 }
 
-int __rte_experimental
+int
 rte_timer_data_dealloc(uint32_t id)
 {
 	struct rte_timer_data *timer_data;
@@ -204,7 +204,7 @@ struct rte_timer_data {
 		  rte_timer_subsystem_init_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_subsystem_init, _v1905, 19.05);
 
-void __rte_experimental
+void
 rte_timer_subsystem_finalize(void)
 {
 	if (!rte_timer_subsystem_initialized)
@@ -573,7 +573,7 @@ struct rte_timer_data {
 		  rte_timer_reset_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_reset, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 		    uint64_t ticks, enum rte_timer_type type,
 		    unsigned int tim_lcore, rte_timer_cb_t fct, void *arg)
@@ -657,7 +657,7 @@ struct rte_timer_data {
 		  rte_timer_stop_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_stop, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
 {
 	struct rte_timer_data *timer_data;
@@ -822,7 +822,7 @@ struct rte_timer_data {
 MAP_STATIC_SYMBOL(int rte_timer_manage(void), rte_timer_manage_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_manage, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_manage(uint32_t timer_data_id,
 		     unsigned int *poll_lcores,
 		     int nb_poll_lcores,
@@ -995,7 +995,7 @@ struct rte_timer_data {
 }
 
 /* Walk pending lists, stopping timers and calling user-specified function */
-int __rte_experimental
+int
 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 		   int nb_walk_lcores,
 		   rte_timer_stop_all_cb_t f, void *f_arg)
@@ -1074,7 +1074,7 @@ struct rte_timer_data {
 		  rte_timer_dump_stats_v1905);
 BIND_DEFAULT_SYMBOL(rte_timer_dump_stats, _v1905, 19.05);
 
-int __rte_experimental
+int
 rte_timer_alt_dump_stats(uint32_t timer_data_id __rte_unused, FILE *f)
 {
 	struct rte_timer_data *timer_data;
diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c
index 24a6698..8e45ce9 100644
--- a/lib/librte_vhost/vdpa.c
+++ b/lib/librte_vhost/vdpa.c
@@ -126,7 +126,7 @@ struct rte_vdpa_device *
 	return vdpa_device_num;
 }
 
-int __rte_experimental
+int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
 {
 	struct virtio_net *dev = get_device(vid);
diff --git a/lib/librte_vhost/vhost_crypto.c b/lib/librte_vhost/vhost_crypto.c
index 8652a77..684fddc 100644
--- a/lib/librte_vhost/vhost_crypto.c
+++ b/lib/librte_vhost/vhost_crypto.c
@@ -1347,7 +1347,7 @@ struct vhost_crypto_data_req {
 	return processed;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 		struct rte_mempool *sess_pool,
 		struct rte_mempool *sess_priv_pool,
@@ -1440,7 +1440,7 @@ struct vhost_crypto_data_req {
 	return ret;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_free(int vid)
 {
 	struct virtio_net *dev = get_device(vid);
@@ -1469,7 +1469,7 @@ struct vhost_crypto_data_req {
 	return 0;
 }
 
-int __rte_experimental
+int
 rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option)
 {
 	struct virtio_net *dev = get_device(vid);
@@ -1524,7 +1524,7 @@ struct vhost_crypto_data_req {
 	return 0;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 		struct rte_crypto_op **ops, uint16_t nb_ops)
 {
@@ -1634,7 +1634,7 @@ struct vhost_crypto_data_req {
 	return i;
 }
 
-uint16_t __rte_experimental
+uint16_t
 rte_vhost_crypto_finalize_requests(struct rte_crypto_op **ops,
 		uint16_t nb_ops, int *callfds, uint16_t *nb_callfds)
 {
-- 
1.8.3.1


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

* [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (8 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 09/10] remove experimental tags from all symbol definitions David Marchand
@ 2019-06-29 11:58   ` David Marchand
  2019-06-29 16:13     ` Thomas Monjalon
  2019-06-29 17:06   ` [dpdk-dev] [PATCH v2 00/10] experimental tags fixes Thomas Monjalon
  10 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-29 11:58 UTC (permalink / raw)
  To: dev, thomas; +Cc: nhorman, adrien.mazarguil, stephen

Putting a '__attribute__((deprecated))' in the middle of a function
prototype does not result in the expected result with gcc (while clang
is fine with this syntax).

$ cat deprecated.c
void * __attribute__((deprecated)) incorrect() { return 0; }
__attribute__((deprecated)) void *correct(void) { return 0; }
int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
$ gcc -o deprecated.o -c deprecated.c
deprecated.c: In function ‘main’:
deprecated.c:3:1: warning: ‘correct’ is deprecated (declared at
deprecated.c:2) [-Wdeprecated-declarations]
 int main(int argc, char *argv[]) { incorrect(); correct(); return 0; }
 ^

Move the tag on a separate line and make it the first thing of function
prototypes.
This is not perfect but we will trust reviewers to catch the other not
so easy to detect patterns.

sed -i \
     -e '/^\([^#].*\)\?__rte_experimental */{' \
     -e 's//\1/; s/ *$//; i\' \
     -e __rte_experimental \
     -e '/^$/d}' \
     $(git grep -l __rte_experimental -- '*.h')

Special mention for rte_mbuf_data_addr_default():

There is either a bug or a (not yet understood) issue with gcc.
gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
calls rte_mbuf_buf_addr() which itself is experimental.
This results in a build warning when not accepting experimental apis
from sources just including rte_mbuf.h.

For this specific case, we hide the call to rte_mbuf_buf_addr() under
the ALLOW_EXPERIMENTAL_API flag.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changelog since v1:
- fixed new rte_random symbol
- squashed Adrien proposal into my first patch [1]

1: http://mails.dpdk.org/archives/dev/2019-June/136295.html

---
 devtools/checkpatches.sh                           |  5 ++
 drivers/net/ixgbe/rte_pmd_ixgbe.h                  | 15 +++--
 drivers/net/softnic/rte_eth_softnic.h              |  3 +-
 lib/librte_bbdev/rte_bbdev.h                       | 72 +++++++++++++-------
 lib/librte_bbdev/rte_bbdev_op.h                    | 18 +++--
 lib/librte_bbdev/rte_bbdev_pmd.h                   | 12 ++--
 lib/librte_bpf/rte_bpf.h                           | 18 +++--
 lib/librte_bpf/rte_bpf_ethdev.h                    | 12 ++--
 lib/librte_compressdev/rte_comp.h                  | 18 +++--
 lib/librte_compressdev/rte_compressdev.h           | 66 ++++++++++++------
 lib/librte_compressdev/rte_compressdev_pmd.h       | 18 +++--
 lib/librte_cryptodev/rte_cryptodev.h               | 42 ++++++++----
 .../common/include/arch/x86/rte_atomic_64.h        |  3 +-
 lib/librte_eal/common/include/generic/rte_atomic.h |  3 +-
 lib/librte_eal/common/include/generic/rte_cycles.h |  3 +-
 lib/librte_eal/common/include/generic/rte_rwlock.h |  6 +-
 .../common/include/generic/rte_ticketlock.h        | 27 +++++---
 lib/librte_eal/common/include/rte_dev.h            | 27 +++++---
 lib/librte_eal/common/include/rte_eal.h            | 18 +++--
 lib/librte_eal/common/include/rte_fbarray.h        | 78 ++++++++++++++--------
 lib/librte_eal/common/include/rte_interrupts.h     |  3 +-
 lib/librte_eal/common/include/rte_lcore.h          |  6 +-
 lib/librte_eal/common/include/rte_malloc.h         | 30 ++++++---
 lib/librte_eal/common/include/rte_memory.h         | 72 +++++++++++++-------
 lib/librte_eal/common/include/rte_random.h         |  3 +-
 lib/librte_eal/common/include/rte_service.h        |  9 ++-
 lib/librte_ethdev/rte_ethdev.h                     | 36 ++++++----
 lib/librte_ethdev/rte_ethdev_driver.h              | 15 +++--
 lib/librte_ethdev/rte_flow_driver.h                |  3 +-
 lib/librte_ethdev/rte_mtr.h                        | 36 ++++++----
 lib/librte_eventdev/rte_event_eth_rx_adapter.h     |  6 +-
 lib/librte_flow_classify/rte_flow_classify.h       | 21 ++++--
 lib/librte_hash/rte_hash.h                         |  3 +-
 lib/librte_ip_frag/rte_ip_frag.h                   |  3 +-
 lib/librte_ipsec/rte_ipsec.h                       |  9 ++-
 lib/librte_ipsec/rte_ipsec_group.h                 |  6 +-
 lib/librte_ipsec/rte_ipsec_sa.h                    | 12 ++--
 lib/librte_kni/rte_kni.h                           |  3 +-
 lib/librte_mbuf/rte_mbuf.h                         | 18 +++--
 lib/librte_meter/rte_meter.h                       | 18 +++--
 lib/librte_net/rte_arp.h                           |  3 +-
 lib/librte_net/rte_net.h                           |  3 +-
 lib/librte_pipeline/rte_port_in_action.h           | 24 ++++---
 lib/librte_pipeline/rte_table_action.h             | 48 ++++++++-----
 lib/librte_power/rte_power_empty_poll.h            | 21 ++++--
 lib/librte_rcu/rte_rcu_qsbr.h                      | 39 +++++++----
 lib/librte_sched/rte_sched.h                       |  3 +-
 lib/librte_security/rte_security.h                 |  9 ++-
 lib/librte_stack/rte_stack.h                       | 21 ++++--
 lib/librte_stack/rte_stack_lf.h                    |  6 +-
 lib/librte_stack/rte_stack_std.h                   |  9 ++-
 lib/librte_table/rte_table_hash_func.h             | 27 +++++---
 lib/librte_telemetry/rte_telemetry.h               |  9 ++-
 lib/librte_telemetry/rte_telemetry_parser.h        |  3 +-
 lib/librte_timer/rte_timer.h                       | 24 ++++---
 lib/librte_vhost/rte_vdpa.h                        | 21 ++++--
 lib/librte_vhost/rte_vhost.h                       | 33 ++++++---
 lib/librte_vhost/rte_vhost_crypto.h                | 15 +++--
 58 files changed, 733 insertions(+), 361 deletions(-)

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index d150353..dbdf08e 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -96,6 +96,11 @@ check_experimental_tags() { # <patch>
 				"headers ("current_file")";
 			ret = 1;
 		}
+		if ($1 != "+__rte_experimental" || $2 != "") {
+			print "__rte_experimental must appear alone on the line" \
+				" immediately preceding the return type of a function."
+			ret = 1;
+		}
 	}
 	END {
 		exit ret;
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.h b/drivers/net/ixgbe/rte_pmd_ixgbe.h
index 84c6884..f62fd76 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.h
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.h
@@ -584,7 +584,8 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_SWFW_SYNC) If sw/fw semaphore acquisition failed
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_ixgbe_mdio_lock(uint16_t port);
 
 /**
@@ -597,7 +598,8 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENOTSUP) if hardware doesn't support.
  *   - (-ENODEV) if *port* invalid.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlock(uint16_t port);
 
 /**
@@ -618,7 +620,8 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_PHY) If PHY read command failed
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 				 uint32_t dev_type, uint16_t *phy_data);
 
@@ -641,7 +644,8 @@ int rte_pmd_ixgbe_bypass_event_store(uint16_t port,
  *   - (-ENODEV) if *port* invalid.
  *   - (IXGBE_ERR_PHY) If PHY read command failed
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 				  uint32_t dev_type, uint16_t phy_data);
 
@@ -719,6 +723,7 @@ enum {
  *   - (-ENODEV) if *port* invalid.
  *   - (-ENOTSUP) if hardware doesn't support this feature.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable);
 #endif /* _PMD_IXGBE_H_ */
diff --git a/drivers/net/softnic/rte_eth_softnic.h b/drivers/net/softnic/rte_eth_softnic.h
index e8ba2bc..3f01161 100644
--- a/drivers/net/softnic/rte_eth_softnic.h
+++ b/drivers/net/softnic/rte_eth_softnic.h
@@ -75,7 +75,8 @@
  * @return
  *    Zero on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_pmd_softnic_manage(uint16_t port_id);
 
 #ifdef __cplusplus
diff --git a/lib/librte_bbdev/rte_bbdev.h b/lib/librte_bbdev/rte_bbdev.h
index d131692..c5175cc 100644
--- a/lib/librte_bbdev/rte_bbdev.h
+++ b/lib/librte_bbdev/rte_bbdev.h
@@ -55,7 +55,8 @@ enum rte_bbdev_state {
  * @return
  *   The total number of usable devices.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_bbdev_count(void);
 
 /**
@@ -67,7 +68,8 @@ enum rte_bbdev_state {
  * @return
  *   true if device ID is valid and device is attached, false otherwise.
  */
-bool __rte_experimental
+__rte_experimental
+bool
 rte_bbdev_is_valid(uint16_t dev_id);
 
 /**
@@ -80,7 +82,8 @@ enum rte_bbdev_state {
  *   - The next device, or
  *   - RTE_BBDEV_MAX_DEVS if none found
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_bbdev_find_next(uint16_t dev_id);
 
 /** Iterate through all enabled devices */
@@ -109,7 +112,8 @@ enum rte_bbdev_state {
  *   - -EBUSY if the identified device has already started
  *   - -ENOMEM if unable to allocate memory
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
 
 /**
@@ -126,7 +130,8 @@ enum rte_bbdev_state {
  *   - -EBUSY if the identified device has already started
  *   - -ENOTSUP if the interrupts are not supported by the device
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_intr_enable(uint16_t dev_id);
 
 /** Device queue configuration structure */
@@ -155,7 +160,8 @@ struct rte_bbdev_queue_conf {
  *   - EINVAL if the identified queue size or priority are invalid
  *   - EBUSY if the identified queue or its device have already started
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 		const struct rte_bbdev_queue_conf *conf);
 
@@ -170,7 +176,8 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_start(uint16_t dev_id);
 
 /**
@@ -183,7 +190,8 @@ struct rte_bbdev_queue_conf {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_stop(uint16_t dev_id);
 
 /**
@@ -196,7 +204,8 @@ struct rte_bbdev_queue_conf {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_close(uint16_t dev_id);
 
 /**
@@ -213,7 +222,8 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -228,7 +238,8 @@ struct rte_bbdev_queue_conf {
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
 
 /** Device statistics. */
@@ -261,7 +272,8 @@ struct rte_bbdev_stats {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
 
 /**
@@ -272,7 +284,8 @@ struct rte_bbdev_stats {
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_stats_reset(uint16_t dev_id);
 
 /** Device information supplied by the device's driver */
@@ -332,7 +345,8 @@ struct rte_bbdev_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
 
 /** Queue information */
@@ -358,7 +372,8 @@ struct rte_bbdev_queue_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_queue_info *queue_info);
 
@@ -466,7 +481,8 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually enqueued (this is the number of processed
  *   entries in the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -496,7 +512,8 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually enqueued (this is the number of processed
  *   entries in the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -526,7 +543,8 @@ struct __rte_cache_aligned rte_bbdev {
  *   The number of operations actually dequeued (this is the number of entries
  *   copied into the @p ops array).
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -557,7 +575,8 @@ struct __rte_cache_aligned rte_bbdev {
  *   copied into the @p ops array).
  */
 
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_bbdev_dequeue_dec_ops(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -608,7 +627,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  * @return
  *   Zero on success, negative value on failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg);
 
@@ -631,7 +651,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - EINVAL if invalid parameter pointer is provided
  *   - EAGAIN if the provided callback pointer does not exist
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg);
 
@@ -651,7 +672,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -667,7 +689,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -694,7 +717,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  *   - ENOTSUP if interrupts are not supported by the identified device
  *   - negative value on failure - as returned from PMD driver
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 		void *data);
 
diff --git a/lib/librte_bbdev/rte_bbdev_op.h b/lib/librte_bbdev/rte_bbdev_op.h
index 6be53f5..b6ca3b0 100644
--- a/lib/librte_bbdev/rte_bbdev_op.h
+++ b/lib/librte_bbdev/rte_bbdev_op.h
@@ -461,7 +461,8 @@ struct rte_bbdev_op_pool_private {
  *   Operation type as string or NULL if op_type is invalid
  *
  */
-const char* __rte_experimental
+__rte_experimental
+const char*
 rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type);
 
 /**
@@ -484,7 +485,8 @@ struct rte_bbdev_op_pool_private {
  *   - Pointer to a mempool on success,
  *   - NULL pointer on failure.
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental
+struct rte_mempool *
 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 		unsigned int num_elements, unsigned int cache_size,
 		int socket_id);
@@ -503,7 +505,8 @@ struct rte_mempool * __rte_experimental
  *   - 0 on success
  *   - EINVAL if invalid mempool is provided
  */
-static inline int __rte_experimental
+__rte_experimental
+static inline int
 rte_bbdev_enc_op_alloc_bulk(struct rte_mempool *mempool,
 		struct rte_bbdev_enc_op **ops, uint16_t num_ops)
 {
@@ -538,7 +541,8 @@ struct rte_mempool * __rte_experimental
  *   - 0 on success
  *   - EINVAL if invalid mempool is provided
  */
-static inline int __rte_experimental
+__rte_experimental
+static inline int
 rte_bbdev_dec_op_alloc_bulk(struct rte_mempool *mempool,
 		struct rte_bbdev_dec_op **ops, uint16_t num_ops)
 {
@@ -569,7 +573,8 @@ struct rte_mempool * __rte_experimental
  * @param num_ops
  *   Number of structures
  */
-static inline void __rte_experimental
+__rte_experimental
+static inline void
 rte_bbdev_dec_op_free_bulk(struct rte_bbdev_dec_op **ops, unsigned int num_ops)
 {
 	if (num_ops > 0)
@@ -586,7 +591,8 @@ struct rte_mempool * __rte_experimental
  * @param num_ops
  *   Number of structures
  */
-static inline void __rte_experimental
+__rte_experimental
+static inline void
 rte_bbdev_enc_op_free_bulk(struct rte_bbdev_enc_op **ops, unsigned int num_ops)
 {
 	if (num_ops > 0)
diff --git a/lib/librte_bbdev/rte_bbdev_pmd.h b/lib/librte_bbdev/rte_bbdev_pmd.h
index db9a04c..24ddcee 100644
--- a/lib/librte_bbdev/rte_bbdev_pmd.h
+++ b/lib/librte_bbdev/rte_bbdev_pmd.h
@@ -43,7 +43,8 @@
  * @return
  *   - Slot in the rte_bbdev array for a new device;
  */
-struct rte_bbdev * __rte_experimental
+__rte_experimental
+struct rte_bbdev *
 rte_bbdev_allocate(const char *name);
 
 /**
@@ -55,7 +56,8 @@ struct rte_bbdev * __rte_experimental
  * @return
  *   - 0 on success, negative on error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_release(struct rte_bbdev *bbdev);
 
 /**
@@ -69,7 +71,8 @@ struct rte_bbdev * __rte_experimental
  *   - NULL otherwise
  *
  */
-struct rte_bbdev * __rte_experimental
+__rte_experimental
+struct rte_bbdev *
 rte_bbdev_get_named_dev(const char *name);
 
 /**
@@ -187,7 +190,8 @@ struct rte_bbdev_ops {
  * @param ret_param
  *   To pass data back to user application.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	enum rte_bbdev_event_type event, void *ret_param);
 
diff --git a/lib/librte_bpf/rte_bpf.h b/lib/librte_bpf/rte_bpf.h
index c8b9601..cd4d56d 100644
--- a/lib/librte_bpf/rte_bpf.h
+++ b/lib/librte_bpf/rte_bpf.h
@@ -113,7 +113,8 @@ struct rte_bpf_jit {
  * @param bpf
  *   BPF handle to destroy.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_bpf_destroy(struct rte_bpf *bpf);
 
 /**
@@ -128,7 +129,8 @@ struct rte_bpf_jit {
  *   - EINVAL - invalid parameter passed to function
  *   - ENOMEM - can't reserve enough memory
  */
-struct rte_bpf * __rte_experimental
+__rte_experimental
+struct rte_bpf *
 rte_bpf_load(const struct rte_bpf_prm *prm);
 
 /**
@@ -151,7 +153,8 @@ struct rte_bpf * __rte_experimental
  *   - EINVAL - invalid parameter passed to function
  *   - ENOMEM - can't reserve enough memory
  */
-struct rte_bpf * __rte_experimental
+__rte_experimental
+struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 		const char *sname);
 /**
@@ -164,7 +167,8 @@ struct rte_bpf * __rte_experimental
  * @return
  *   BPF execution return value.
  */
-uint64_t __rte_experimental
+__rte_experimental
+uint64_t
 rte_bpf_exec(const struct rte_bpf *bpf, void *ctx);
 
 /**
@@ -181,7 +185,8 @@ struct rte_bpf * __rte_experimental
  * @return
  *   number of successfully processed inputs.
  */
-uint32_t __rte_experimental
+__rte_experimental
+uint32_t
 rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 		uint32_t num);
 
@@ -196,7 +201,8 @@ struct rte_bpf * __rte_experimental
  *   - -EINVAL if the parameters are invalid.
  *   - Zero if operation completed successfully.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bpf_get_jit(const struct rte_bpf *bpf, struct rte_bpf_jit *jit);
 
 #ifdef __cplusplus
diff --git a/lib/librte_bpf/rte_bpf_ethdev.h b/lib/librte_bpf/rte_bpf_ethdev.h
index 1943372..0ce526e 100644
--- a/lib/librte_bpf/rte_bpf_ethdev.h
+++ b/lib/librte_bpf/rte_bpf_ethdev.h
@@ -45,7 +45,8 @@ enum {
  * @param queue
  *   The identifier of the RX queue on the given port
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue);
 
 /**
@@ -57,7 +58,8 @@ enum {
  * @param queue
  *   The identifier of the TX queue on the given port
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue);
 
 /**
@@ -80,7 +82,8 @@ enum {
  * @return
  *   Zero on successful completion or negative error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags);
@@ -105,7 +108,8 @@ enum {
  * @return
  *   Zero on successful completion or negative error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
 	uint32_t flags);
diff --git a/lib/librte_compressdev/rte_comp.h b/lib/librte_compressdev/rte_comp.h
index 67423bd..b7474c4 100644
--- a/lib/librte_compressdev/rte_comp.h
+++ b/lib/librte_compressdev/rte_comp.h
@@ -420,7 +420,8 @@ struct rte_comp_op {
  *  - On success pointer to mempool
  *  - On failure NULL
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental
+struct rte_mempool *
 rte_comp_op_pool_create(const char *name,
 		unsigned int nb_elts, unsigned int cache_size,
 		uint16_t user_size, int socket_id);
@@ -435,7 +436,8 @@ struct rte_mempool * __rte_experimental
  * - On success returns a valid rte_comp_op structure
  * - On failure returns NULL
  */
-struct rte_comp_op * __rte_experimental
+__rte_experimental
+struct rte_comp_op *
 rte_comp_op_alloc(struct rte_mempool *mempool);
 
 /**
@@ -451,7 +453,8 @@ struct rte_comp_op * __rte_experimental
  *   - nb_ops: Success, the nb_ops requested was allocated
  *   - 0: Not enough entries in the mempool; no ops are retrieved.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -463,7 +466,8 @@ struct rte_comp_op * __rte_experimental
  * @param op
  *   Compress operation
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_comp_op_free(struct rte_comp_op *op);
 
 /**
@@ -477,7 +481,8 @@ struct rte_comp_op * __rte_experimental
  * @param nb_ops
  *   Number of operations to free
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_comp_op_bulk_free(struct rte_comp_op **ops, uint16_t nb_ops);
 
 /**
@@ -489,7 +494,8 @@ struct rte_comp_op * __rte_experimental
  * @return
  *   The name of this flag, or NULL if it's not a valid feature flag.
  */
-const char * __rte_experimental
+__rte_experimental
+const char *
 rte_comp_get_feature_name(uint64_t flag);
 
 #ifdef __cplusplus
diff --git a/lib/librte_compressdev/rte_compressdev.h b/lib/librte_compressdev/rte_compressdev.h
index d3c0000..8052efe 100644
--- a/lib/librte_compressdev/rte_compressdev.h
+++ b/lib/librte_compressdev/rte_compressdev.h
@@ -50,7 +50,8 @@ struct rte_compressdev_capabilities {
 #define RTE_COMP_END_OF_CAPABILITIES_LIST() \
 	{ RTE_COMP_ALGO_UNSPECIFIED }
 
-const struct rte_compressdev_capabilities * __rte_experimental
+__rte_experimental
+const struct rte_compressdev_capabilities *
 rte_compressdev_capability_get(uint8_t dev_id,
 			enum rte_comp_algorithm algo);
 
@@ -89,7 +90,8 @@ struct rte_compressdev_capabilities {
  * @return
  *   The name of this flag, or NULL if it's not a valid feature flag.
  */
-const char * __rte_experimental
+__rte_experimental
+const char *
 rte_compressdev_get_feature_name(uint64_t flag);
 
 /**  comp device information */
@@ -127,7 +129,8 @@ struct rte_compressdev_stats {
  *   - Returns compress device identifier on success.
  *   - Return -1 on failure to find named compress device.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_get_dev_id(const char *name);
 
 /**
@@ -139,7 +142,8 @@ struct rte_compressdev_stats {
  *   - Returns compress device name.
  *   - Returns NULL if compress device is not present.
  */
-const char * __rte_experimental
+__rte_experimental
+const char *
 rte_compressdev_name_get(uint8_t dev_id);
 
 /**
@@ -149,7 +153,8 @@ struct rte_compressdev_stats {
  * @return
  *   - The total number of usable compress devices.
  */
-uint8_t __rte_experimental
+__rte_experimental
+uint8_t
 rte_compressdev_count(void);
 
 /**
@@ -166,7 +171,8 @@ struct rte_compressdev_stats {
  * @return
  *   Returns number of attached compress devices.
  */
-uint8_t __rte_experimental
+__rte_experimental
+uint8_t
 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 		uint8_t nb_devices);
 
@@ -180,7 +186,8 @@ struct rte_compressdev_stats {
  *   a default of zero if the socket could not be determined.
  *   -1 if returned is the dev_id value is out of range.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_socket_id(uint8_t dev_id);
 
 /** Compress device configuration structure */
@@ -210,7 +217,8 @@ struct rte_compressdev_config {
  *   - 0: Success, device configured.
  *   - <0: Error code returned by the driver configuration function.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_configure(uint8_t dev_id,
 			struct rte_compressdev_config *config);
 
@@ -228,7 +236,8 @@ struct rte_compressdev_config {
  *   - 0: Success, device started.
  *   - <0: Error code of the driver device start function.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_start(uint8_t dev_id);
 
 /**
@@ -238,7 +247,8 @@ struct rte_compressdev_config {
  * @param dev_id
  *   Compress device identifier
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_compressdev_stop(uint8_t dev_id);
 
 /**
@@ -255,7 +265,8 @@ struct rte_compressdev_config {
  *  - 0 on successfully closing device
  *  - <0 on failure to close device
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_close(uint8_t dev_id);
 
 /**
@@ -281,7 +292,8 @@ struct rte_compressdev_config {
  *   - 0: Success, queue pair correctly set up.
  *   - <0: Queue pair configuration failed
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		uint32_t max_inflight_ops, int socket_id);
 
@@ -293,7 +305,8 @@ struct rte_compressdev_config {
  * @return
  *   - The number of configured queue pairs.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_compressdev_queue_pair_count(uint8_t dev_id);
 
 
@@ -310,7 +323,8 @@ struct rte_compressdev_config {
  *   - Zero if successful.
  *   - Non-zero otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats);
 
 /**
@@ -319,7 +333,8 @@ struct rte_compressdev_config {
  * @param dev_id
  *   The identifier of the device.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_compressdev_stats_reset(uint8_t dev_id);
 
 /**
@@ -336,7 +351,8 @@ struct rte_compressdev_config {
  * The element after the last valid element has it's op field set to
  * RTE_COMP_ALGO_LIST_END.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info);
 
 /**
@@ -393,7 +409,8 @@ struct rte_compressdev_config {
  *   of pointers to *rte_comp_op* structures effectively supplied to the
  *   *ops* array.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -447,7 +464,8 @@ struct rte_compressdev_config {
  *   comp devices queue is full or if invalid parameters are specified in
  *   a *rte_comp_op*.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops);
 
@@ -475,7 +493,8 @@ struct rte_compressdev_config {
  *  - Returns -ENOMEM if the private stream could not be allocated.
  *
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_stream_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **stream);
@@ -496,7 +515,8 @@ struct rte_compressdev_config {
  *  - Returns -ENOTSUP if comp device does not support STATEFUL operations.
  *  - Returns -EBUSY if can't free stream as there are inflight operations
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_stream_free(uint8_t dev_id, void *stream);
 
 /**
@@ -522,7 +542,8 @@ struct rte_compressdev_config {
  *  - Returns -ENOTSUP if comp device does not support the comp transform.
  *  - Returns -ENOMEM if the private_xform could not be allocated.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_private_xform_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
 		void **private_xform);
@@ -543,7 +564,8 @@ struct rte_compressdev_config {
  *  - <0 in error cases
  *  - Returns -EINVAL if input parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_private_xform_free(uint8_t dev_id, void *private_xform);
 
 #ifdef __cplusplus
diff --git a/lib/librte_compressdev/rte_compressdev_pmd.h b/lib/librte_compressdev/rte_compressdev_pmd.h
index 043353c..c8e0175 100644
--- a/lib/librte_compressdev/rte_compressdev_pmd.h
+++ b/lib/librte_compressdev/rte_compressdev_pmd.h
@@ -59,7 +59,8 @@ struct rte_compressdev_global {
  * @return
  *   - The rte_compressdev structure pointer for the given device identifier.
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name);
 
 /**
@@ -299,7 +300,8 @@ struct rte_compressdev_ops {
  * @return
  *   - Slot in the rte_dev_devices array for a new device;
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_allocate(const char *name, int socket_id);
 
 /**
@@ -314,7 +316,8 @@ struct rte_compressdev * __rte_experimental
  * @return
  *   - 0 on success, negative on error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_pmd_release_device(struct rte_compressdev *dev);
 
 
@@ -336,7 +339,8 @@ struct rte_compressdev * __rte_experimental
  *  - 0 on success
  *  - errno on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_pmd_parse_input_args(
 		struct rte_compressdev_pmd_init_params *params,
 		const char *args);
@@ -357,7 +361,8 @@ struct rte_compressdev * __rte_experimental
  *  - comp device instance on success
  *  - NULL on creation failure
  */
-struct rte_compressdev * __rte_experimental
+__rte_experimental
+struct rte_compressdev *
 rte_compressdev_pmd_create(const char *name,
 		struct rte_device *device,
 		size_t private_data_size,
@@ -375,7 +380,8 @@ struct rte_compressdev * __rte_experimental
  *  - 0 on success
  *  - errno on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_compressdev_pmd_destroy(struct rte_compressdev *dev);
 
 #ifdef __cplusplus
diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h
index 2d4f6d7..cb894ef 100644
--- a/lib/librte_cryptodev/rte_cryptodev.h
+++ b/lib/librte_cryptodev/rte_cryptodev.h
@@ -230,7 +230,8 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return description of the asymmetric crypto capability if exist.
  *   - Return NULL if the capability not exist.
  */
-const struct rte_cryptodev_asymmetric_xform_capability * __rte_experimental
+__rte_experimental
+const struct rte_cryptodev_asymmetric_xform_capability *
 rte_cryptodev_asym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_asym_capability_idx *idx);
 
@@ -299,7 +300,8 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return 1 if the op type is supported
  *   - Return 0 if unsupported
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_optype(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 		enum rte_crypto_asym_op_type op_type);
@@ -314,7 +316,8 @@ struct rte_cryptodev_asym_capability_idx {
  *   - Return 0 if the parameters are in range of the capability.
  *   - Return -1 if the parameters are out of range of the capability.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_xform_capability_check_modlen(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
 		uint16_t modlen);
@@ -375,7 +378,8 @@ struct rte_cryptodev_asym_capability_idx {
  * - Return -1 if string is not valid
  * - Return 0 if the string is valid
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 		const char *xform_string);
 
@@ -1002,7 +1006,8 @@ struct rte_cryptodev_asym_session {
  *  - On success return size of the session
  *  - On failure returns 0
  */
-struct rte_mempool * __rte_experimental
+__rte_experimental
+struct rte_mempool *
 rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t elt_size, uint32_t cache_size, uint16_t priv_size,
 	int socket_id);
@@ -1028,7 +1033,8 @@ struct rte_cryptodev_sym_session *
  *  - On success return pointer to asym-session
  *  - On failure returns NULL
  */
-struct rte_cryptodev_asym_session * __rte_experimental
+__rte_experimental
+struct rte_cryptodev_asym_session *
 rte_cryptodev_asym_session_create(struct rte_mempool *mempool);
 
 /**
@@ -1058,7 +1064,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - -EINVAL if session is NULL.
  *  - -EBUSY if not all device private data has been freed.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess);
 
 /**
@@ -1098,7 +1105,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - -ENOTSUP if crypto device does not support the crypto transform.
  *  - -ENOMEM if the private session could not be allocated.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_session_init(uint8_t dev_id,
 			struct rte_cryptodev_asym_session *sess,
 			struct rte_crypto_asym_xform *xforms,
@@ -1132,7 +1140,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - 0 if successful.
  *  - -EINVAL if device is invalid or session is NULL.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_asym_session_clear(uint8_t dev_id,
 			struct rte_cryptodev_asym_session *sess);
 
@@ -1157,7 +1166,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *   the private data size defined within sess.
  *   - If sess is NULL, return 0.
  */
-unsigned int __rte_experimental
+__rte_experimental
+unsigned int
 rte_cryptodev_sym_get_existing_header_session_size(
 		struct rte_cryptodev_sym_session *sess);
 
@@ -1167,7 +1177,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  * @return
  *   Size of the asymmetric header session.
  */
-unsigned int __rte_experimental
+__rte_experimental
+unsigned int
 rte_cryptodev_asym_get_header_session_size(void);
 
 /**
@@ -1194,7 +1205,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *   - Size of the asymmetric private data, if successful
  *   - 0 if device is invalid or does not have private session
  */
-unsigned int __rte_experimental
+__rte_experimental
+unsigned int
 rte_cryptodev_asym_get_private_session_size(uint8_t dev_id);
 
 /**
@@ -1229,7 +1241,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - On success, zero.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_cryptodev_sym_session_set_user_data(
 					struct rte_cryptodev_sym_session *sess,
 					void *data,
@@ -1245,7 +1258,8 @@ struct rte_cryptodev_asym_session * __rte_experimental
  *  - On success return pointer to user data.
  *  - On failure returns NULL.
  */
-void * __rte_experimental
+__rte_experimental
+void *
 rte_cryptodev_sym_session_get_user_data(
 					struct rte_cryptodev_sym_session *sess);
 
diff --git a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
index 6232c57..e087c6c 100644
--- a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
+++ b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h
@@ -224,7 +224,8 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v)
 	};
 } __rte_aligned(16) rte_int128_t;
 
-static inline int __rte_experimental
+__rte_experimental
+static inline int
 rte_atomic128_cmp_exchange(rte_int128_t *dst,
 			   rte_int128_t *exp,
 			   const rte_int128_t *src,
diff --git a/lib/librte_eal/common/include/generic/rte_atomic.h b/lib/librte_eal/common/include/generic/rte_atomic.h
index 9958543..24ff7dc 100644
--- a/lib/librte_eal/common/include/generic/rte_atomic.h
+++ b/lib/librte_eal/common/include/generic/rte_atomic.h
@@ -1121,7 +1121,8 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v)
  * @return
  *   Non-zero on success; 0 on failure.
  */
-static inline int __rte_experimental
+__rte_experimental
+static inline int
 rte_atomic128_cmp_exchange(rte_int128_t *dst,
 			   rte_int128_t *exp,
 			   const rte_int128_t *src,
diff --git a/lib/librte_eal/common/include/generic/rte_cycles.h b/lib/librte_eal/common/include/generic/rte_cycles.h
index d318b91..73d1fa7 100644
--- a/lib/librte_eal/common/include/generic/rte_cycles.h
+++ b/lib/librte_eal/common/include/generic/rte_cycles.h
@@ -165,7 +165,8 @@ enum timer_source {
  * @param us
  *   Number of microseconds to wait.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_delay_us_sleep(unsigned int us);
 
 /**
diff --git a/lib/librte_eal/common/include/generic/rte_rwlock.h b/lib/librte_eal/common/include/generic/rte_rwlock.h
index 31608fa..da9bc3e 100644
--- a/lib/librte_eal/common/include/generic/rte_rwlock.h
+++ b/lib/librte_eal/common/include/generic/rte_rwlock.h
@@ -88,7 +88,8 @@
  *   - -EBUSY if lock could not be acquired for reading because a
  *     writer holds the lock
  */
-static inline __rte_experimental int
+__rte_experimental
+static inline int
 rte_rwlock_read_trylock(rte_rwlock_t *rwl)
 {
 	int32_t x;
@@ -131,7 +132,8 @@
  *   - -EBUSY if lock could not be acquired for writing because
  *     it was already locked for reading or writing
  */
-static inline __rte_experimental int
+__rte_experimental
+static inline int
 rte_rwlock_write_trylock(rte_rwlock_t *rwl)
 {
 	int32_t x;
diff --git a/lib/librte_eal/common/include/generic/rte_ticketlock.h b/lib/librte_eal/common/include/generic/rte_ticketlock.h
index 191146f..d9bec87 100644
--- a/lib/librte_eal/common/include/generic/rte_ticketlock.h
+++ b/lib/librte_eal/common/include/generic/rte_ticketlock.h
@@ -48,7 +48,8 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_init(rte_ticketlock_t *tl)
 {
 	__atomic_store_n(&tl->tickets, 0, __ATOMIC_RELAXED);
@@ -60,7 +61,8 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_lock(rte_ticketlock_t *tl)
 {
 	uint16_t me = __atomic_fetch_add(&tl->s.next, 1, __ATOMIC_RELAXED);
@@ -74,7 +76,8 @@
  * @param tl
  *   A pointer to the ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_unlock(rte_ticketlock_t *tl)
 {
 	uint16_t i = __atomic_load_n(&tl->s.current, __ATOMIC_RELAXED);
@@ -89,7 +92,8 @@
  * @return
  *   1 if the lock is successfully taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental
+static inline int
 rte_ticketlock_trylock(rte_ticketlock_t *tl)
 {
 	rte_ticketlock_t old, new;
@@ -113,7 +117,8 @@
  * @return
  *   1 if the lock is currently taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental
+static inline int
 rte_ticketlock_is_locked(rte_ticketlock_t *tl)
 {
 	rte_ticketlock_t tic;
@@ -144,7 +149,8 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_recursive_init(rte_ticketlock_recursive_t *tlr)
 {
 	rte_ticketlock_init(&tlr->tl);
@@ -158,7 +164,8 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_recursive_lock(rte_ticketlock_recursive_t *tlr)
 {
 	int id = rte_gettid();
@@ -176,7 +183,8 @@
  * @param tlr
  *   A pointer to the recursive ticketlock.
  */
-static inline __rte_experimental void
+__rte_experimental
+static inline void
 rte_ticketlock_recursive_unlock(rte_ticketlock_recursive_t *tlr)
 {
 	if (--(tlr->count) == 0) {
@@ -194,7 +202,8 @@
  * @return
  *   1 if the lock is successfully taken; 0 otherwise.
  */
-static inline __rte_experimental int
+__rte_experimental
+static inline int
 rte_ticketlock_recursive_trylock(rte_ticketlock_recursive_t *tlr)
 {
 	int id = rte_gettid();
diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h
index a17023d..a01c4ad 100644
--- a/lib/librte_eal/common/include/rte_dev.h
+++ b/lib/librte_eal/common/include/rte_dev.h
@@ -363,7 +363,8 @@ struct rte_device *
  *  - On success, zero.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_event_callback_register(const char *device_name,
 				rte_dev_event_cb_fn cb_fn,
 				void *cb_arg);
@@ -387,7 +388,8 @@ struct rte_device *
  *  - On success, return the number of callback entities removed.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_event_callback_unregister(const char *device_name,
 				  rte_dev_event_cb_fn cb_fn,
 				  void *cb_arg);
@@ -404,7 +406,8 @@ struct rte_device *
  * @param event
  *  the device event type.
  */
-void  __rte_experimental
+__rte_experimental
+void
 rte_dev_event_callback_process(const char *device_name,
 			       enum rte_dev_event_type event);
 
@@ -418,7 +421,8 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_event_monitor_start(void);
 
 /**
@@ -431,7 +435,8 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_event_monitor_stop(void);
 
 /**
@@ -444,7 +449,8 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_hotplug_handle_enable(void);
 
 /**
@@ -457,7 +463,8 @@ struct rte_device *
  *   - On success, zero.
  *   - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_hotplug_handle_disable(void);
 
 /**
@@ -480,7 +487,8 @@ struct rte_device *
  *	0 if mapping was successful.
  *	Negative value and rte_errno is set otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len);
 
 /**
@@ -503,7 +511,8 @@ struct rte_device *
  *	0 if un-mapping was successful.
  *	Negative value and rte_errno is set otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_dev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
 		  size_t len);
 
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index 27808a3..bf0c74e 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -275,7 +275,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - 0 on success.
  *  - (<0) on failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mp_action_register(const char *name, rte_mp_t action);
 
 /**
@@ -295,7 +296,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *   The name argument plays as the nonredundant key to find the action.
  *
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_mp_action_unregister(const char *name);
 
 /**
@@ -314,7 +316,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mp_sendmsg(struct rte_mp_msg *msg);
 
 /**
@@ -348,7 +351,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 	       const struct timespec *ts);
 
@@ -377,7 +381,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb);
 
@@ -405,7 +410,8 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
  *  - On success, return 0.
  *  - On failure, return -1, and the reason will be stored in rte_errno.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer);
 
 /**
diff --git a/lib/librte_eal/common/include/rte_fbarray.h b/lib/librte_eal/common/include/rte_fbarray.h
index 33841ca..d0af2d8 100644
--- a/lib/librte_eal/common/include/rte_fbarray.h
+++ b/lib/librte_eal/common/include/rte_fbarray.h
@@ -75,7 +75,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 		unsigned int elt_sz);
 
@@ -97,7 +98,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_attach(struct rte_fbarray *arr);
 
 
@@ -118,7 +120,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_destroy(struct rte_fbarray *arr);
 
 
@@ -136,7 +139,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_detach(struct rte_fbarray *arr);
 
 
@@ -153,7 +157,8 @@ struct rte_fbarray {
  *  - non-NULL pointer on success.
  *  - NULL on failure, with ``rte_errno`` indicating reason for failure.
  */
-void * __rte_experimental
+__rte_experimental
+void *
 rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -170,7 +175,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt);
 
 
@@ -187,7 +193,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -204,7 +211,8 @@ struct rte_fbarray {
  *  - 0 on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -222,7 +230,8 @@ struct rte_fbarray {
  *  - 0 if element is unused.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx);
 
 
@@ -239,7 +248,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -256,7 +266,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -276,7 +287,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -297,7 +309,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -315,7 +328,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_contig_free(struct rte_fbarray *arr,
 		unsigned int start);
 
@@ -333,7 +347,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start);
 
 /**
@@ -349,7 +364,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -366,7 +382,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -387,7 +404,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -409,7 +427,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n);
 
@@ -428,7 +447,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr,
 		unsigned int start);
 
@@ -447,7 +467,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -464,7 +485,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -481,7 +503,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -499,7 +522,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -517,7 +541,8 @@ struct rte_fbarray {
  *  - non-negative integer on success.
  *  - -1 on failure, with ``rte_errno`` indicating reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start);
 
 
@@ -530,7 +555,8 @@ struct rte_fbarray {
  * @param f
  *   File object to dump information into.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f);
 
 #ifdef __cplusplus
diff --git a/lib/librte_eal/common/include/rte_interrupts.h b/lib/librte_eal/common/include/rte_interrupts.h
index 225dae2..d1a78ef 100644
--- a/lib/librte_eal/common/include/rte_interrupts.h
+++ b/lib/librte_eal/common/include/rte_interrupts.h
@@ -88,7 +88,8 @@ int rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
  *  - On success, return the number of callback entities marked for remove.
  *  - On failure, a negative value.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
 				rte_intr_unregister_callback_fn ucb_fn);
diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h
index 1e3c887..411df30 100644
--- a/lib/librte_eal/common/include/rte_lcore.h
+++ b/lib/librte_eal/common/include/rte_lcore.h
@@ -183,7 +183,8 @@ struct lcore_config {
  * @return
  *   The relative index, or -1 if not enabled.
  */
-__rte_experimental int
+__rte_experimental
+int
 rte_lcore_to_cpu_id(int lcore_id);
 
 /**
@@ -196,7 +197,8 @@ struct lcore_config {
  * @return
  *   The cpuset of that lcore
  */
-__rte_experimental rte_cpuset_t
+__rte_experimental
+rte_cpuset_t
 rte_lcore_cpuset(unsigned int lcore_id);
 
 /**
diff --git a/lib/librte_eal/common/include/rte_malloc.h b/lib/librte_eal/common/include/rte_malloc.h
index 5ff1a39..3d4fad4 100644
--- a/lib/librte_eal/common/include/rte_malloc.h
+++ b/lib/librte_eal/common/include/rte_malloc.h
@@ -153,7 +153,8 @@ struct rte_malloc_socket_stats {
  *     align is not a power of two).
  *   - Otherwise, the pointer to the reallocated memory.
  */
-void * __rte_experimental
+__rte_experimental
+void *
 rte_realloc_socket(void *ptr, size_t size, unsigned int align, int socket);
 
 /**
@@ -330,7 +331,8 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to add memory to a reserved heap
  *     ENOSPC - no more space in internal config to store a new memory chunk
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_memory_add(const char *heap_name, void *va_addr, size_t len,
 		rte_iova_t iova_addrs[], unsigned int n_pages, size_t page_sz);
 
@@ -361,7 +363,8 @@ struct rte_malloc_socket_stats {
  *     ENOENT - heap or memory chunk was not found
  *     EBUSY  - memory chunk still contains data
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_memory_remove(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -385,7 +388,8 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to attach memory to a reserved heap
  *     ENOENT - heap or memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_memory_attach(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -409,7 +413,8 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempted to detach memory from a reserved heap
  *     ENOENT - heap or memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_memory_detach(const char *heap_name, void *va_addr, size_t len);
 
 /**
@@ -428,7 +433,8 @@ struct rte_malloc_socket_stats {
  *     EEXIST - heap by name of ``heap_name`` already exists
  *     ENOSPC - no more space in internal config to store a new heap
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_create(const char *heap_name);
 
 /**
@@ -451,7 +457,8 @@ struct rte_malloc_socket_stats {
  *     EPERM  - attempting to destroy reserved heap
  *     EBUSY  - heap still contains data
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_destroy(const char *heap_name);
 
 /**
@@ -465,7 +472,8 @@ struct rte_malloc_socket_stats {
  *     EINVAL - ``name`` was NULL
  *     ENOENT - heap identified by the name ``name`` was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_get_socket(const char *name);
 
 /**
@@ -480,7 +488,8 @@ struct rte_malloc_socket_stats {
  *   0 if socket ID refers to internal DPDK memory
  *   -1 if socket ID is invalid
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_malloc_heap_socket_is_external(int socket_id);
 
 /**
@@ -510,7 +519,8 @@ struct rte_malloc_socket_stats {
  * @param f
  *   A pointer to a file for output
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_malloc_dump_heaps(FILE *f);
 
 /**
diff --git a/lib/librte_eal/common/include/rte_memory.h b/lib/librte_eal/common/include/rte_memory.h
index 7ca703b..44cbe6f 100644
--- a/lib/librte_eal/common/include/rte_memory.h
+++ b/lib/librte_eal/common/include/rte_memory.h
@@ -148,7 +148,8 @@ struct rte_memseg {
  *   Virtual address corresponding to iova address (or NULL if address does not
  *   exist within DPDK memory map).
  */
-__rte_experimental void *
+__rte_experimental
+void *
 rte_mem_iova2virt(rte_iova_t iova);
 
 /**
@@ -162,7 +163,8 @@ struct rte_memseg {
  * @return
  *   Memseg pointer on success, or NULL on error.
  */
-__rte_experimental struct rte_memseg *
+__rte_experimental
+struct rte_memseg *
 rte_mem_virt2memseg(const void *virt, const struct rte_memseg_list *msl);
 
 /**
@@ -173,7 +175,8 @@ struct rte_memseg {
  * @return
  *   Memseg list to which this virtual address belongs to.
  */
-__rte_experimental struct rte_memseg_list *
+__rte_experimental
+struct rte_memseg_list *
 rte_mem_virt2memseg_list(const void *virt);
 
 /**
@@ -227,7 +230,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_walk(rte_memseg_walk_t func, void *arg);
 
 /**
@@ -248,7 +252,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg);
 
 /**
@@ -269,7 +274,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg);
 
 /**
@@ -287,7 +293,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg);
 
 /**
@@ -305,7 +312,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg);
 
 /**
@@ -323,7 +331,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *   1 if stopped by the user
  *   -1 if user function reported error
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg);
 
 /**
@@ -347,7 +356,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_get_fd(const struct rte_memseg *ms);
 
 /**
@@ -371,7 +381,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms);
 
 /**
@@ -395,7 +406,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset);
 
 /**
@@ -419,7 +431,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     - ENOENT  - ``ms`` is an unused segment
  *     - ENOTSUP - segment fd's are not supported
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 		size_t *offset);
 
@@ -460,7 +473,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EEXIST - memory chunk is already registered
  *     ENOSPC - no more space in internal config to store a new memory chunk
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 		unsigned int n_pages, size_t page_sz);
 
@@ -490,7 +504,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_extmem_unregister(void *va_addr, size_t len);
 
 /**
@@ -516,7 +531,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_extmem_attach(void *va_addr, size_t len);
 
 /**
@@ -542,7 +558,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *     EINVAL - one of the parameters was invalid
  *     ENOENT - memory chunk was not found
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_extmem_detach(void *va_addr, size_t len);
 
 /**
@@ -595,7 +612,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  @param maskbits
  *    Address width to check against.
  */
-int __rte_experimental rte_mem_check_dma_mask(uint8_t maskbits);
+__rte_experimental
+int rte_mem_check_dma_mask(uint8_t maskbits);
 
 /**
  * @warning
@@ -613,7 +631,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  @param maskbits
  *    Address width to check against.
  */
-int __rte_experimental rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits);
+__rte_experimental
+int rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits);
 
 /**
  * @warning
@@ -623,7 +642,8 @@ typedef int (*rte_memseg_list_walk_t)(const struct rte_memseg_list *msl,
  *  rte_mem_check_dma_mask and rte_mem_check_dma_mask_thread_unsafe can not be
  *  used safely until memory has been initialized.
  */
-void __rte_experimental rte_mem_set_dma_mask(uint8_t maskbits);
+__rte_experimental
+void rte_mem_set_dma_mask(uint8_t maskbits);
 
 /**
  * Drivers based on uio will not load unless physical
@@ -679,7 +699,8 @@ typedef void (*rte_mem_event_callback_t)(enum rte_mem_event event_type,
  *   -1 on unsuccessful callback register, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 		void *arg);
 
@@ -697,7 +718,8 @@ typedef void (*rte_mem_event_callback_t)(enum rte_mem_event event_type,
  *   -1 on unsuccessful callback unregister, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mem_event_callback_unregister(const char *name, void *arg);
 
 
@@ -746,7 +768,8 @@ typedef int (*rte_mem_alloc_validator_t)(int socket_id,
  *   -1 on unsuccessful callback register, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mem_alloc_validator_register(const char *name,
 		rte_mem_alloc_validator_t clb, int socket_id, size_t limit);
 
@@ -764,7 +787,8 @@ typedef int (*rte_mem_alloc_validator_t)(int socket_id,
  *   -1 on unsuccessful callback unregister, with rte_errno value indicating
  *   reason for failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mem_alloc_validator_unregister(const char *name, int socket_id);
 
 #ifdef __cplusplus
diff --git a/lib/librte_eal/common/include/rte_random.h b/lib/librte_eal/common/include/rte_random.h
index 939e6aa..2b30ec8 100644
--- a/lib/librte_eal/common/include/rte_random.h
+++ b/lib/librte_eal/common/include/rte_random.h
@@ -62,7 +62,8 @@
  * @return
  *   A pseudo-random value between 0 and (upper_bound-1).
  */
-uint64_t __rte_experimental
+__rte_experimental
+uint64_t
 rte_rand_max(uint64_t upper_bound);
 
 #ifdef __cplusplus
diff --git a/lib/librte_eal/common/include/rte_service.h b/lib/librte_eal/common/include/rte_service.h
index bf25aec..8b4de55 100644
--- a/lib/librte_eal/common/include/rte_service.h
+++ b/lib/librte_eal/common/include/rte_service.h
@@ -178,7 +178,8 @@ int32_t rte_service_map_lcore_set(uint32_t service_id, uint32_t lcore,
  * @retval 0 Service is not running on any lcore
  * @retval -EINVAL Invalid service id
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_service_may_be_active(uint32_t id);
 
 /**
@@ -401,7 +402,8 @@ int32_t rte_service_attr_get(uint32_t id, uint32_t attr_id,
  *         -EINVAL Invalid lcore, attr_id or attr_value was NULL.
  *         -ENOTSUP lcore is not a service core.
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 			   uint64_t *attr_value);
 
@@ -416,7 +418,8 @@ int32_t rte_service_attr_get(uint32_t id, uint32_t attr_id,
  *         -EINVAL Invalid service id provided
  *         -ENOTSUP lcore is not a service core.
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_service_lcore_attr_reset_all(uint32_t lcore);
 
 #ifdef __cplusplus
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 50c6936..c852126 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -1453,7 +1453,8 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  *   Next port id of the device, possibly port_id_start,
  *   RTE_MAX_ETHPORTS if there is none.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_eth_find_next_of(uint16_t port_id_start,
 		const struct rte_device *parent);
 
@@ -1484,7 +1485,8 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  *   Next sibling port id, possibly port_id_start or ref_port_id itself,
  *   RTE_MAX_ETHPORTS if there is none.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_eth_find_next_sibling(uint16_t port_id_start,
 		uint16_t ref_port_id);
 
@@ -1516,7 +1518,8 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental rte_eth_dev_owner_new(uint64_t *owner_id);
+__rte_experimental
+int rte_eth_dev_owner_new(uint64_t *owner_id);
 
 /**
  * @warning
@@ -1531,7 +1534,8 @@ uint64_t rte_eth_find_next_owned_by(uint16_t port_id,
  * @return
  *  Negative errno value on error, 0 on success.
  */
-int __rte_experimental rte_eth_dev_owner_set(const uint16_t port_id,
+__rte_experimental
+int rte_eth_dev_owner_set(const uint16_t port_id,
 		const struct rte_eth_dev_owner *owner);
 
 /**
@@ -1547,7 +1551,8 @@ int __rte_experimental rte_eth_dev_owner_set(const uint16_t port_id,
  * @return
  *  0 on success, negative errno value on error.
  */
-int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
+__rte_experimental
+int rte_eth_dev_owner_unset(const uint16_t port_id,
 		const uint64_t owner_id);
 
 /**
@@ -1559,7 +1564,8 @@ int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
  * @param	owner_id
  *  The owner identifier.
  */
-void __rte_experimental rte_eth_dev_owner_delete(const uint64_t owner_id);
+__rte_experimental
+void rte_eth_dev_owner_delete(const uint64_t owner_id);
 
 /**
  * @warning
@@ -1574,7 +1580,8 @@ int __rte_experimental rte_eth_dev_owner_unset(const uint16_t port_id,
  * @return
  *  0 on success, negative errno value on error..
  */
-int __rte_experimental rte_eth_dev_owner_get(const uint16_t port_id,
+__rte_experimental
+int rte_eth_dev_owner_get(const uint16_t port_id,
 		struct rte_eth_dev_owner *owner);
 
 /**
@@ -1700,7 +1707,8 @@ int rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_queue,
  * @return
  *   1 when the Ethernet device is removed, otherwise 0.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_is_removed(uint16_t port_id);
 
 /**
@@ -2928,7 +2936,8 @@ int rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id,
  *           successful.
  *   - (-1) on error.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id);
 
 /**
@@ -3626,7 +3635,8 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
  *   - (-EIO) if device is removed.
  *   - others depends on the specific operations implementation.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_get_module_info(uint16_t port_id,
 			    struct rte_eth_dev_module_info *modinfo);
 
@@ -3648,7 +3658,8 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
  *   - (-EIO) if device is removed.
  *   - others depends on the specific operations implementation.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_get_module_eeprom(uint16_t port_id,
 			      struct rte_dev_eeprom_info *info);
 
@@ -3840,7 +3851,8 @@ int rte_eth_timesync_read_tx_timestamp(uint16_t port_id,
  *   - -ENODEV: The port ID is invalid.
  *   - -ENOTSUP: The function is not supported by the Ethernet driver.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_read_clock(uint16_t port_id, uint64_t *clock);
 
 /**
diff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h
index f227480..936ff8c 100644
--- a/lib/librte_ethdev/rte_ethdev_driver.h
+++ b/lib/librte_ethdev/rte_ethdev_driver.h
@@ -225,7 +225,8 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_switch_domain_alloc(uint16_t *domain_id);
 
 /**
@@ -243,7 +244,8 @@ int _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_switch_domain_free(uint16_t domain_id);
 
 /** Generic Ethernet device arguments  */
@@ -272,7 +274,8 @@ struct rte_eth_devargs {
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_devargs_parse(const char *devargs, struct rte_eth_devargs *eth_devargs);
 
 
@@ -304,7 +307,8 @@ typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_create(struct rte_device *device, const char *name,
 	size_t priv_data_size,
 	ethdev_bus_specific_init bus_specific_init, void *bus_init_params,
@@ -328,7 +332,8 @@ typedef int (*ethdev_bus_specific_init)(struct rte_eth_dev *ethdev,
  * @return
  *   Negative errno value on error, 0 on success.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_eth_dev_destroy(struct rte_eth_dev *ethdev, ethdev_uninit_t ethdev_uninit);
 
 #ifdef __cplusplus
diff --git a/lib/librte_ethdev/rte_flow_driver.h b/lib/librte_ethdev/rte_flow_driver.h
index 688f723..a035985 100644
--- a/lib/librte_ethdev/rte_flow_driver.h
+++ b/lib/librte_ethdev/rte_flow_driver.h
@@ -171,7 +171,8 @@ struct rte_flow_expand_rss {
  *
  *   -E2BIG: graph-depth @p graph is too deep.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_expand_rss(struct rte_flow_expand_rss *buf, size_t size,
 		    const struct rte_flow_item *pattern, uint64_t types,
 		    const struct rte_flow_expand_node graph[],
diff --git a/lib/librte_ethdev/rte_mtr.h b/lib/librte_ethdev/rte_mtr.h
index 88f1301..6ba7d18 100644
--- a/lib/librte_ethdev/rte_mtr.h
+++ b/lib/librte_ethdev/rte_mtr.h
@@ -438,7 +438,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_capabilities_get(uint16_t port_id,
 	struct rte_mtr_capabilities *cap,
 	struct rte_mtr_error *error);
@@ -461,7 +462,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_profile_add(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_meter_profile *profile,
@@ -482,7 +484,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_profile_delete(uint16_t port_id,
 	uint32_t meter_profile_id,
 	struct rte_mtr_error *error);
@@ -510,7 +513,8 @@ struct rte_mtr_error {
  *
  * @see enum rte_flow_action_type::RTE_FLOW_ACTION_TYPE_METER
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_create(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_params *params,
@@ -533,7 +537,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_destroy(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -560,7 +565,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_disable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -581,7 +587,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_enable(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_error *error);
@@ -600,7 +607,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_profile_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t meter_profile_id,
@@ -624,7 +632,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_meter_dscp_table_update(uint16_t port_id,
 	uint32_t mtr_id,
 	enum rte_color *dscp_table,
@@ -650,7 +659,8 @@ struct rte_mtr_error {
  * @return
  *   0 on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_policer_actions_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint32_t action_mask,
@@ -675,7 +685,8 @@ struct rte_mtr_error {
  *
  * @see enum rte_mtr_stats_type
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_stats_update(uint16_t port_id,
 	uint32_t mtr_id,
 	uint64_t stats_mask,
@@ -706,7 +717,8 @@ struct rte_mtr_error {
  *
  * @see enum rte_mtr_stats_type
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_mtr_stats_read(uint16_t port_id,
 	uint32_t mtr_id,
 	struct rte_mtr_stats *stats,
diff --git a/lib/librte_eventdev/rte_event_eth_rx_adapter.h b/lib/librte_eventdev/rte_event_eth_rx_adapter.h
index beab870..d1a11a1 100644
--- a/lib/librte_eventdev/rte_event_eth_rx_adapter.h
+++ b/lib/librte_eventdev/rte_event_eth_rx_adapter.h
@@ -413,7 +413,8 @@ int rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
  *  - 0: Success, retrieved successfully.
  *  - <0: Error code on failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_event_eth_rx_adapter_stats_get(uint8_t id,
 				struct rte_event_eth_rx_adapter_stats *stats);
 
@@ -466,7 +467,8 @@ int rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
  *  - 0: Success
  *  - <0: Error code on failure.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
 				uint16_t eth_dev_id,
 				rte_event_eth_rx_adapter_cb_fn cb_fn,
diff --git a/lib/librte_flow_classify/rte_flow_classify.h b/lib/librte_flow_classify/rte_flow_classify.h
index 01e88e5..74d1eca 100644
--- a/lib/librte_flow_classify/rte_flow_classify.h
+++ b/lib/librte_flow_classify/rte_flow_classify.h
@@ -155,7 +155,8 @@ struct rte_flow_classify_ipv4_5tuple_stats {
  * @return
  *   Handle to flow classifier instance on success or NULL otherwise
  */
-struct rte_flow_classifier * __rte_experimental
+__rte_experimental
+struct rte_flow_classifier *
 rte_flow_classifier_create(struct rte_flow_classifier_params *params);
 
 /**
@@ -166,7 +167,8 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_classifier_free(struct rte_flow_classifier *cls);
 
 /**
@@ -179,7 +181,8 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_classify_table_create(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_table_params *params);
 
@@ -200,7 +203,8 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   0 on success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_classify_validate(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -226,7 +230,8 @@ struct rte_flow_classifier * __rte_experimental
  * @return
  *   A valid handle in case of success, NULL otherwise.
  */
-struct rte_flow_classify_rule * __rte_experimental
+__rte_experimental
+struct rte_flow_classify_rule *
 rte_flow_classify_table_entry_add(struct rte_flow_classifier *cls,
 		const struct rte_flow_attr *attr,
 		const struct rte_flow_item pattern[],
@@ -244,7 +249,8 @@ struct rte_flow_classify_rule * __rte_experimental
  * @return
  *   0 on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_classify_table_entry_delete(struct rte_flow_classifier *cls,
 		struct rte_flow_classify_rule *rule);
 
@@ -265,7 +271,8 @@ struct rte_flow_classify_rule * __rte_experimental
  * @return
  *   0 on success, error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_flow_classifier_query(struct rte_flow_classifier *cls,
 		struct rte_mbuf **pkts,
 		const uint16_t nb_pkts,
diff --git a/lib/librte_hash/rte_hash.h b/lib/librte_hash/rte_hash.h
index 4432aef..0d73370 100644
--- a/lib/librte_hash/rte_hash.h
+++ b/lib/librte_hash/rte_hash.h
@@ -366,7 +366,8 @@ struct rte_hash *
  *   - 0 if freed successfully
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_hash_free_key_with_position(const struct rte_hash *h,
 				const int32_t position);
 
diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h
index 2273f38..0c0d95f 100644
--- a/lib/librte_ip_frag/rte_ip_frag.h
+++ b/lib/librte_ip_frag/rte_ip_frag.h
@@ -348,7 +348,8 @@ void rte_ip_frag_free_death_row(struct rte_ip_frag_death_row *dr,
  * @param tms
  *   Current timestamp
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, uint64_t tms);
 
diff --git a/lib/librte_ipsec/rte_ipsec.h b/lib/librte_ipsec/rte_ipsec.h
index ff1ec80..f3b1f93 100644
--- a/lib/librte_ipsec/rte_ipsec.h
+++ b/lib/librte_ipsec/rte_ipsec.h
@@ -84,7 +84,8 @@ struct rte_ipsec_session {
  *   - Zero if operation completed successfully.
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_ipsec_session_prepare(struct rte_ipsec_session *ss);
 
 /**
@@ -108,7 +109,8 @@ struct rte_ipsec_session {
  * @return
  *   Number of successfully processed packets, with error code set in rte_errno.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_ipsec_pkt_crypto_prepare(const struct rte_ipsec_session *ss,
 	struct rte_mbuf *mb[], struct rte_crypto_op *cop[], uint16_t num)
 {
@@ -138,7 +140,8 @@ struct rte_ipsec_session {
  * @return
  *   Number of successfully processed packets, with error code set in rte_errno.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_ipsec_pkt_process(const struct rte_ipsec_session *ss, struct rte_mbuf *mb[],
 	uint16_t num)
 {
diff --git a/lib/librte_ipsec/rte_ipsec_group.h b/lib/librte_ipsec/rte_ipsec_group.h
index 740fa7c..47b33ca 100644
--- a/lib/librte_ipsec/rte_ipsec_group.h
+++ b/lib/librte_ipsec/rte_ipsec_group.h
@@ -42,7 +42,8 @@ struct rte_ipsec_group {
  * @return
  *   The pointer to the related *rte_ipsec_session* structure.
  */
-static inline __rte_experimental struct rte_ipsec_session *
+__rte_experimental
+static inline struct rte_ipsec_session *
 rte_ipsec_ses_from_crypto(const struct rte_crypto_op *cop)
 {
 	const struct rte_security_session *ss;
@@ -78,7 +79,8 @@ struct rte_ipsec_group {
  * @return
  *   Number of filled elements in *grp* array.
  */
-static inline uint16_t __rte_experimental
+__rte_experimental
+static inline uint16_t
 rte_ipsec_pkt_crypto_group(const struct rte_crypto_op *cop[],
 	struct rte_mbuf *mb[], struct rte_ipsec_group grp[], uint16_t num)
 {
diff --git a/lib/librte_ipsec/rte_ipsec_sa.h b/lib/librte_ipsec/rte_ipsec_sa.h
index fd9b3ed..b3f9b10 100644
--- a/lib/librte_ipsec/rte_ipsec_sa.h
+++ b/lib/librte_ipsec/rte_ipsec_sa.h
@@ -128,7 +128,8 @@ enum {
  * @return
  *   SA type value.
  */
-uint64_t __rte_experimental
+__rte_experimental
+uint64_t
 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa);
 
 /**
@@ -139,7 +140,8 @@ enum {
  *   - Actual size required for SA with given parameters.
  *   - -EINVAL if the parameters are invalid.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm);
 
 /**
@@ -155,7 +157,8 @@ enum {
  *   - -EINVAL if the parameters are invalid.
  *   - -ENOSPC if the size of the provided buffer is not big enough.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 	uint32_t size);
 
@@ -164,7 +167,8 @@ enum {
  * @param sa
  *   Pointer to SA object to de-initialize.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa);
 
 #ifdef __cplusplus
diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h
index e11a32b..5699a64 100644
--- a/lib/librte_kni/rte_kni.h
+++ b/lib/librte_kni/rte_kni.h
@@ -249,7 +249,8 @@ unsigned rte_kni_tx_burst(struct rte_kni *kni, struct rte_mbuf **mbufs,
  *  Previous link state == linkdown: 0
  *  Previous link state == linkup: 1
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_kni_update_link(struct rte_kni *kni, unsigned int linkup);
 
 /**
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index 0d9fef0..b114fb0 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -866,7 +866,8 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The pointer of the mbuf buffer.
  */
-static inline char * __rte_experimental
+__rte_experimental
+static inline char *
 rte_mbuf_buf_addr(struct rte_mbuf *mb, struct rte_mempool *mp)
 {
 	return (char *)mb + sizeof(*mb) + rte_pktmbuf_priv_size(mp);
@@ -883,10 +884,18 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The pointer of the beginning of the mbuf data.
  */
-static inline char * __rte_experimental
-rte_mbuf_data_addr_default(struct rte_mbuf *mb)
+__rte_experimental
+static inline char *
+rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
 {
+	/* gcc complains about calling this experimental function even
+	 * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
+	 */
+#ifdef ALLOW_EXPERIMENTAL_API
 	return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
+#else
+	return NULL;
+#endif
 }
 
 /**
@@ -926,7 +935,8 @@ struct rte_mbuf_ext_shared_info {
  * @return
  *   The starting address of the private data area of the given mbuf.
  */
-static inline void * __rte_experimental
+__rte_experimental
+static inline void *
 rte_mbuf_to_priv(struct rte_mbuf *m)
 {
 	return RTE_PTR_ADD(m, sizeof(struct rte_mbuf));
diff --git a/lib/librte_meter/rte_meter.h b/lib/librte_meter/rte_meter.h
index 3e383d2..d69b118 100644
--- a/lib/librte_meter/rte_meter.h
+++ b/lib/librte_meter/rte_meter.h
@@ -140,7 +140,8 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
 	struct rte_meter_trtcm_rfc4115_params *params);
@@ -186,7 +187,8 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p);
 
@@ -293,7 +295,8 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    Color assigned to the current IP packet
  */
-static inline enum rte_color __rte_experimental
+__rte_experimental
+static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_blind_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -319,7 +322,8 @@ struct rte_meter_trtcm_rfc4115_params {
  * @return
  *    Color assigned to the current IP packet
  */
-static inline enum rte_color __rte_experimental
+__rte_experimental
+static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_aware_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -578,7 +582,8 @@ struct rte_meter_trtcm_rfc4115 {
 	return RTE_COLOR_GREEN;
 }
 
-static inline enum rte_color __rte_experimental
+__rte_experimental
+static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_blind_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -621,7 +626,8 @@ struct rte_meter_trtcm_rfc4115 {
 	return RTE_COLOR_RED;
 }
 
-static inline enum rte_color __rte_experimental
+__rte_experimental
+static inline enum rte_color
 rte_meter_trtcm_rfc4115_color_aware_check(
 	struct rte_meter_trtcm_rfc4115 *m,
 	struct rte_meter_trtcm_rfc4115_profile *p,
diff --git a/lib/librte_net/rte_arp.h b/lib/librte_net/rte_arp.h
index f17c529..ccb6875 100644
--- a/lib/librte_net/rte_arp.h
+++ b/lib/librte_net/rte_arp.h
@@ -63,7 +63,8 @@ struct rte_arp_hdr {
  * @return
  *   - RARP packet pointer on success, or NULL on error
  */
-struct rte_mbuf * __rte_experimental
+__rte_experimental
+struct rte_mbuf *
 rte_net_make_rarp_packet(struct rte_mempool *mpool,
 		const struct rte_ether_addr *mac);
 
diff --git a/lib/librte_net/rte_net.h b/lib/librte_net/rte_net.h
index 7088584..b83f8c1 100644
--- a/lib/librte_net/rte_net.h
+++ b/lib/librte_net/rte_net.h
@@ -51,7 +51,8 @@ struct rte_net_hdr_lens {
  *   Protocol that follows IPv6 header.
  *   -1 if an error occurs during mbuf parsing.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	int *frag);
 
diff --git a/lib/librte_pipeline/rte_port_in_action.h b/lib/librte_pipeline/rte_port_in_action.h
index 0a85e4e..d6b063c 100644
--- a/lib/librte_pipeline/rte_port_in_action.h
+++ b/lib/librte_pipeline/rte_port_in_action.h
@@ -172,7 +172,8 @@ struct rte_port_in_action_lb_params {
  * @return
  *   Input port action profile handle on success, NULL otherwise.
  */
-struct rte_port_in_action_profile * __rte_experimental
+__rte_experimental
+struct rte_port_in_action_profile *
 rte_port_in_action_profile_create(uint32_t socket_id);
 
 /**
@@ -183,7 +184,8 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_profile_free(struct rte_port_in_action_profile *profile);
 
 /**
@@ -201,7 +203,8 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_profile_action_register(
 	struct rte_port_in_action_profile *profile,
 	enum rte_port_in_action_type type,
@@ -223,7 +226,8 @@ struct rte_port_in_action_profile * __rte_experimental
  *
  * @see rte_port_in_action_create()
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_profile_freeze(struct rte_port_in_action_profile *profile);
 
 /**
@@ -245,7 +249,8 @@ struct rte_port_in_action_profile * __rte_experimental
  * @return
  *   Handle to input port action object on success, NULL on error.
  */
-struct rte_port_in_action * __rte_experimental
+__rte_experimental
+struct rte_port_in_action *
 rte_port_in_action_create(struct rte_port_in_action_profile *profile,
 	uint32_t socket_id);
 
@@ -257,7 +262,8 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_free(struct rte_port_in_action *action);
 
 /**
@@ -270,7 +276,8 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_params_get(struct rte_port_in_action *action,
 	struct rte_pipeline_port_in_params *params);
 
@@ -289,7 +296,8 @@ struct rte_port_in_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_port_in_action_apply(struct rte_port_in_action *action,
 	enum rte_port_in_action_type type,
 	void *action_params);
diff --git a/lib/librte_pipeline/rte_table_action.h b/lib/librte_pipeline/rte_table_action.h
index ef45a30..44041b5 100644
--- a/lib/librte_pipeline/rte_table_action.h
+++ b/lib/librte_pipeline/rte_table_action.h
@@ -823,7 +823,8 @@ struct rte_table_action_decap_params {
  * @return
  *   Table action profile handle on success, NULL otherwise.
  */
-struct rte_table_action_profile * __rte_experimental
+__rte_experimental
+struct rte_table_action_profile *
 rte_table_action_profile_create(struct rte_table_action_common_config *common);
 
 /**
@@ -834,7 +835,8 @@ struct rte_table_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_profile_free(struct rte_table_action_profile *profile);
 
 /**
@@ -852,7 +854,8 @@ struct rte_table_action_profile * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_profile_action_register(struct rte_table_action_profile *profile,
 	enum rte_table_action_type type,
 	void *action_config);
@@ -872,7 +875,8 @@ struct rte_table_action_profile * __rte_experimental
  *
  * @see rte_table_action_create()
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_profile_freeze(struct rte_table_action_profile *profile);
 
 /**
@@ -895,7 +899,8 @@ struct rte_table_action_profile * __rte_experimental
  *
  * @see rte_table_action_create()
  */
-struct rte_table_action * __rte_experimental
+__rte_experimental
+struct rte_table_action *
 rte_table_action_create(struct rte_table_action_profile *profile,
 	uint32_t socket_id);
 
@@ -907,7 +912,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_free(struct rte_table_action *action);
 
 /**
@@ -920,7 +926,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_table_params_get(struct rte_table_action *action,
 	struct rte_pipeline_table_params *params);
 
@@ -942,7 +949,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_apply(struct rte_table_action *action,
 	void *data,
 	enum rte_table_action_type type,
@@ -961,7 +969,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_dscp_table_update(struct rte_table_action *action,
 	uint64_t dscp_mask,
 	struct rte_table_action_dscp_table *table);
@@ -980,7 +989,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_meter_profile_add(struct rte_table_action *action,
 	uint32_t meter_profile_id,
 	struct rte_table_action_meter_profile *profile);
@@ -996,7 +1006,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_meter_profile_delete(struct rte_table_action *action,
 	uint32_t meter_profile_id);
 
@@ -1027,7 +1038,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_meter_read(struct rte_table_action *action,
 	void *data,
 	uint32_t tc_mask,
@@ -1053,7 +1065,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_ttl_read(struct rte_table_action *action,
 	void *data,
 	struct rte_table_action_ttl_counters *stats,
@@ -1078,7 +1091,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_stats_read(struct rte_table_action *action,
 	void *data,
 	struct rte_table_action_stats_counters *stats,
@@ -1098,7 +1112,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_table_action_time_read(struct rte_table_action *action,
 	void *data,
 	uint64_t *timestamp);
@@ -1113,7 +1128,8 @@ struct rte_table_action * __rte_experimental
  * @return
  *   The pointer to the session on success, NULL otherwise.
  */
-struct rte_cryptodev_sym_session *__rte_experimental
+__rte_experimental
+struct rte_cryptodev_sym_session *
 rte_table_action_crypto_sym_session_get(struct rte_table_action *action,
 	void *data);
 
diff --git a/lib/librte_power/rte_power_empty_poll.h b/lib/librte_power/rte_power_empty_poll.h
index 33f24e0..6ba0a37 100644
--- a/lib/librte_power/rte_power_empty_poll.h
+++ b/lib/librte_power/rte_power_empty_poll.h
@@ -142,14 +142,16 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_power_empty_poll_stat_init(struct ep_params **eptr, uint8_t *freq_tlb,
 		struct ep_policy *policy);
 
 /**
  * Free the resource hold by power management system.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_power_empty_poll_stat_free(void);
 
 /**
@@ -163,7 +165,8 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_power_empty_poll_stat_update(unsigned int lcore_id);
 
 /**
@@ -178,7 +181,8 @@ struct ep_policy {
  *  - 0 on success.
  *  - Negative on error.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_power_poll_stat_update(unsigned int lcore_id, uint8_t nb_pkt);
 
 /**
@@ -190,7 +194,8 @@ struct ep_policy {
  * @return
  *  Current lcore empty poll counter value.
  */
-uint64_t __rte_experimental
+__rte_experimental
+uint64_t
 rte_power_empty_poll_stat_fetch(unsigned int lcore_id);
 
 /**
@@ -202,7 +207,8 @@ struct ep_policy {
  * @return
  *  Current lcore valid poll counter value.
  */
-uint64_t __rte_experimental
+__rte_experimental
+uint64_t
 rte_power_poll_stat_fetch(unsigned int lcore_id);
 
 /**
@@ -213,7 +219,8 @@ struct ep_policy {
  * @param  arg
  *  The customized parameter
  */
-void  __rte_experimental
+__rte_experimental
+void
 rte_empty_poll_detection(struct rte_timer *tim, void *arg);
 
 #ifdef __cplusplus
diff --git a/lib/librte_rcu/rte_rcu_qsbr.h b/lib/librte_rcu/rte_rcu_qsbr.h
index 9727f49..53a5a71 100644
--- a/lib/librte_rcu/rte_rcu_qsbr.h
+++ b/lib/librte_rcu/rte_rcu_qsbr.h
@@ -122,7 +122,8 @@ struct rte_rcu_qsbr {
  *   Possible rte_errno codes are:
  *   - EINVAL - max_threads is 0
  */
-size_t __rte_experimental
+__rte_experimental
+size_t
 rte_rcu_qsbr_get_memsize(uint32_t max_threads);
 
 /**
@@ -143,7 +144,8 @@ struct rte_rcu_qsbr {
  *   - EINVAL - max_threads is 0 or 'v' is NULL.
  *
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads);
 
 /**
@@ -169,7 +171,8 @@ struct rte_rcu_qsbr {
  *   the QS variable. thread_id is a value between 0 and (max_threads - 1).
  *   'max_threads' is the parameter passed in 'rte_rcu_qsbr_init' API.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -190,7 +193,8 @@ struct rte_rcu_qsbr {
  *   Reader thread with this thread ID will stop reporting its quiescent
  *   state on the QS variable.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -221,7 +225,8 @@ struct rte_rcu_qsbr {
  *   Reader thread with this thread ID will report its quiescent state on
  *   the QS variable.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental
+static __rte_always_inline void
 rte_rcu_qsbr_thread_online(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -282,7 +287,8 @@ struct rte_rcu_qsbr {
  *   rte_rcu_qsbr_check API will not wait for the reader thread with
  *   this thread ID to report its quiescent state on the QS variable.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental
+static __rte_always_inline void
 rte_rcu_qsbr_thread_offline(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	RTE_ASSERT(v != NULL && thread_id < v->max_threads);
@@ -322,7 +328,8 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Reader thread id
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental
+static __rte_always_inline void
 rte_rcu_qsbr_lock(__rte_unused struct rte_rcu_qsbr *v,
 			__rte_unused unsigned int thread_id)
 {
@@ -358,7 +365,8 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Reader thread id
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental
+static __rte_always_inline void
 rte_rcu_qsbr_unlock(__rte_unused struct rte_rcu_qsbr *v,
 			__rte_unused unsigned int thread_id)
 {
@@ -391,7 +399,8 @@ struct rte_rcu_qsbr {
  *   - This is the token for this call of the API. This should be
  *     passed to rte_rcu_qsbr_check API.
  */
-static __rte_always_inline uint64_t __rte_experimental
+__rte_experimental
+static __rte_always_inline uint64_t
 rte_rcu_qsbr_start(struct rte_rcu_qsbr *v)
 {
 	uint64_t t;
@@ -423,7 +432,8 @@ struct rte_rcu_qsbr {
  * @param thread_id
  *   Update the quiescent state for the reader with this thread ID.
  */
-static __rte_always_inline void __rte_experimental
+__rte_experimental
+static __rte_always_inline void
 rte_rcu_qsbr_quiescent(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
 	uint64_t t;
@@ -578,7 +588,8 @@ struct rte_rcu_qsbr {
  *   - 1 if all reader threads have passed through specified number
  *     of quiescent states.
  */
-static __rte_always_inline int __rte_experimental
+__rte_experimental
+static __rte_always_inline int
 rte_rcu_qsbr_check(struct rte_rcu_qsbr *v, uint64_t t, bool wait)
 {
 	RTE_ASSERT(v != NULL);
@@ -610,7 +621,8 @@ struct rte_rcu_qsbr {
  *   on this QS variable (i.e. the calling thread is also part of the
  *   readside critical section). If not, pass RTE_QSBR_THRID_INVALID.
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id);
 
 /**
@@ -631,7 +643,8 @@ struct rte_rcu_qsbr {
  *   Possible rte_errno codes are:
  *   - EINVAL - NULL parameters are passed
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v);
 
 #ifdef __cplusplus
diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h
index 9c55a78..d61dda9 100644
--- a/lib/librte_sched/rte_sched.h
+++ b/lib/librte_sched/rte_sched.h
@@ -249,7 +249,8 @@ struct rte_sched_port *
  * @return
  *   0 upon success, error code otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_sched_port_pipe_profile_add(struct rte_sched_port *port,
 	struct rte_sched_pipe_params *params,
 	uint32_t *pipe_profile_id);
diff --git a/lib/librte_security/rte_security.h b/lib/librte_security/rte_security.h
index 76f54e0..bbdf4b0 100644
--- a/lib/librte_security/rte_security.h
+++ b/lib/librte_security/rte_security.h
@@ -346,7 +346,8 @@ struct rte_security_session *
  *  - On success returns 0
  *  - On failure return errno
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_security_session_update(struct rte_security_ctx *instance,
 			    struct rte_security_session *sess,
 			    struct rte_security_session_conf *conf);
@@ -414,7 +415,8 @@ struct rte_security_session *
  *  - On success, userdata
  *  - On failure, NULL
  */
-void * __rte_experimental
+__rte_experimental
+void *
 rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md);
 
 /**
@@ -501,7 +503,8 @@ struct rte_security_stats {
  *  - On success return 0
  *  - On failure errno
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_security_session_stats_get(struct rte_security_ctx *instance,
 			       struct rte_security_session *sess,
 			       struct rte_security_stats *stats);
diff --git a/lib/librte_stack/rte_stack.h b/lib/librte_stack/rte_stack.h
index 93c360c..27ddb19 100644
--- a/lib/librte_stack/rte_stack.h
+++ b/lib/librte_stack/rte_stack.h
@@ -112,7 +112,8 @@ struct rte_stack {
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 rte_stack_push(struct rte_stack *s, void * const *obj_table, unsigned int n)
 {
 	RTE_ASSERT(s != NULL);
@@ -139,7 +140,8 @@ struct rte_stack {
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 rte_stack_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	RTE_ASSERT(s != NULL);
@@ -162,7 +164,8 @@ struct rte_stack {
  * @return
  *   The number of used entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 rte_stack_count(struct rte_stack *s)
 {
 	RTE_ASSERT(s != NULL);
@@ -184,7 +187,8 @@ struct rte_stack {
  * @return
  *   The number of free entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 rte_stack_free_count(struct rte_stack *s)
 {
 	RTE_ASSERT(s != NULL);
@@ -222,7 +226,8 @@ struct rte_stack {
  *    - ENOMEM - insufficient memory to create the stack
  *    - ENAMETOOLONG - name size exceeds RTE_STACK_NAMESIZE
  */
-struct rte_stack *__rte_experimental
+__rte_experimental
+struct rte_stack *
 rte_stack_create(const char *name, unsigned int count, int socket_id,
 		 uint32_t flags);
 
@@ -235,7 +240,8 @@ struct rte_stack *__rte_experimental
  * @param s
  *   Stack to free
  */
-void __rte_experimental
+__rte_experimental
+void
 rte_stack_free(struct rte_stack *s);
 
 /**
@@ -252,7 +258,8 @@ struct rte_stack *__rte_experimental
  *    - ENOENT - Stack with name *name* not found.
  *    - EINVAL - *name* pointer is NULL.
  */
-struct rte_stack * __rte_experimental
+__rte_experimental
+struct rte_stack *
 rte_stack_lookup(const char *name);
 
 #ifdef __cplusplus
diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack_lf.h
index 518889a..f5581f0 100644
--- a/lib/librte_stack/rte_stack_lf.h
+++ b/lib/librte_stack/rte_stack_lf.h
@@ -23,7 +23,8 @@
  * @return
  *   Actual number of objects enqueued.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 __rte_stack_lf_push(struct rte_stack *s,
 		    void * const *obj_table,
 		    unsigned int n)
@@ -61,7 +62,8 @@
  * @return
  *   - Actual number of objects popped.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 __rte_stack_lf_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	struct rte_stack_lf_elem *first, *last = NULL;
diff --git a/lib/librte_stack/rte_stack_std.h b/lib/librte_stack/rte_stack_std.h
index 5dc9409..7142cbf 100644
--- a/lib/librte_stack/rte_stack_std.h
+++ b/lib/librte_stack/rte_stack_std.h
@@ -19,7 +19,8 @@
  * @return
  *   Actual number of objects pushed (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 __rte_stack_std_push(struct rte_stack *s, void * const *obj_table,
 		     unsigned int n)
 {
@@ -58,7 +59,8 @@
  * @return
  *   Actual number of objects popped (either 0 or *n*).
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 __rte_stack_std_pop(struct rte_stack *s, void **obj_table, unsigned int n)
 {
 	struct rte_stack_std *stack = &s->stack_std;
@@ -92,7 +94,8 @@
  * @return
  *   The number of used entries in the stack.
  */
-static __rte_always_inline unsigned int __rte_experimental
+__rte_experimental
+static __rte_always_inline unsigned int
 __rte_stack_std_count(struct rte_stack *s)
 {
 	return (unsigned int)s->stack_std.len;
diff --git a/lib/librte_table/rte_table_hash_func.h b/lib/librte_table/rte_table_hash_func.h
index 11ea5a9..350c795 100644
--- a/lib/librte_table/rte_table_hash_func.h
+++ b/lib/librte_table/rte_table_hash_func.h
@@ -14,7 +14,8 @@
 #include <rte_compat.h>
 #include <rte_common.h>
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_crc32_u64_generic(uint64_t crc, uint64_t value)
 {
 	int i;
@@ -52,7 +53,8 @@
 
 #endif
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key8(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -65,7 +67,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key16(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -83,7 +86,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key24(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -104,7 +108,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key32(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -129,7 +134,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key40(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -154,7 +160,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key48(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -180,7 +187,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key56(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
@@ -209,7 +217,8 @@
 	return crc0;
 }
 
-static inline uint64_t __rte_experimental
+__rte_experimental
+static inline uint64_t
 rte_table_hash_crc_key64(void *key, void *mask, __rte_unused uint32_t key_size,
 	uint64_t seed)
 {
diff --git a/lib/librte_telemetry/rte_telemetry.h b/lib/librte_telemetry/rte_telemetry.h
index 119db16..aedb318 100644
--- a/lib/librte_telemetry/rte_telemetry.h
+++ b/lib/librte_telemetry/rte_telemetry.h
@@ -31,7 +31,8 @@
  * @return
  *  -EALREADY if Telemetry is already initialised.
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_telemetry_init(void);
 
 /**
@@ -45,7 +46,8 @@
  * @return
  *  -EPERM on failure
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_telemetry_cleanup(void);
 
 /**
@@ -60,7 +62,8 @@
  * @return
  *  -1 on failure when the test has failed
  */
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_telemetry_selftest(void);
 
 #endif
diff --git a/lib/librte_telemetry/rte_telemetry_parser.h b/lib/librte_telemetry/rte_telemetry_parser.h
index b705194..28b808d 100644
--- a/lib/librte_telemetry/rte_telemetry_parser.h
+++ b/lib/librte_telemetry/rte_telemetry_parser.h
@@ -8,7 +8,8 @@
 #ifndef _RTE_TELEMETRY_PARSER_H_
 #define _RTE_TELEMETRY_PARSER_H_
 
-int32_t __rte_experimental
+__rte_experimental
+int32_t
 rte_telemetry_parse(struct telemetry_impl *telemetry, char *socket_rx_data);
 
 #endif
diff --git a/lib/librte_timer/rte_timer.h b/lib/librte_timer/rte_timer.h
index 2196934..1b0d5f6 100644
--- a/lib/librte_timer/rte_timer.h
+++ b/lib/librte_timer/rte_timer.h
@@ -147,7 +147,8 @@ struct rte_timer
  *   - 0: Success
  *   - -ENOSPC: maximum number of timer data instances already allocated
  */
-int __rte_experimental rte_timer_data_alloc(uint32_t *id_ptr);
+__rte_experimental
+int rte_timer_data_alloc(uint32_t *id_ptr);
 
 /**
  * @warning
@@ -162,7 +163,8 @@ struct rte_timer
  *   - 0: Success
  *   - -EINVAL: invalid timer data instance identifier
  */
-int __rte_experimental rte_timer_data_dealloc(uint32_t id);
+__rte_experimental
+int rte_timer_data_dealloc(uint32_t id);
 
 /**
  * Initialize the timer library.
@@ -187,7 +189,8 @@ struct rte_timer
  *
  * Free timer subsystem resources.
  */
-void __rte_experimental rte_timer_subsystem_finalize(void);
+__rte_experimental
+void rte_timer_subsystem_finalize(void);
 
 /**
  * Initialize a timer handle.
@@ -408,7 +411,8 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - (-1): Timer is in the RUNNING or CONFIG state.
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 		    uint64_t ticks, enum rte_timer_type type,
 		    unsigned int tim_lcore, rte_timer_cb_t fct, void *arg);
@@ -433,7 +437,8 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - (-1): The timer is in the RUNNING or CONFIG state.
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim);
 
 /**
@@ -469,7 +474,8 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_timer_alt_manage(uint32_t timer_data_id, unsigned int *poll_lcores,
 		     int n_poll_lcores, rte_timer_alt_manage_cb_t f);
 
@@ -501,7 +507,8 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 		   int nb_walk_lcores, rte_timer_stop_all_cb_t f, void *f_arg);
 
@@ -523,7 +530,8 @@ int rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
  *   - 0: success
  *   - -EINVAL: invalid timer_data_id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_timer_alt_dump_stats(uint32_t timer_data_id, FILE *f);
 
 #ifdef __cplusplus
diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h
index 51a9a7b..9a3deb3 100644
--- a/lib/librte_vhost/rte_vdpa.h
+++ b/lib/librte_vhost/rte_vdpa.h
@@ -100,7 +100,8 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr,
 		struct rte_vdpa_dev_ops *ops);
 
@@ -115,7 +116,8 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vdpa_unregister_device(int did);
 
 /**
@@ -129,7 +131,8 @@ struct rte_vdpa_device {
  * @return
  *  device id on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vdpa_find_device_id(struct rte_vdpa_dev_addr *addr);
 
 /**
@@ -143,7 +146,8 @@ struct rte_vdpa_device {
  * @return
  *  rte_vdpa_device on success, NULL on failure
  */
-struct rte_vdpa_device * __rte_experimental
+__rte_experimental
+struct rte_vdpa_device *
 rte_vdpa_get_device(int did);
 
 /**
@@ -155,7 +159,8 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  available vdpa device number
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vdpa_get_device_num(void);
 
 /**
@@ -171,7 +176,8 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_host_notifier_ctrl(int vid, bool enable);
 
 /**
@@ -191,6 +197,7 @@ struct rte_vdpa_device * __rte_experimental
  * @return
  *  number of synced used entries on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m);
 #endif /* _RTE_VDPA_H_ */
diff --git a/lib/librte_vhost/rte_vhost.h b/lib/librte_vhost/rte_vhost.h
index 338e47c..7fb1729 100644
--- a/lib/librte_vhost/rte_vhost.h
+++ b/lib/librte_vhost/rte_vhost.h
@@ -313,7 +313,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_attach_vdpa_device(const char *path, int did);
 
 /**
@@ -324,7 +325,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_detach_vdpa_device(const char *path);
 
 /**
@@ -335,7 +337,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  Device id, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_get_vdpa_device_id(const char *path);
 
 /**
@@ -403,7 +406,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_set_protocol_features(const char *path,
 		uint64_t protocol_features);
 
@@ -417,7 +421,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_get_protocol_features(const char *path,
 		uint64_t *protocol_features);
 
@@ -431,7 +436,8 @@ void rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num);
 
 /**
@@ -656,7 +662,8 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_get_log_base(int vid, uint64_t *log_base, uint64_t *log_size);
 
 /**
@@ -673,7 +680,8 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 		uint16_t *last_avail_idx, uint16_t *last_used_idx);
 
@@ -691,7 +699,8 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_set_vring_base(int vid, uint16_t queue_id,
 		uint16_t last_avail_idx, uint16_t last_used_idx);
 
@@ -707,7 +716,8 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  0 on success, -1 on failure
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_extern_callback_register(int vid,
 		struct rte_vhost_user_extern_ops const * const ops, void *ctx);
 
@@ -719,7 +729,8 @@ int rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
  * @return
  *  device id
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_get_vdpa_device_id(int vid);
 
 #ifdef __cplusplus
diff --git a/lib/librte_vhost/rte_vhost_crypto.h b/lib/librte_vhost/rte_vhost_crypto.h
index d08e0ff..d29871c 100644
--- a/lib/librte_vhost/rte_vhost_crypto.h
+++ b/lib/librte_vhost/rte_vhost_crypto.h
@@ -35,7 +35,8 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if the Vhost Crypto Instance is created successfully.
  *  Negative integer if otherwise
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 		struct rte_mempool *sess_pool,
 		struct rte_mempool *sess_priv_pool,
@@ -50,7 +51,8 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if the Vhost Crypto Instance is created successfully.
  *  Negative integer if otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_crypto_free(int vid);
 
 /**
@@ -64,7 +66,8 @@ enum rte_vhost_crypto_zero_copy {
  *  0 if completed successfully.
  *  Negative integer if otherwise.
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option);
 
 /**
@@ -84,7 +87,8 @@ enum rte_vhost_crypto_zero_copy {
  * @return
  *  The number of fetched and processed vhost crypto request operations.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 		struct rte_crypto_op **ops, uint16_t nb_ops);
 /**
@@ -105,7 +109,8 @@ enum rte_vhost_crypto_zero_copy {
  * @return
  *  The number of ops processed.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_vhost_crypto_finalize_requests(struct rte_crypto_op **ops,
 		uint16_t nb_ops, int *callfds, uint16_t *nb_callfds);
 
-- 
1.8.3.1


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

* Re: [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations David Marchand
@ 2019-06-29 16:13     ` Thomas Monjalon
  2019-06-29 16:39       ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: Thomas Monjalon @ 2019-06-29 16:13 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, nhorman, adrien.mazarguil, stephen

29/06/2019 13:58, David Marchand:
> Special mention for rte_mbuf_data_addr_default():
> 
> There is either a bug or a (not yet understood) issue with gcc.
> gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
> calls rte_mbuf_buf_addr() which itself is experimental.
> This results in a build warning when not accepting experimental apis
> from sources just including rte_mbuf.h.
> 
> For this specific case, we hide the call to rte_mbuf_buf_addr() under
> the ALLOW_EXPERIMENTAL_API flag.
[...]
> -static inline char * __rte_experimental
> -rte_mbuf_data_addr_default(struct rte_mbuf *mb)
> +__rte_experimental
> +static inline char *
> +rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
>  {
> +	/* gcc complains about calling this experimental function even
> +	 * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
> +	 */
> +#ifdef ALLOW_EXPERIMENTAL_API
>  	return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
> +#else
> +	return NULL;
> +#endif
>  }

Doxygen is confused by having __rte_unused at the end:

lib/librte_mbuf/rte_mbuf.h:876: warning:
	argument 'mb' of command @param is not found in the argument list of
	rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
lib/librte_mbuf/rte_mbuf.h:889: warning:
	The following parameters of
	rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
	are not documented:
		parameter '__rte_unused'

I move __rte_unused at the beginning while merging.



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

* Re: [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations
  2019-06-29 16:13     ` Thomas Monjalon
@ 2019-06-29 16:39       ` David Marchand
  2019-07-01 12:05         ` Aaron Conole
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-06-29 16:39 UTC (permalink / raw)
  To: Thomas Monjalon, Aaron Conole, Michael Santana
  Cc: dev, Neil Horman, Adrien Mazarguil, Stephen Hemminger

On Sat, Jun 29, 2019 at 6:14 PM Thomas Monjalon <thomas@monjalon.net> wrote:

> 29/06/2019 13:58, David Marchand:
> > Special mention for rte_mbuf_data_addr_default():
> >
> > There is either a bug or a (not yet understood) issue with gcc.
> > gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
> > calls rte_mbuf_buf_addr() which itself is experimental.
> > This results in a build warning when not accepting experimental apis
> > from sources just including rte_mbuf.h.
> >
> > For this specific case, we hide the call to rte_mbuf_buf_addr() under
> > the ALLOW_EXPERIMENTAL_API flag.
> [...]
> > -static inline char * __rte_experimental
> > -rte_mbuf_data_addr_default(struct rte_mbuf *mb)
> > +__rte_experimental
> > +static inline char *
> > +rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
> >  {
> > +     /* gcc complains about calling this experimental function even
> > +      * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
> > +      */
> > +#ifdef ALLOW_EXPERIMENTAL_API
> >       return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
> > +#else
> > +     return NULL;
> > +#endif
> >  }
>
> Doxygen is confused by having __rte_unused at the end:
>
> lib/librte_mbuf/rte_mbuf.h:876: warning:
>         argument 'mb' of command @param is not found in the argument list
> of
>         rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
> lib/librte_mbuf/rte_mbuf.h:889: warning:
>         The following parameters of
>         rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
>         are not documented:
>                 parameter '__rte_unused'
>
> I move __rte_unused at the beginning while merging.
>

Indeed.
Thanks for catching and fixing.


Consequently, could we have the documentation (html only?) generated in the
CI if it is not too time consuming.
WDYT Aaron, Michael?



-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
                     ` (9 preceding siblings ...)
  2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations David Marchand
@ 2019-06-29 17:06   ` Thomas Monjalon
  2019-07-01 14:15     ` Ferruh Yigit
  10 siblings, 1 reply; 43+ messages in thread
From: Thomas Monjalon @ 2019-06-29 17:06 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, nhorman, adrien.mazarguil, stephen

29/06/2019 13:58, David Marchand:
> Following the build error reported by Aaron [1], I noticed that some
> experimental functions could go unnoticed because of a gcc peculiarity.
> 
> To catch those, I went and added a new check on the object files to
> ensure that any experimental api flagged in the map files is really
> exported as such.
> 
> Then went with my previous idea of only adding the tags on the functions
> prototypes and enforcing it (a new check in checkpatches.sh).
> And finally enforcing that the __rte_experimental tag is always the first
> part of a function prototype which seems to work with both gcc and clang.

Applied, thanks



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

* Re: [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions
  2019-06-29  6:19         ` David Marchand
@ 2019-07-01  9:57           ` Laatz, Kevin
  0 siblings, 0 replies; 43+ messages in thread
From: Laatz, Kevin @ 2019-07-01  9:57 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, Thomas Monjalon

On 29/06/2019 07:19, David Marchand wrote:
> On Sat, Jun 29, 2019 at 7:57 AM David Marchand 
> <david.marchand@redhat.com <mailto:david.marchand@redhat.com>> wrote:
>
>     On Fri, Jun 28, 2019 at 9:20 PM David Marchand
>     <david.marchand@redhat.com <mailto:david.marchand@redhat.com>> wrote:
>
>
>         On Fri, Jun 28, 2019 at 5:57 PM Thomas Monjalon
>         <thomas@monjalon.net <mailto:thomas@monjalon.net>> wrote:
>
>             27/06/2019 13:33, David Marchand:
>             > We had some inconsistencies between functions prototypes
>             and actual
>             > definitions.
>             > Let's avoid this by only adding the experimental tag to
>             the prototypes.
>             > Tests with gcc and clang show it is enough.
>             >
>             > git grep -l __rte_experimental |grep \.c$ |while read
>             file; do
>             >       sed -i -e '/^__rte_experimental$/d' $file;
>             >       sed -i -e 's/ *__rte_experimental//' $file;
>             >       sed -i -e 's/__rte_experimental *//' $file;
>             > done
>
>             There is one miss:
>
>             rte_telemetry_parse is not flagged as experimental
>             but is listed in version map
>             Please add __rte_experimental to the definition of
>             rte_telemetry_parse
>
>
>         Not sure I get you.
>         How did you get this warning?
>
>
>     Ah ok, this library is disabled by default.
>     Another fix being cooked.
>
>     Expect a v2 maybe later today, but I still need an answer on which
>     approach we take :-)
>
>
> Reducing the CC: list.
>
> So, the reason why it is not flagged is that rte_telemetry_parser.h is 
> not included in rte_telemetry_parser.c.
> But then I wondered why we did not see it.
> rte_telemetry Makefile does not add WERROR_FLAGS in its CFLAGS.
> If I try to add it, we have an avalanche of warnings for trivial 
> things like symbol not marked as static, and a more bizarre "null" 
> string passed as a marker that something went bad.
>
> I will send the fix on the missing header as part of my series.
> But please Kevin, fix the rest of the warnings and add WERROR_FLAGS in 
> the lib Makefile.
>
We noticed this too and are working on a patch for this :-)

Thanks,

Kevin


> Thanks.
>
> -- 
> David Marchand

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

* Re: [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations
  2019-06-29 16:39       ` David Marchand
@ 2019-07-01 12:05         ` Aaron Conole
  2019-07-01 12:08           ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: Aaron Conole @ 2019-07-01 12:05 UTC (permalink / raw)
  To: David Marchand
  Cc: Thomas Monjalon, Michael Santana, dev, Neil Horman,
	Adrien Mazarguil, Stephen Hemminger

David Marchand <david.marchand@redhat.com> writes:

> On Sat, Jun 29, 2019 at 6:14 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
>  29/06/2019 13:58, David Marchand:
>  > Special mention for rte_mbuf_data_addr_default():
>  > 
>  > There is either a bug or a (not yet understood) issue with gcc.
>  > gcc won't drop this inline when unused and rte_mbuf_data_addr_default()
>  > calls rte_mbuf_buf_addr() which itself is experimental.
>  > This results in a build warning when not accepting experimental apis
>  > from sources just including rte_mbuf.h.
>  > 
>  > For this specific case, we hide the call to rte_mbuf_buf_addr() under
>  > the ALLOW_EXPERIMENTAL_API flag.
>  [...]
>  > -static inline char * __rte_experimental
>  > -rte_mbuf_data_addr_default(struct rte_mbuf *mb)
>  > +__rte_experimental
>  > +static inline char *
>  > +rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
>  >  {
>  > +     /* gcc complains about calling this experimental function even
>  > +      * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
>  > +      */
>  > +#ifdef ALLOW_EXPERIMENTAL_API
>  >       return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
>  > +#else
>  > +     return NULL;
>  > +#endif
>  >  }
>
>  Doxygen is confused by having __rte_unused at the end:
>
>  lib/librte_mbuf/rte_mbuf.h:876: warning:
>          argument 'mb' of command @param is not found in the argument list of
>          rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
>  lib/librte_mbuf/rte_mbuf.h:889: warning:
>          The following parameters of
>          rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
>          are not documented:
>                  parameter '__rte_unused'
>
>  I move __rte_unused at the beginning while merging.
>
> Indeed.
> Thanks for catching and fixing.
>
> Consequently, could we have the documentation (html only?) generated in the CI if it is not too time
> consuming.
> WDYT Aaron, Michael?

Just as a check that it will generate?  I think it's a good idea.

I am thinking that having it uploaded somewhere might be more involved,
but not sure.

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

* Re: [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations
  2019-07-01 12:05         ` Aaron Conole
@ 2019-07-01 12:08           ` David Marchand
  0 siblings, 0 replies; 43+ messages in thread
From: David Marchand @ 2019-07-01 12:08 UTC (permalink / raw)
  To: Aaron Conole
  Cc: Thomas Monjalon, Michael Santana, dev, Neil Horman,
	Adrien Mazarguil, Stephen Hemminger

On Mon, Jul 1, 2019 at 2:05 PM Aaron Conole <aconole@redhat.com> wrote:

> David Marchand <david.marchand@redhat.com> writes:
>
> > On Sat, Jun 29, 2019 at 6:14 PM Thomas Monjalon <thomas@monjalon.net>
> wrote:
> >
> >  29/06/2019 13:58, David Marchand:
> >  > Special mention for rte_mbuf_data_addr_default():
> >  >
> >  > There is either a bug or a (not yet understood) issue with gcc.
> >  > gcc won't drop this inline when unused and
> rte_mbuf_data_addr_default()
> >  > calls rte_mbuf_buf_addr() which itself is experimental.
> >  > This results in a build warning when not accepting experimental apis
> >  > from sources just including rte_mbuf.h.
> >  >
> >  > For this specific case, we hide the call to rte_mbuf_buf_addr() under
> >  > the ALLOW_EXPERIMENTAL_API flag.
> >  [...]
> >  > -static inline char * __rte_experimental
> >  > -rte_mbuf_data_addr_default(struct rte_mbuf *mb)
> >  > +__rte_experimental
> >  > +static inline char *
> >  > +rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
> >  >  {
> >  > +     /* gcc complains about calling this experimental function even
> >  > +      * when not using it. Hide it with ALLOW_EXPERIMENTAL_API.
> >  > +      */
> >  > +#ifdef ALLOW_EXPERIMENTAL_API
> >  >       return rte_mbuf_buf_addr(mb, mb->pool) + RTE_PKTMBUF_HEADROOM;
> >  > +#else
> >  > +     return NULL;
> >  > +#endif
> >  >  }
> >
> >  Doxygen is confused by having __rte_unused at the end:
> >
> >  lib/librte_mbuf/rte_mbuf.h:876: warning:
> >          argument 'mb' of command @param is not found in the argument
> list of
> >          rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
> >  lib/librte_mbuf/rte_mbuf.h:889: warning:
> >          The following parameters of
> >          rte_mbuf_data_addr_default(struct rte_mbuf *mb __rte_unused)
> >          are not documented:
> >                  parameter '__rte_unused'
> >
> >  I move __rte_unused at the beginning while merging.
> >
> > Indeed.
> > Thanks for catching and fixing.
> >
> > Consequently, could we have the documentation (html only?) generated in
> the CI if it is not too time
> > consuming.
> > WDYT Aaron, Michael?
>
> Just as a check that it will generate?  I think it's a good idea.
>


Just knowing it generates fine is enough.
If it fails, then we go and see what is wrong.
Saving each builds would be a loss of space because (hopefully) it usually
builds fine.


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-06-29 17:06   ` [dpdk-dev] [PATCH v2 00/10] experimental tags fixes Thomas Monjalon
@ 2019-07-01 14:15     ` Ferruh Yigit
  2019-07-01 14:36       ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: Ferruh Yigit @ 2019-07-01 14:15 UTC (permalink / raw)
  To: Thomas Monjalon, David Marchand
  Cc: dev, nhorman, adrien.mazarguil, stephen, Bruce Richardson

On 6/29/2019 6:06 PM, Thomas Monjalon wrote:
> 29/06/2019 13:58, David Marchand:
>> Following the build error reported by Aaron [1], I noticed that some
>> experimental functions could go unnoticed because of a gcc peculiarity.
>>
>> To catch those, I went and added a new check on the object files to
>> ensure that any experimental api flagged in the map files is really
>> exported as such.
>>
>> Then went with my previous idea of only adding the tags on the functions
>> prototypes and enforcing it (a new check in checkpatches.sh).
>> And finally enforcing that the __rte_experimental tag is always the first
>> part of a function prototype which seems to work with both gcc and clang.
> 
> Applied, thanks
> 


Getting an odd build error with "i686-native-linuxapp-icc" [1].
Beware of the "." at the end: "rte_flow_conv."

Objdump shows two symbols with one "." at the end and one without it [2].

And this seems not the problem of only experimental APIs [3]. But this is only
happening with "i686-native-linuxapp-icc".

Do you have any idea what is going on here?



[1]
Building i686-native-linuxapp-icc ...
rte_flow_conv. is flagged as experimental
but is not listed in version map
Please add rte_flow_conv. to the version map

rte_eth_dev_is_removed. is flagged as experimental
but is not listed in version map
Please add rte_eth_dev_is_removed. to the version map




[2]
$ objdump -x -j '.text.experimental' ./build/build/lib/librte_ethdev/rte_ethdev.o

./build/build/lib/librte_ethdev/rte_ethdev.o:     file format elf32-i386
./build/build/lib/librte_ethdev/rte_ethdev.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  4 .text.experimental 00001b70  00000000  00000000  0000e17d  2**4
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
SYMBOL TABLE:
00000000 l    d  .text.experimental     00000000 .text.experimental
00000000 g     F .text.experimental     00000090 rte_eth_find_next_of
00000090 g     F .text.experimental     000000d0 rte_eth_find_next_sibling
00000160 g     F .text.experimental     00000110 rte_eth_dev_owner_new
00000270 g     F .text.experimental     00000240 rte_eth_dev_owner_set
000004b0 g     F .text.experimental     000002c0 rte_eth_dev_owner_unset
00000770 g     F .text.experimental     000001b0 rte_eth_dev_owner_delete
00000920 g     F .text.experimental     00000190 rte_eth_dev_owner_get
00000ab0 g     F .text.experimental     000000e0 rte_eth_dev_rx_intr_ctl_q_get_fd
00000b90 g     F .text.experimental     000007d0 rte_eth_dev_create
00001360 g     F .text.experimental     000003a0 rte_eth_dev_destroy
00001700 g     F .text.experimental     000000e0 rte_eth_read_clock
000017e0 g     F .text.experimental     00000070 rte_eth_dev_get_module_info
00001850 g     F .text.experimental     00000070 rte_eth_dev_get_module_eeprom
000018c0 g     F .text.experimental     00000040 rte_eth_switch_domain_alloc
00001900 g     F .text.experimental     00000040 rte_eth_switch_domain_free
00001940 g     F .text.experimental     000001a0 rte_eth_devargs_parse
00001ae0 g     F .text.experimental     00000005 rte_eth_dev_is_removed
00001ae5 g     F .text.experimental     0000008b rte_eth_dev_is_removed.




[3]
objdump -x  ./build/build/lib/librte_ethdev/rte_ethdev.o | grep '\.$'
00002075 g     F .text  0000006b rte_eth_promiscuous_enable.
000020e5 g     F .text  0000005b rte_eth_promiscuous_get.
00002145 g     F .text  0000006b rte_eth_promiscuous_disable.
000021b5 g     F .text  0000006b rte_eth_allmulticast_enable.
00002225 g     F .text  0000005b rte_eth_allmulticast_get.
00002285 g     F .text  0000006b rte_eth_allmulticast_disable.
0000458d g     F .text  00000bc3 rte_eth_xstats_get_names_by_id.
00008109 g     F .text  00000147 rte_eth_dev_info_get.
00001ae5 g     F .text.experimental     0000008b rte_eth_dev_is_removed.
000043cf R_386_PC32        rte_eth_xstats_get_names_by_id.
00004406 R_386_PC32        rte_eth_xstats_get_names_by_id.

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-07-01 14:15     ` Ferruh Yigit
@ 2019-07-01 14:36       ` David Marchand
  2019-07-01 15:30         ` Ferruh Yigit
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-07-01 14:36 UTC (permalink / raw)
  To: Ferruh Yigit, Bruce Richardson
  Cc: Thomas Monjalon, dev, Neil Horman, Adrien Mazarguil, Stephen Hemminger

On Mon, Jul 1, 2019 at 4:15 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> On 6/29/2019 6:06 PM, Thomas Monjalon wrote:
> > 29/06/2019 13:58, David Marchand:
> >> Following the build error reported by Aaron [1], I noticed that some
> >> experimental functions could go unnoticed because of a gcc peculiarity.
> >>
> >> To catch those, I went and added a new check on the object files to
> >> ensure that any experimental api flagged in the map files is really
> >> exported as such.
> >>
> >> Then went with my previous idea of only adding the tags on the functions
> >> prototypes and enforcing it (a new check in checkpatches.sh).
> >> And finally enforcing that the __rte_experimental tag is always the
> first
> >> part of a function prototype which seems to work with both gcc and
> clang.
> >
> > Applied, thanks
> >
>
>
> Getting an odd build error with "i686-native-linuxapp-icc" [1].
> Beware of the "." at the end: "rte_flow_conv."
>
> Objdump shows two symbols with one "." at the end and one without it [2].
>
> And this seems not the problem of only experimental APIs [3]. But this is
> only
> happening with "i686-native-linuxapp-icc".
>
> Do you have any idea what is going on here?
>
>
Looked at rte_flow_conv, and I can not see anything special about it.

There might be a subtility in the way symbol names are chosen by ICC.
Can ICC guys look at this and give us some enlightment?


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-07-01 14:36       ` David Marchand
@ 2019-07-01 15:30         ` Ferruh Yigit
  2019-07-01 19:27           ` David Marchand
  0 siblings, 1 reply; 43+ messages in thread
From: Ferruh Yigit @ 2019-07-01 15:30 UTC (permalink / raw)
  To: David Marchand, Bruce Richardson
  Cc: Thomas Monjalon, dev, Neil Horman, Adrien Mazarguil,
	Stephen Hemminger, Harry Van Haaren

On 7/1/2019 3:36 PM, David Marchand wrote:
> 
> 
> On Mon, Jul 1, 2019 at 4:15 PM Ferruh Yigit <ferruh.yigit@intel.com
> <mailto:ferruh.yigit@intel.com>> wrote:
> 
>     On 6/29/2019 6:06 PM, Thomas Monjalon wrote:
>     > 29/06/2019 13:58, David Marchand:
>     >> Following the build error reported by Aaron [1], I noticed that some
>     >> experimental functions could go unnoticed because of a gcc peculiarity.
>     >>
>     >> To catch those, I went and added a new check on the object files to
>     >> ensure that any experimental api flagged in the map files is really
>     >> exported as such.
>     >>
>     >> Then went with my previous idea of only adding the tags on the functions
>     >> prototypes and enforcing it (a new check in checkpatches.sh).
>     >> And finally enforcing that the __rte_experimental tag is always the first
>     >> part of a function prototype which seems to work with both gcc and clang.
>     >
>     > Applied, thanks
>     >
> 
> 
>     Getting an odd build error with "i686-native-linuxapp-icc" [1].
>     Beware of the "." at the end: "rte_flow_conv."
> 
>     Objdump shows two symbols with one "." at the end and one without it [2].
> 
>     And this seems not the problem of only experimental APIs [3]. But this is only
>     happening with "i686-native-linuxapp-icc".
> 
>     Do you have any idea what is going on here?
> 
> 
> Looked at rte_flow_conv, and I can not see anything special about it.
> 
> There might be a subtility in the way symbol names are chosen by ICC.
> Can ICC guys look at this and give us some enlightment?

This is the sample disassembler of one of the "." functions [1], it looks like
this notation is used by compiler to prepend some code at the very begging of
the function, Harry (cc'ed) let me know this is may be security feature, not a
defect of compiler :)

So briefly, it looks like compiler can add this "." version of the symbols to
the ".text.experimental" section, I believe the solution is detect this notation
and handle it. What do you think?



[1]
00002070 <rte_eth_promiscuous_enable>:
    2070:       0f b7 44 24 04          movzwl 0x4(%esp),%eax

00002075 <rte_eth_promiscuous_enable.>:
    2075:       56                      push   %esi
    2076:       57                      push   %edi
    2077:       83 ec 14                sub    $0x14,%esp
    207a:       0f b7 c0                movzwl %ax,%eax
    207d:       83 f8 20                cmp    $0x20,%eax
    2080:       7d 14                   jge    2096
<rte_eth_promiscuous_enable.+0x21>
    2082:       8b f0                   mov    %eax,%esi
    2084:       8b f8                   mov    %eax,%edi
    2086:       c1 e6 06                shl    $0x6,%esi
    2089:       c1 e7 0d                shl    $0xd,%edi
    208c:       83 bc 3e 28 20 00 00    cmpl   $0x0,0x2028(%esi,%edi,1)
    2093:       00
    2094:       75 1c                   jne    20b2
<rte_eth_promiscuous_enable.+0x3d>
    2096:       50                      push   %eax
    2097:       68 00 00 00 00          push   $0x0
    209c:       ff 35 00 00 00 00       pushl  0x0
    20a2:       6a 04                   push   $0x4
    20a4:       e8 fc ff ff ff          call   20a5
<rte_eth_promiscuous_enable.+0x30>
    20a9:       83 c4 10                add    $0x10,%esp
....

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-07-01 15:30         ` Ferruh Yigit
@ 2019-07-01 19:27           ` David Marchand
  2019-07-01 21:12             ` Ferruh Yigit
  0 siblings, 1 reply; 43+ messages in thread
From: David Marchand @ 2019-07-01 19:27 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Bruce Richardson, Thomas Monjalon, dev, Neil Horman,
	Adrien Mazarguil, Stephen Hemminger, Harry Van Haaren

On Mon, Jul 1, 2019 at 5:30 PM Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> On 7/1/2019 3:36 PM, David Marchand wrote:
> >
> >
> > On Mon, Jul 1, 2019 at 4:15 PM Ferruh Yigit <ferruh.yigit@intel.com
> > <mailto:ferruh.yigit@intel.com>> wrote:
> >
> >     On 6/29/2019 6:06 PM, Thomas Monjalon wrote:
> >     > 29/06/2019 13:58, David Marchand:
> >     >> Following the build error reported by Aaron [1], I noticed that
> some
> >     >> experimental functions could go unnoticed because of a gcc
> peculiarity.
> >     >>
> >     >> To catch those, I went and added a new check on the object files
> to
> >     >> ensure that any experimental api flagged in the map files is
> really
> >     >> exported as such.
> >     >>
> >     >> Then went with my previous idea of only adding the tags on the
> functions
> >     >> prototypes and enforcing it (a new check in checkpatches.sh).
> >     >> And finally enforcing that the __rte_experimental tag is always
> the first
> >     >> part of a function prototype which seems to work with both gcc
> and clang.
> >     >
> >     > Applied, thanks
> >     >
> >
> >
> >     Getting an odd build error with "i686-native-linuxapp-icc" [1].
> >     Beware of the "." at the end: "rte_flow_conv."
> >
> >     Objdump shows two symbols with one "." at the end and one without it
> [2].
> >
> >     And this seems not the problem of only experimental APIs [3]. But
> this is only
> >     happening with "i686-native-linuxapp-icc".
> >
> >     Do you have any idea what is going on here?
> >
> >
> > Looked at rte_flow_conv, and I can not see anything special about it.
> >
> > There might be a subtility in the way symbol names are chosen by ICC.
> > Can ICC guys look at this and give us some enlightment?
>
> This is the sample disassembler of one of the "." functions [1], it looks
> like
> this notation is used by compiler to prepend some code at the very begging
> of
> the function, Harry (cc'ed) let me know this is may be security feature,
> not a
> defect of compiler :)
>
> So briefly, it looks like compiler can add this "." version of the symbols
> to
> the ".text.experimental" section, I believe the solution is detect this
> notation
> and handle it. What do you think?
>

Iiuc, we would skip the symbols finishing with a '.', is this all?


-- 
David Marchand

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

* Re: [dpdk-dev] [PATCH v2 00/10] experimental tags fixes
  2019-07-01 19:27           ` David Marchand
@ 2019-07-01 21:12             ` Ferruh Yigit
  0 siblings, 0 replies; 43+ messages in thread
From: Ferruh Yigit @ 2019-07-01 21:12 UTC (permalink / raw)
  To: David Marchand
  Cc: Bruce Richardson, Thomas Monjalon, dev, Neil Horman,
	Adrien Mazarguil, Stephen Hemminger, Harry Van Haaren

On 7/1/2019 8:27 PM, David Marchand wrote:
> 
> 
> On Mon, Jul 1, 2019 at 5:30 PM Ferruh Yigit <ferruh.yigit@intel.com
> <mailto:ferruh.yigit@intel.com>> wrote:
> 
>     On 7/1/2019 3:36 PM, David Marchand wrote:
>     >
>     >
>     > On Mon, Jul 1, 2019 at 4:15 PM Ferruh Yigit <ferruh.yigit@intel.com
>     <mailto:ferruh.yigit@intel.com>
>     > <mailto:ferruh.yigit@intel.com <mailto:ferruh.yigit@intel.com>>> wrote:
>     >
>     >     On 6/29/2019 6:06 PM, Thomas Monjalon wrote:
>     >     > 29/06/2019 13:58, David Marchand:
>     >     >> Following the build error reported by Aaron [1], I noticed that some
>     >     >> experimental functions could go unnoticed because of a gcc peculiarity.
>     >     >>
>     >     >> To catch those, I went and added a new check on the object files to
>     >     >> ensure that any experimental api flagged in the map files is really
>     >     >> exported as such.
>     >     >>
>     >     >> Then went with my previous idea of only adding the tags on the
>     functions
>     >     >> prototypes and enforcing it (a new check in checkpatches.sh).
>     >     >> And finally enforcing that the __rte_experimental tag is always the
>     first
>     >     >> part of a function prototype which seems to work with both gcc and
>     clang.
>     >     >
>     >     > Applied, thanks
>     >     >
>     >
>     >
>     >     Getting an odd build error with "i686-native-linuxapp-icc" [1].
>     >     Beware of the "." at the end: "rte_flow_conv."
>     >
>     >     Objdump shows two symbols with one "." at the end and one without it [2].
>     >
>     >     And this seems not the problem of only experimental APIs [3]. But this
>     is only
>     >     happening with "i686-native-linuxapp-icc".
>     >
>     >     Do you have any idea what is going on here?
>     >
>     >
>     > Looked at rte_flow_conv, and I can not see anything special about it.
>     >
>     > There might be a subtility in the way symbol names are chosen by ICC.
>     > Can ICC guys look at this and give us some enlightment?
> 
>     This is the sample disassembler of one of the "." functions [1], it looks like
>     this notation is used by compiler to prepend some code at the very begging of
>     the function, Harry (cc'ed) let me know this is may be security feature, not a
>     defect of compiler :)
> 
>     So briefly, it looks like compiler can add this "." version of the symbols to
>     the ".text.experimental" section, I believe the solution is detect this notation
>     and handle it. What do you think?
> 
> 
> Iiuc, we would skip the symbols finishing with a '.', is this all?
> 

yes

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

end of thread, other threads:[~2019-07-01 21:13 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-27 11:33 [dpdk-dev] [PATCH 0/9] experimental tags fixes David Marchand
2019-06-27 11:33 ` [dpdk-dev] [PATCH 1/9] eal: hide internal hotplug symbol David Marchand
2019-06-28 16:25   ` Stephen Hemminger
2019-06-27 11:33 ` [dpdk-dev] [PATCH 2/9] devargs: remove incorrect experimental tags David Marchand
2019-06-28 16:23   ` Stephen Hemminger
2019-06-27 11:33 ` [dpdk-dev] [PATCH 3/9] vfio: remove incorrect experimental tag David Marchand
2019-06-28 16:24   ` Stephen Hemminger
2019-06-27 11:33 ` [dpdk-dev] [PATCH 4/9] raw/dpaa2_qdma: " David Marchand
2019-06-27 11:33 ` [dpdk-dev] [PATCH 5/9] buildtools: detect discrepancies for experimental symbols David Marchand
2019-06-27 11:33 ` [dpdk-dev] [PATCH 6/9] net/atlantic: add missing experimental api tags David Marchand
2019-06-27 11:33 ` [dpdk-dev] [PATCH 7/9] mem: remove incorrect experimental tag on static symbol David Marchand
2019-06-27 11:33 ` [dpdk-dev] [PATCH 8/9] remove experimental tags from all symbol definitions David Marchand
2019-06-28 15:56   ` Thomas Monjalon
2019-06-28 19:20     ` David Marchand
2019-06-29  5:57       ` David Marchand
2019-06-29  6:19         ` David Marchand
2019-07-01  9:57           ` Laatz, Kevin
2019-06-27 11:33 ` [dpdk-dev] [PATCH 9/9] enforce __rte_experimental at the start of symbol declarations David Marchand
2019-06-27 12:23   ` Adrien Mazarguil
2019-06-27 12:38     ` Gaëtan Rivet
2019-06-28 13:38       ` Thomas Monjalon
2019-06-28 19:58 ` [dpdk-dev] [PATCH 0/9] experimental tags fixes Neil Horman
2019-06-29 11:58 ` [dpdk-dev] [PATCH v2 00/10] " David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 01/10] eal: hide internal hotplug symbol David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 02/10] devargs: remove incorrect experimental tags David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 03/10] vfio: remove incorrect experimental tag David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 04/10] raw/dpaa2_qdma: " David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 05/10] buildtools: detect discrepancies for experimental symbols David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 06/10] net/atlantic: add missing experimental api tags David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 07/10] mem: remove incorrect experimental tag on static symbol David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 08/10] telemetry: add missing header include David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 09/10] remove experimental tags from all symbol definitions David Marchand
2019-06-29 11:58   ` [dpdk-dev] [PATCH v2 10/10] enforce __rte_experimental at the start of symbol declarations David Marchand
2019-06-29 16:13     ` Thomas Monjalon
2019-06-29 16:39       ` David Marchand
2019-07-01 12:05         ` Aaron Conole
2019-07-01 12:08           ` David Marchand
2019-06-29 17:06   ` [dpdk-dev] [PATCH v2 00/10] experimental tags fixes Thomas Monjalon
2019-07-01 14:15     ` Ferruh Yigit
2019-07-01 14:36       ` David Marchand
2019-07-01 15:30         ` Ferruh Yigit
2019-07-01 19:27           ` David Marchand
2019-07-01 21:12             ` Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).