[v3,1/2] common/mlx5: add rte internal tag and avoid comparison
Checks
Commit Message
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
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.
> -----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.
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.
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.
>
@@ -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\.
+
@@ -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);
@@ -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);
@@ -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);
@@ -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;