From: Ray Kinsella <mdr@ashroe.eu>
To: Ferruh Yigit <ferruh.yigit@intel.com>,
Neil Horman <nhorman@tuxdriver.com>,
Cristian Dumitrescu <cristian.dumitrescu@intel.com>,
Eelco Chaudron <echaudro@redhat.com>
Cc: dev@dpdk.org, Thomas Monjalon <thomas@monjalon.net>,
David Marchand <david.marchand@redhat.com>,
stable@dpdk.org, Luca Boccassi <bluca@debian.org>,
Bruce Richardson <bruce.richardson@intel.com>,
Ian Stokes <ian.stokes@intel.com>,
Andrzej Ostruszka <amo@semihalf.com>
Subject: Re: [dpdk-dev] [PATCH v2] meter: provide experimental alias of API for old apps
Date: Thu, 14 May 2020 09:44:36 +0100 [thread overview]
Message-ID: <359888f8-e36d-599f-5289-6704b5f68ce3@ashroe.eu> (raw)
In-Reply-To: <20200513180512.1247730-1-ferruh.yigit@intel.com>
On 13/05/2020 19:05, Ferruh Yigit wrote:
> On v20.02 some meter APIs have been matured and symbols moved from
> EXPERIMENTAL to DPDK_20.0.1 block.
>
> This can break the applications that were using these mentioned APIs on
> v19.11. Although there is no modification on the APIs and the action is
> positive and matures the APIs, the affect can be negative to
> applications.
>
> Since experimental APIs can change or go away without notice as part of
> contract, to prevent this negative affect that may occur by maturing
> experimental API, a process update already suggested, which enables
> aliasing without forcing it:
> https://patches.dpdk.org/patch/65863/
>
> This patch provides aliasing by duplicating the existing and versioned
> symbols as experimental.
>
> Since symbols moved from DPDK_20.0.1 to DPDK_21 block in the v20.05, the
> aliasing done between EXPERIMENTAL and DPDK_21.
>
> Also following changes done to enabling aliasing:
>
> Created VERSION_SYMBOL_EXPERIMENTAL helper macro.
>
> Updated the 'check-experimental-syms.sh' buildtool, which was
> complaining that the symbol is in EXPERIMENTAL tag in .map file but it
> is not in the .experimental section (__rte_experimental tag is missing).
> Updated tool in a way it won't complain if the symbol in the
> EXPERIMENTAL tag duplicated in some other block in .map file (versioned)
>
> Enabled function versioning for meson build for the library.
>
> Fixes: 30512af820fe ("meter: remove experimental flag from RFC4115 trTCM API")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Neil Horman <nhorman@tuxdriver.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Luca Boccassi <bluca@debian.org>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
> Cc: Ian Stokes <ian.stokes@intel.com>
> Cc: Eelco Chaudron <echaudro@redhat.com>
> Cc: Andrzej Ostruszka <amo@semihalf.com>
> Cc: Ray Kinsella <mdr@ashroe.eu>
>
> v2:
> * Commit log updated
> ---
> buildtools/check-symbols.sh | 3 +-
> .../include/rte_function_versioning.h | 4 ++
> lib/librte_meter/meson.build | 1 +
> lib/librte_meter/rte_meter.c | 59 ++++++++++++++++++-
> lib/librte_meter/rte_meter_version.map | 8 +++
> 5 files changed, 71 insertions(+), 4 deletions(-)
>
> diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
> index 3df57c322c..e407553a34 100755
> --- a/buildtools/check-symbols.sh
> +++ b/buildtools/check-symbols.sh
> @@ -26,7 +26,8 @@ ret=0
> for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
> do
> if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
> - ! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
> + ! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
> + $LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
> then
> cat >&2 <<- END_OF_MESSAGE
> $SYM is not flagged as experimental
> diff --git a/lib/librte_eal/include/rte_function_versioning.h b/lib/librte_eal/include/rte_function_versioning.h
> index b9f862d295..22ec5f9424 100644
> --- a/lib/librte_eal/include/rte_function_versioning.h
> +++ b/lib/librte_eal/include/rte_function_versioning.h
> @@ -46,6 +46,9 @@
> */
> #define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
Please add
/*
* VERSION_SYMBOL_EXPERIMENTAL
* Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
* function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
* to provide an alias to experimental for some time.
*/
I will take care of the updates to doc/guides/contributing/abi*.rst
> +
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
> +
> /*
> * BIND_DEFAULT_SYMBOL
> * Creates a symbol version entry instructing the linker to bind references to
> @@ -79,6 +82,7 @@
> * No symbol versioning in use
> */
> #define VERSION_SYMBOL(b, e, n)
> +#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
> #define __vsym
> #define BIND_DEFAULT_SYMBOL(b, e, n)
> #define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
> diff --git a/lib/librte_meter/meson.build b/lib/librte_meter/meson.build
> index 646fd4d43f..fce0368437 100644
> --- a/lib/librte_meter/meson.build
> +++ b/lib/librte_meter/meson.build
> @@ -3,3 +3,4 @@
>
> sources = files('rte_meter.c')
> headers = files('rte_meter.h')
> +use_function_versioning = true
> diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
> index da01429a8b..c600b05064 100644
> --- a/lib/librte_meter/rte_meter.c
> +++ b/lib/librte_meter/rte_meter.c
> @@ -9,6 +9,7 @@
> #include <rte_common.h>
> #include <rte_log.h>
> #include <rte_cycles.h>
> +#include <rte_function_versioning.h>
>
> #include "rte_meter.h"
>
> @@ -119,8 +120,8 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
> return 0;
> }
>
> -int
> -rte_meter_trtcm_rfc4115_profile_config(
> +static int
> +rte_meter_trtcm_rfc4115_profile_config_(
> struct rte_meter_trtcm_rfc4115_profile *p,
> struct rte_meter_trtcm_rfc4115_params *params)
> {
> @@ -145,7 +146,35 @@ rte_meter_trtcm_rfc4115_profile_config(
> }
>
> int
> -rte_meter_trtcm_rfc4115_config(
> +rte_meter_trtcm_rfc4115_profile_config_s(
> + struct rte_meter_trtcm_rfc4115_profile *p,
> + struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_s(
> + struct rte_meter_trtcm_rfc4115_profile *p,
> + struct rte_meter_trtcm_rfc4115_params *params)
> +{
> + return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_profile_config(struct rte_meter_trtcm_rfc4115_profile *p,
> + struct rte_meter_trtcm_rfc4115_params *params), rte_meter_trtcm_rfc4115_profile_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> + struct rte_meter_trtcm_rfc4115_profile *p,
> + struct rte_meter_trtcm_rfc4115_params *params);
> +int
> +rte_meter_trtcm_rfc4115_profile_config_e(
> + struct rte_meter_trtcm_rfc4115_profile *p,
> + struct rte_meter_trtcm_rfc4115_params *params)
> +{
> + return rte_meter_trtcm_rfc4115_profile_config_(p, params);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_profile_config, _e);
> +
> +static int
> +rte_meter_trtcm_rfc4115_config_(
> struct rte_meter_trtcm_rfc4115 *m,
> struct rte_meter_trtcm_rfc4115_profile *p)
> {
> @@ -160,3 +189,27 @@ rte_meter_trtcm_rfc4115_config(
>
> return 0;
> }
> +
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> + struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_s(struct rte_meter_trtcm_rfc4115 *m,
> + struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> + return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +BIND_DEFAULT_SYMBOL(rte_meter_trtcm_rfc4115_config, _s, 21);
> +MAP_STATIC_SYMBOL(int rte_meter_trtcm_rfc4115_config(struct rte_meter_trtcm_rfc4115 *m,
> + struct rte_meter_trtcm_rfc4115_profile *p), rte_meter_trtcm_rfc4115_config_s);
> +
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> + struct rte_meter_trtcm_rfc4115_profile *p);
> +int
> +rte_meter_trtcm_rfc4115_config_e(struct rte_meter_trtcm_rfc4115 *m,
> + struct rte_meter_trtcm_rfc4115_profile *p)
> +{
> + return rte_meter_trtcm_rfc4115_config_(m, p);
> +}
> +VERSION_SYMBOL_EXPERIMENTAL(rte_meter_trtcm_rfc4115_config, _e);
> diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
> index 2c7dadbcac..b493bcebe9 100644
> --- a/lib/librte_meter/rte_meter_version.map
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -20,4 +20,12 @@ DPDK_21 {
> rte_meter_trtcm_rfc4115_color_blind_check;
> rte_meter_trtcm_rfc4115_config;
> rte_meter_trtcm_rfc4115_profile_config;
> +
> } DPDK_20.0;
> +
> +EXPERIMENTAL {
> + global:
> +
> + rte_meter_trtcm_rfc4115_config;
> + rte_meter_trtcm_rfc4115_profile_config;
> +};
>
next prev parent reply other threads:[~2020-05-14 8:44 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-29 12:29 [dpdk-dev] [RFC] meter: fix ABI break due to experimental tag removal Ferruh Yigit
2020-01-29 14:46 ` Bruce Richardson
2020-01-29 14:57 ` Andrzej Ostruszka
2020-01-29 16:25 ` Ferruh Yigit
2020-01-29 16:30 ` Andrzej Ostruszka
2020-01-29 16:40 ` Ferruh Yigit
2020-01-29 16:43 ` [dpdk-dev] [RFC v2] " Ferruh Yigit
2020-01-29 17:49 ` Andrzej Ostruszka
2020-01-30 12:33 ` Thomas Monjalon
2020-01-30 12:57 ` Luca Boccassi
2020-01-30 14:17 ` Thomas Monjalon
2020-01-30 14:21 ` Luca Boccassi
2020-01-30 15:55 ` Thomas Monjalon
2020-01-30 16:04 ` Luca Boccassi
2020-01-30 16:15 ` Eelco Chaudron
2020-01-30 20:20 ` Thomas Monjalon
2020-02-03 11:10 ` Eelco Chaudron
2020-01-31 9:25 ` Ferruh Yigit
2020-05-13 12:11 ` [dpdk-dev] [PATCH] meter: provide experimental alias of API for old apps Ferruh Yigit
2020-05-13 16:30 ` Thomas Monjalon
2020-05-13 17:37 ` Ferruh Yigit
2020-05-13 18:05 ` [dpdk-dev] [PATCH v2] " Ferruh Yigit
2020-05-14 8:44 ` Ray Kinsella [this message]
2020-05-14 11:53 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2020-05-14 11:52 ` [dpdk-dev] [PATCH v3] " Ferruh Yigit
2020-05-14 15:10 ` Ray Kinsella
2020-05-14 15:32 ` David Marchand
2020-05-14 15:56 ` Ray Kinsella
2020-05-14 16:07 ` Ferruh Yigit
2020-05-14 16:30 ` David Marchand
2020-05-14 16:11 ` [dpdk-dev] [PATCH v4] " Ferruh Yigit
2020-05-15 13:31 ` Thomas Monjalon
2020-05-15 14:41 ` Ray Kinsella
2020-05-15 15:03 ` Ray Kinsella
2020-05-15 14:36 ` [dpdk-dev] [PATCH v5] abi: " Ray Kinsella
2020-05-15 15:01 ` [dpdk-dev] [PATCH v6] " Ray Kinsella
2020-05-16 11:53 ` Neil Horman
2020-05-18 17:18 ` Thomas Monjalon
2020-05-18 17:34 ` Ferruh Yigit
2020-05-18 17:51 ` Thomas Monjalon
2020-05-18 18:32 ` Ferruh Yigit
2020-05-19 14:13 ` Ray Kinsella
2020-05-19 14:14 ` Ray Kinsella
2020-05-17 19:52 ` [dpdk-dev] [PATCH v4] meter: " Dumitrescu, Cristian
2020-05-18 6:29 ` Ray Kinsella
2020-05-18 9:22 ` Thomas Monjalon
2020-05-18 9:30 ` Ray Kinsella
2020-05-18 10:46 ` Thomas Monjalon
2020-05-18 11:18 ` Dumitrescu, Cristian
2020-05-18 11:49 ` Ray Kinsella
2020-05-18 11:48 ` Ray Kinsella
2020-05-18 12:13 ` Thomas Monjalon
2020-05-18 13:06 ` Ray Kinsella
2020-05-18 18:30 ` [dpdk-dev] [PATCH v5] " Ferruh Yigit
2020-05-19 12:16 ` [dpdk-dev] [PATCH v6] " Ferruh Yigit
2020-05-19 13:26 ` Dumitrescu, Cristian
2020-05-19 14:24 ` Thomas Monjalon
2020-05-19 14:22 ` Ray Kinsella
2020-02-02 18:53 ` [dpdk-dev] [RFC] meter: fix ABI break due to experimental tag removal Neil Horman
2020-02-03 12:53 ` Ferruh Yigit
2020-02-04 12:02 ` Neil Horman
2020-02-05 10:04 ` Luca Boccassi
2020-02-05 11:32 ` Neil Horman
2020-02-13 17:40 ` Ray Kinsella
2020-02-14 2:40 ` Neil Horman
2020-02-14 11:36 ` Bruce Richardson
2020-02-14 20:48 ` Neil Horman
2020-02-14 21:52 ` Bruce Richardson
2020-02-15 13:43 ` Neil Horman
2020-02-17 14:23 ` Ray Kinsella
2020-02-17 15:37 ` Neil Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=359888f8-e36d-599f-5289-6704b5f68ce3@ashroe.eu \
--to=mdr@ashroe.eu \
--cc=amo@semihalf.com \
--cc=bluca@debian.org \
--cc=bruce.richardson@intel.com \
--cc=cristian.dumitrescu@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=echaudro@redhat.com \
--cc=ferruh.yigit@intel.com \
--cc=ian.stokes@intel.com \
--cc=nhorman@tuxdriver.com \
--cc=stable@dpdk.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).