[v3,1/2] common/mlx5: add rte internal tag and avoid comparison

Message ID 20200507085634.9589-1-ophirmu@mellanox.com (mailing list archive)
State Superseded, archived
Headers
Series [v3,1/2] common/mlx5: add rte internal tag and avoid comparison |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-nxp-Performance success Performance Testing PASS
ci/Intel-compilation fail Compilation issues
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing fail Testing issues

Commit Message

Ophir Munk May 7, 2020, 8:56 a.m. UTC
  Move mlx5 symbols in the map file to the INTERNAL section and add
__internal tags to their definitions.
Those symbols were exported in 20.02 and now (20.05) they are removed.
Avoid ABI comparison issues between 20.05/20.08 and 20.02 by adding the
suppress_file directive to libabigail.abignore file. This directive will
prevent loading mlx5 common symbols and no comparison will be performed.

Fixes: 7b4f1e6bd367 ("common/mlx5: introduce common library")

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
---
v3: add "Fixes" and "Acked-by" to commit message

 devtools/libabigail.abignore                    |  7 +++++++
 drivers/common/mlx5/mlx5_common.h               |  3 +++
 drivers/common/mlx5/mlx5_devx_cmds.h            | 23 +++++++++++++++++++++++
 drivers/common/mlx5/mlx5_nl.h                   | 18 +++++++++++++++++-
 drivers/common/mlx5/rte_common_mlx5_version.map |  6 +++---
 5 files changed, 53 insertions(+), 4 deletions(-)
  

Comments

