From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3743EA04B5; Mon, 2 Dec 2019 16:21:01 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 580A61B9B7; Mon, 2 Dec 2019 16:21:00 +0100 (CET) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by dpdk.org (Postfix) with ESMTP id 1731A2BD8 for ; Mon, 2 Dec 2019 16:20:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575300057; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cnU3BelnhaPkaw+8UN9a6HJsPCqO4zecqVuPE4kqSUo=; b=DEEvzZR3EZ3u6Yf84MQwkz16RbUEUdrAp7S3pI2/4VOJrSyWvXwlhR0g+aDjC03wh1QQzq mzNH0q5oUtADq0Z8yN6FWAUZFyQeH5Z4BncBHugjK5JVMI32Y/S76lqjdgfNTzz56QSE9P UQTPflZ4OEvB33SXKSSfPyI+QN5ppOk= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-244-kH6p29LFM3iAcMASkXcRUw-1; Mon, 02 Dec 2019 10:20:54 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A18C380385B; Mon, 2 Dec 2019 15:20:51 +0000 (UTC) Received: from dmarchan.remote.csb (ovpn-205-88.brq.redhat.com [10.40.205.88]) by smtp.corp.redhat.com (Postfix) with ESMTP id AD2F1600CA; Mon, 2 Dec 2019 15:20:44 +0000 (UTC) From: David Marchand To: nhorman@tuxdriver.com, dev@dpdk.org Cc: thomas@monjalon.net, arybchenko@solarflare.com, mdr@ashroe.eu, stable@dpdk.org, John McNamara , Marko Kovacevic , Qiming Yang , Wenzhuo Lu , Nicolas Chautru , Declan Doherty , Adrien Mazarguil , Ferruh Yigit , Cristian Dumitrescu , Honnappa Nagarahalli Date: Mon, 2 Dec 2019 16:20:29 +0100 Message-Id: <20191202152030.7800-1-david.marchand@redhat.com> In-Reply-To: <20191125161314.18804-1-david.marchand@redhat.com> References: <20191125161314.18804-1-david.marchand@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-MC-Unique: kH6p29LFM3iAcMASkXcRUw-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Subject: [dpdk-dev] [PATCH] mark experimental variables X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" So far, we did not pay attention to direct access to variables but they are part of the API/ABI too and should be clearly identified. Introduce a __rte_experimental_var tag and mark existing exported variables. Fixes: a4bcd61de82d ("buildtools: add script to check experimental API expo= rts") Cc: stable@dpdk.org Signed-off-by: David Marchand --- Changelog since RFC: - s/resp\./or/ in documentation, - caught more variables by looking at the *COM* section, --- buildtools/check-experimental-syms.sh | 17 +++++++++++++++-- devtools/checkpatches.sh | 16 ++++++++++++---- doc/guides/contributing/abi_policy.rst | 7 ++++--- drivers/net/ice/rte_pmd_ice.h | 8 ++++++++ lib/librte_bbdev/rte_bbdev.h | 1 + lib/librte_cryptodev/rte_crypto_asym.h | 3 +++ lib/librte_eal/common/include/rte_compat.h | 5 +++++ lib/librte_ethdev/rte_flow.h | 17 +++++++++++++++++ lib/librte_port/rte_port_eventdev.h | 5 +++++ lib/librte_rcu/rte_rcu_qsbr.h | 1 + 10 files changed, 71 insertions(+), 9 deletions(-) diff --git a/buildtools/check-experimental-syms.sh b/buildtools/check-exper= imental-syms.sh index f3603e5ba..f3a2f92fb 100755 --- a/buildtools/check-experimental-syms.sh +++ b/buildtools/check-experimental-syms.sh @@ -34,13 +34,26 @@ do =09=09Please add __rte_experimental to the definition of $SYM =09=09END_OF_MESSAGE =09=09ret=3D1 +=09elif grep -qe "\(\.data\|\*COM\*\).*[[:space:]]$SYM$" $DUMPFILE && +=09=09! grep -q "\.data\.experimental.*[[:space:]]$SYM$" $DUMPFILE +=09then +=09=09cat >&2 <<- END_OF_MESSAGE +=09=09$SYM is not flagged as experimental +=09=09but is listed in version map +=09=09Please add __rte_experimental_var to the definition of $SYM +=09=09END_OF_MESSAGE +=09=09ret=3D1 =09fi done =20 # Filter out symbols suffixed with a . for icc for SYM in `awk '{ -=09if ($2 !=3D "l" && $4 =3D=3D ".text.experimental" && !($NF ~ /\.$/)) { -=09=09print $NF +=09if ($2 =3D=3D "l" || $NF ~ /\.$/) { +=09=09next; +=09} +=09if ($4 =3D=3D ".text.experimental" || +=09 $4 =3D=3D ".data.experimental") { +=09=09print $NF; =09} }' $DUMPFILE` do diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh index b16bace92..92b0ae40a 100755 --- a/devtools/checkpatches.sh +++ b/devtools/checkpatches.sh @@ -90,11 +90,19 @@ check_experimental_tags() { # =09=09=09=09"headers ("current_file")"; =09=09=09ret =3D 1; =09=09} -=09=09if ($1 !=3D "+__rte_experimental" || $2 !=3D "") { + +=09=09if (NF =3D=3D 1 && ($1 =3D=3D "+__rte_experimental" || +=09=09=09=09$1 =3D=3D "+__rte_experimental_var")) { +=09=09=09next; +=09=09} +=09=09if ($0 ~ "__rte_experimental_var") { +=09=09=09print "__rte_experimental_var must appear alone on the line" \ +=09=09=09=09" immediately preceding the type of a variable."; +=09=09} else { =09=09=09print "__rte_experimental must appear alone on the line" \ -=09=09=09=09" immediately preceding the return type of a function." -=09=09=09ret =3D 1; +=09=09=09=09" immediately preceding the return type of a function."; =09=09} +=09=09ret =3D 1; =09} =09END { =09=09exit ret; @@ -178,7 +186,7 @@ check () { # =09=09ret=3D1 =09fi =20 -=09! $verbose || printf '\nChecking __rte_experimental tags:\n' +=09! $verbose || printf '\nChecking __rte_experimental* tags:\n' =09report=3D$(check_experimental_tags "$tmpinput") =09if [ $? -ne 0 ] ; then =09=09$headline_printed || print_headline "$3" diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributi= ng/abi_policy.rst index 05ca95980..f933234d6 100644 --- a/doc/guides/contributing/abi_policy.rst +++ b/doc/guides/contributing/abi_policy.rst @@ -300,9 +300,10 @@ Note that marking an API as experimental is a multi st= ep process. To mark an API as experimental, the symbols which are desired to be export= ed must be placed in an EXPERIMENTAL version block in the corresponding libra= ries' version map script. -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``). +Secondly, the corresponding prototypes of those exported functions (or +variables) must be marked with the ``__rte_experimental`` (or +``__rte_experimental_var``) tag in the development header files (see +``rte_compat.h``). The DPDK build makefiles perform a check to ensure that the map file and t= he C code reflect the same list of symbols. This check can be circumvented by defining ``ALLOW_EXPERIMENTAL_API`` diff --git a/drivers/net/ice/rte_pmd_ice.h b/drivers/net/ice/rte_pmd_ice.h index e254db053..a5c80c43c 100644 --- a/drivers/net/ice/rte_pmd_ice.h +++ b/drivers/net/ice/rte_pmd_ice.h @@ -15,6 +15,8 @@ */ =20 #include <stdio.h> + +#include <rte_compat.h> #include <rte_mbuf.h> #include <rte_mbuf_dyn.h> =20 @@ -81,13 +83,19 @@ union rte_net_ice_proto_xtr_metadata { }; =20 /* Offset of mbuf dynamic field for protocol extraction data */ +__rte_experimental_var extern int rte_net_ice_dynfield_proto_xtr_metadata_offs; =20 /* Mask of mbuf dynamic flags for protocol extraction type */ +__rte_experimental_var extern uint64_t rte_net_ice_dynflag_proto_xtr_vlan_mask; +__rte_experimental_var extern uint64_t rte_net_ice_dynflag_proto_xtr_ipv4_mask; +__rte_experimental_var extern uint64_t rte_net_ice_dynflag_proto_xtr_ipv6_mask; +__rte_experimental_var extern uint64_t rte_net_ice_dynflag_proto_xtr_ipv6_flow_mask; +__rte_experimental_var extern uint64_t rte_net_ice_dynflag_proto_xtr_tcp_mask; =20 /** diff --git a/lib/librte_bbdev/rte_bbdev.h b/lib/librte_bbdev/rte_bbdev.h index 591fb7914..e044dec88 100644 --- a/lib/librte_bbdev/rte_bbdev.h +++ b/lib/librte_bbdev/rte_bbdev.h @@ -466,6 +466,7 @@ struct __rte_cache_aligned rte_bbdev { }; =20 /** @internal array of all devices */ +__rte_experimental_var extern struct rte_bbdev rte_bbdev_devices[]; =20 /** diff --git a/lib/librte_cryptodev/rte_crypto_asym.h b/lib/librte_cryptodev/= rte_crypto_asym.h index 0d34ce8df..d4e84910f 100644 --- a/lib/librte_cryptodev/rte_crypto_asym.h +++ b/lib/librte_cryptodev/rte_crypto_asym.h @@ -24,6 +24,7 @@ extern "C" { #include <rte_memory.h> #include <rte_mempool.h> #include <rte_common.h> +#include <rte_compat.h> =20 #include "rte_crypto_sym.h" =20 @@ -37,10 +38,12 @@ typedef struct rte_crypto_param_t { } rte_crypto_param; =20 /** asym xform type name strings */ +__rte_experimental_var extern const char * rte_crypto_asym_xform_strings[]; =20 /** asym operations type name strings */ +__rte_experimental_var extern const char * rte_crypto_asym_op_strings[]; =20 diff --git a/lib/librte_eal/common/include/rte_compat.h b/lib/librte_eal/co= mmon/include/rte_compat.h index 3eb33784b..3fd05179f 100644 --- a/lib/librte_eal/common/include/rte_compat.h +++ b/lib/librte_eal/common/include/rte_compat.h @@ -11,11 +11,16 @@ #define __rte_experimental \ __attribute__((deprecated("Symbol is not yet part of stable ABI"), \ section(".text.experimental"))) +#define __rte_experimental_var \ +__attribute__((deprecated("Symbol is not yet part of stable ABI"), \ +section(".data.experimental"))) =20 #else =20 #define __rte_experimental \ __attribute__((section(".text.experimental"))) +#define __rte_experimental_var \ +__attribute__((section(".data.experimental"))) =20 #endif =20 diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index 452d359a1..c8ea71acc 100644 --- a/lib/librte_ethdev/rte_flow.h +++ b/lib/librte_ethdev/rte_flow.h @@ -19,6 +19,7 @@ =20 #include <rte_arp.h> #include <rte_common.h> +#include <rte_compat.h> #include <rte_ether.h> #include <rte_icmp.h> #include <rte_ip.h> @@ -2531,9 +2532,11 @@ struct rte_flow_action_set_meta { }; =20 /* Mbuf dynamic field offset for metadata. */ +__rte_experimental_var extern int rte_flow_dynf_metadata_offs; =20 /* Mbuf dynamic field flag mask for metadata. */ +__rte_experimental_var extern uint64_t rte_flow_dynf_metadata_mask; =20 /* Mbuf dynamic field pointer for metadata. */ @@ -2548,14 +2551,24 @@ __rte_experimental static inline uint32_t rte_flow_dynf_metadata_get(struct rte_mbuf *m) { +#ifdef ALLOW_EXPERIMENTAL_API =09return *RTE_FLOW_DYNF_METADATA(m); +#else +=09RTE_SET_USED(m); +=09return 0; +#endif } =20 __rte_experimental static inline void rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v) { +#ifdef ALLOW_EXPERIMENTAL_API =09*RTE_FLOW_DYNF_METADATA(m) =3D v; +#else +=09RTE_SET_USED(m); +=09RTE_SET_USED(v); +#endif } =20 /* @@ -2800,7 +2813,11 @@ __rte_experimental static inline int rte_flow_dynf_metadata_avail(void) { +#ifdef ALLOW_EXPERIMENTAL_API =09return !!rte_flow_dynf_metadata_mask; +#else +=09return 0; +#endif } =20 /** diff --git a/lib/librte_port/rte_port_eventdev.h b/lib/librte_port/rte_port= _eventdev.h index acf88f4e9..59246e204 100644 --- a/lib/librte_port/rte_port_eventdev.h +++ b/lib/librte_port/rte_port_eventdev.h @@ -25,6 +25,8 @@ extern "C" { **/ =20 #include <stdint.h> + +#include <rte_compat.h> #include <rte_eventdev.h> =20 #include "rte_port.h" @@ -39,6 +41,7 @@ struct rte_port_eventdev_reader_params { }; =20 /** Eventdev_reader port operations. */ +__rte_experimental_var extern struct rte_port_in_ops rte_port_eventdev_reader_ops; =20 /** Eventdev_writer port parameters. */ @@ -63,6 +66,7 @@ struct rte_port_eventdev_writer_params { }; =20 /** Eventdev_writer port operations. */ +__rte_experimental_var extern struct rte_port_out_ops rte_port_eventdev_writer_ops; =20 /** Event_writer_nodrop port parameters. */ @@ -90,6 +94,7 @@ struct rte_port_eventdev_writer_nodrop_params { }; =20 /** Eventdev_writer_nodrop port operations. */ +__rte_experimental_var extern struct rte_port_out_ops rte_port_eventdev_writer_nodrop_ops; =20 #ifdef __cplusplus diff --git a/lib/librte_rcu/rte_rcu_qsbr.h b/lib/librte_rcu/rte_rcu_qsbr.h index 0b5585925..55c100673 100644 --- a/lib/librte_rcu/rte_rcu_qsbr.h +++ b/lib/librte_rcu/rte_rcu_qsbr.h @@ -35,6 +35,7 @@ extern "C" { #include <rte_debug.h> #include <rte_atomic.h> =20 +__rte_experimental_var extern int rte_rcu_log_type; =20 #if RTE_LOG_DP_LEVEL >=3D RTE_LOG_DEBUG --=20 2.23.0