Thomas Monjalon May 7, 2020, 10:23 a.m. UTC | #1
07/05/2020 10:56, Ophir Munk:
> Move mlx5 symbols in the map file to the INTERNAL section and add
> __internal tags to their definitions.
> Those symbols were exported in 20.02 and now (20.05) they are removed.
[...]
> --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> @@ -1,8 +1,10 @@
> -DPDK_21 {
> +INTERNAL {

I think you forgot the EXPERIMENTAL section.
In my opinion, everything should be in INTERNAL
and marked with __rte_internal in source code.
  
Ophir Munk May 7, 2020, 11:41 a.m. UTC | #2
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Thursday, May 7, 2020 1:23 PM
> To: Ophir Munk <ophirmu@mellanox.com>
> Cc: dev@dpdk.org; David Marchand <david.marchand@redhat.com>; Ray
> Kinsella <mdr@ashroe.eu>; Matan Azrad <matan@mellanox.com>; Raslan
> Darawsheh <rasland@mellanox.com>
> Subject: Re: [PATCH v3 1/2] common/mlx5: add rte internal tag and avoid
> comparison
> 
> 07/05/2020 10:56, Ophir Munk:
> > Move mlx5 symbols in the map file to the INTERNAL section and add
> > __internal tags to their definitions.
> > Those symbols were exported in 20.02 and now (20.05) they are removed.
> [...]
> > --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> > +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> > @@ -1,8 +1,10 @@
> > -DPDK_21 {
> > +INTERNAL {
> 
> I think you forgot the EXPERIMENTAL section.
> In my opinion, everything should be in INTERNAL and marked with
> __rte_internal in source code.
> 

I moved all EXPERIMENTAL to INTERNAL and sent V4.
A general question: what is the difference between EXPERIMENTAL and INTERNAL functionalities?
In the end both indicate to skip ABI check.
  
Thomas Monjalon May 7, 2020, 8:08 p.m. UTC | #3
07/05/2020 13:41, Ophir Munk:
> From: Thomas Monjalon <thomas@monjalon.net>
> > 07/05/2020 10:56, Ophir Munk:
> > > Move mlx5 symbols in the map file to the INTERNAL section and add
> > > __internal tags to their definitions.
> > > Those symbols were exported in 20.02 and now (20.05) they are removed.
> > [...]
> > > --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> > > +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> > > @@ -1,8 +1,10 @@
> > > -DPDK_21 {
> > > +INTERNAL {
> > 
> > I think you forgot the EXPERIMENTAL section.
> > In my opinion, everything should be in INTERNAL and marked with
> > __rte_internal in source code.
> > 
> 
> I moved all EXPERIMENTAL to INTERNAL and sent V4.
> A general question: what is the difference between EXPERIMENTAL and INTERNAL functionalities?
> In the end both indicate to skip ABI check. 

Regarding ABI check, yes the result is the same.
Regarding API, it is different:
INTERNAL is forbidden to applications,
while EXPERIMENTAL is to be used with cautious
as compatibility is not guaranteed.
  
Ophir Munk May 10, 2020, 8:14 a.m. UTC | #4
Thanks for clarifying the INTERNAL/EXPERIMENTAL difference.

> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Thursday, May 7, 2020 11:08 PM
> To: Ophir Munk <ophirmu@mellanox.com>
> Cc: dev@dpdk.org; David Marchand <david.marchand@redhat.com>; Ray
> Kinsella <mdr@ashroe.eu>; Matan Azrad <matan@mellanox.com>; Raslan
> Darawsheh <rasland@mellanox.com>
> Subject: Re: [PATCH v3 1/2] common/mlx5: add rte internal tag and avoid
> comparison
> 
> 07/05/2020 13:41, Ophir Munk:
> > From: Thomas Monjalon <thomas@monjalon.net>
> > > 07/05/2020 10:56, Ophir Munk:
> > > > Move mlx5 symbols in the map file to the INTERNAL section and add
> > > > __internal tags to their definitions.
> > > > Those symbols were exported in 20.02 and now (20.05) they are
> removed.
> > > [...]
> > > > --- a/drivers/common/mlx5/rte_common_mlx5_version.map
> > > > +++ b/drivers/common/mlx5/rte_common_mlx5_version.map
> > > > @@ -1,8 +1,10 @@
> > > > -DPDK_21 {
> > > > +INTERNAL {
> > >
> > > I think you forgot the EXPERIMENTAL section.
> > > In my opinion, everything should be in INTERNAL and marked with
> > > __rte_internal in source code.
> > >
> >
> > I moved all EXPERIMENTAL to INTERNAL and sent V4.
> > A general question: what is the difference between EXPERIMENTAL and
> INTERNAL functionalities?
> > In the end both indicate to skip ABI check.
> 
> Regarding ABI check, yes the result is the same.
> Regarding API, it is different:
> INTERNAL is forbidden to applications,
> while EXPERIMENTAL is to be used with cautious as compatibility is not
> guaranteed.
>
  

Patch

diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore
index 0326662..f22d540 100644
--- a/devtools/libabigail.abignore
+++ b/devtools/libabigail.abignore
@@ -35,3 +35,10 @@ 
         type_kind = enum
         name = rte_eth_event_type
         changed_enumerators = RTE_ETH_EVENT_MAX
+
+; These functions were moved from stable to internal.
+; Avoid loading the symbols and comparing them.
+; This is a temporary exception till DPDK 20.11
+[suppress_file]
+	file_name_regexp = ^librte_common_mlx5\.
+
diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h
index c2d688a..b37b820 100644
--- a/drivers/common/mlx5/mlx5_common.h
+++ b/drivers/common/mlx5/mlx5_common.h
@@ -196,6 +196,7 @@  check_cqe(volatile struct mlx5_cqe *cqe, const uint16_t cqes_n,
 	return MLX5_CQE_STATUS_SW_OWN;
 }
 
+__rte_internal
 int mlx5_dev_to_pci_addr(const char *dev_path, struct rte_pci_addr *pci_addr);
 
 #define MLX5_CLASS_ARG_NAME "class"
@@ -206,7 +207,9 @@  enum mlx5_class {
 	MLX5_CLASS_INVALID,
 };
 
+__rte_internal
 enum mlx5_class mlx5_class_get(struct rte_devargs *devargs);
+__rte_internal
 void mlx5_translate_port_name(const char *port_name_in,
 			      struct mlx5_switch_info *port_info_out);
 
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
index f7802e6..6dc27da 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.h
+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
@@ -300,52 +300,75 @@  struct mlx5_devx_qp_attr {
 
 /* mlx5_devx_cmds.c */
 
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_flow_counter_alloc(struct ibv_context *ctx,
 						       uint32_t bulk_sz);
+__rte_internal
 int mlx5_devx_cmd_destroy(struct mlx5_devx_obj *obj);
+__rte_internal
 int mlx5_devx_cmd_flow_counter_query(struct mlx5_devx_obj *dcs,
 				     int clear, uint32_t n_counters,
 				     uint64_t *pkts, uint64_t *bytes,
 				     uint32_t mkey, void *addr,
 				     struct mlx5dv_devx_cmd_comp *cmd_comp,
 				     uint64_t async_id);
+__rte_internal
 int mlx5_devx_cmd_query_hca_attr(struct ibv_context *ctx,
 				 struct mlx5_hca_attr *attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_mkey_create(struct ibv_context *ctx,
 					      struct mlx5_devx_mkey_attr *attr);
+__rte_internal
 int mlx5_devx_get_out_command_status(void *out);
+__rte_internal
 int mlx5_devx_cmd_qp_query_tis_td(struct ibv_qp *qp, uint32_t tis_num,
 				  uint32_t *tis_td);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_rq(struct ibv_context *ctx,
 				       struct mlx5_devx_create_rq_attr *rq_attr,
 				       int socket);
+__rte_internal
 int mlx5_devx_cmd_modify_rq(struct mlx5_devx_obj *rq,
 			    struct mlx5_devx_modify_rq_attr *rq_attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_tir(struct ibv_context *ctx,
 					   struct mlx5_devx_tir_attr *tir_attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_rqt(struct ibv_context *ctx,
 					   struct mlx5_devx_rqt_attr *rqt_attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_sq(struct ibv_context *ctx,
 				      struct mlx5_devx_create_sq_attr *sq_attr);
+__rte_internal
 int mlx5_devx_cmd_modify_sq(struct mlx5_devx_obj *sq,
 			    struct mlx5_devx_modify_sq_attr *sq_attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_tis(struct ibv_context *ctx,
 					   struct mlx5_devx_tis_attr *tis_attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_td(struct ibv_context *ctx);
+__rte_internal
 int mlx5_devx_cmd_flow_dump(void *fdb_domain, void *rx_domain, void *tx_domain,
 			    FILE *file);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_cq(struct ibv_context *ctx,
 					      struct mlx5_devx_cq_attr *attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_virtq(struct ibv_context *ctx,
 					     struct mlx5_devx_virtq_attr *attr);
+__rte_internal
 int mlx5_devx_cmd_modify_virtq(struct mlx5_devx_obj *virtq_obj,
 			       struct mlx5_devx_virtq_attr *attr);
+__rte_internal
 int mlx5_devx_cmd_query_virtq(struct mlx5_devx_obj *virtq_obj,
 			      struct mlx5_devx_virtq_attr *attr);
+__rte_internal
 struct mlx5_devx_obj *mlx5_devx_cmd_create_qp(struct ibv_context *ctx,
 					      struct mlx5_devx_qp_attr *attr);
+__rte_internal
 int mlx5_devx_cmd_modify_qp_state(struct mlx5_devx_obj *qp,
 				  uint32_t qp_st_mod_op, uint32_t remote_qp_id);
+__rte_internal
 int mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
 			     struct mlx5_devx_rqt_attr *rqt_attr);
 
diff --git a/drivers/common/mlx5/mlx5_nl.h b/drivers/common/mlx5/mlx5_nl.h
index 2c3f837..53021e1 100644
--- a/drivers/common/mlx5/mlx5_nl.h
+++ b/drivers/common/mlx5/mlx5_nl.h
@@ -28,35 +28,51 @@  struct mlx5_nl_vlan_vmwa_context {
 	struct mlx5_nl_vlan_dev vlan_dev[4096];
 };
 
-
+__rte_internal
 int mlx5_nl_init(int protocol);
+__rte_internal
 int mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,
 			 struct rte_ether_addr *mac, uint32_t index);
+__rte_internal
 int mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx,
 			    uint64_t *mac_own, struct rte_ether_addr *mac,
 			    uint32_t index);
+__rte_internal
 void mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
 			   struct rte_ether_addr *mac_addrs, int n);
+__rte_internal
 void mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,
 			    struct rte_ether_addr *mac_addrs, int n,
 			    uint64_t *mac_own);
+__rte_internal
 int mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable);
+__rte_internal
 int mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable);
+__rte_internal
 unsigned int mlx5_nl_portnum(int nl, const char *name);
+__rte_internal
 unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex);
+__rte_internal
 int mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
 			       struct rte_ether_addr *mac, int vf_index);
+__rte_internal
 int mlx5_nl_switch_info(int nl, unsigned int ifindex,
 			struct mlx5_switch_info *info);
 
+__rte_internal
 void mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,
 			      uint32_t ifindex);
+__rte_internal
 uint32_t mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,
 				  uint32_t ifindex, uint16_t tag);
+__rte_internal
 int mlx5_nl_devlink_family_id_get(int nlsk_fd);
+__rte_internal
 int mlx5_nl_enable_roce_get(int nlsk_fd, int family_id, const char *pci_addr,
 			    int *enable);
+__rte_internal
 int mlx5_nl_driver_reload(int nlsk_fd, int family_id, const char *pci_addr);
+__rte_internal
 int mlx5_nl_enable_roce_set(int nlsk_fd, int family_id, const char *pci_addr,
 			    int enable);
 
diff --git a/drivers/common/mlx5/rte_common_mlx5_version.map b/drivers/common/mlx5/rte_common_mlx5_version.map
index 564a9a7..61d1d4d 100644
--- a/drivers/common/mlx5/rte_common_mlx5_version.map
+++ b/drivers/common/mlx5/rte_common_mlx5_version.map
@@ -1,8 +1,10 @@ 
-DPDK_21 {
+INTERNAL {
 	global:
 
 	mlx5_class_get;
 
+	mlx5_dev_to_pci_addr;
+
 	mlx5_devx_cmd_create_cq;
 	mlx5_devx_cmd_create_qp;
 	mlx5_devx_cmd_create_rq;
@@ -27,8 +29,6 @@  DPDK_21 {
 	mlx5_devx_cmd_query_virtq;
 	mlx5_devx_get_out_command_status;
 
-	mlx5_dev_to_pci_addr;
-
 	mlx5_nl_allmulti;
 	mlx5_nl_devlink_family_id_get;
 	mlx5_nl_driver_reload;