common/mlx5: move some getter functions from net driver

Getter functions such as: 'mlx5_os_get_ctx_device_name',
'mlx5_os_get_ctx_device_path', 'mlx5_os_get_dev_device_name',
'mlx5_os_get_umem_id' are implemented under net directory. To enable
additional devices (e.g. regex, vdpa) to access these getter functions
they are moved under common directory.

As part of this commit string sizes DEV_SYSFS_NAME_MAX and
DEV_SYSFS_PATH_MAX are increased by 1 to make sure that the destination
string size in strncpy() function is bigger than the source string size.
This update will avoid GCC version 8 error -Werror=stringop-truncation.

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Matan Azrad <matan@mellanox.com>
This commit is contained in:
Ophir Munk 2020-06-19 07:30:08 +00:00 committed by Ferruh Yigit
parent ac79183dc6
commit 391b8bcc81
7 changed files with 104 additions and 79 deletions

View File

@ -0,0 +1,98 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2020 Mellanox Technologies, Ltd
*/
#ifndef RTE_PMD_MLX5_COMMON_OS_H_
#define RTE_PMD_MLX5_COMMON_OS_H_
#include <stdio.h>
#include <rte_pci.h>
#include <rte_debug.h>
#include <rte_atomic.h>
#include <rte_log.h>
#include <rte_kvargs.h>
#include <rte_devargs.h>
#include "mlx5_autoconf.h"
#ifdef HAVE_INFINIBAND_VERBS_H
#include <infiniband/verbs.h>
#endif
#ifdef HAVE_INFINIBAND_MLX5DV_H
#include <infiniband/mlx5dv.h>
#endif
/**
* Get device name. Given an ibv_device pointer - return a
* pointer to the corresponding device name.
*
* @param[in] dev
* Pointer to ibv device.
*
* @return
* Pointer to device name if dev is valid, NULL otherwise.
*/
static inline const char *
mlx5_os_get_dev_device_name(void *dev)
{
if (!dev)
return NULL;
return ((struct ibv_device *)dev)->name;
}
/**
* Get ibv device name. Given an ibv_context pointer - return a
* pointer to the corresponding device name.
*
* @param[in] ctx
* Pointer to ibv context.
*
* @return
* Pointer to device name if ctx is valid, NULL otherwise.
*/
static inline const char *
mlx5_os_get_ctx_device_name(void *ctx)
{
if (!ctx)
return NULL;
return ((struct ibv_context *)ctx)->device->name;
}
/**
* Get ibv device path name. Given an ibv_context pointer - return a
* pointer to the corresponding device path name.
*
* @param[in] ctx
* Pointer to ibv context.
*
* @return
* Pointer to device path name if ctx is valid, NULL otherwise.
*/
static inline const char *
mlx5_os_get_ctx_device_path(void *ctx)
{
if (!ctx)
return NULL;
return ((struct ibv_context *)ctx)->device->ibdev_path;
}
/**
* Get umem id. Given a pointer to umem object of type
* 'struct mlx5dv_devx_umem *' - return its id.
*
* @param[in] umem
* Pointer to umem object.
*
* @return
* The umem id if umem is valid, 0 otherwise.
*/
static inline uint32_t
mlx5_os_get_umem_id(void *umem)
{
if (!umem)
return 0;
return ((struct mlx5dv_devx_umem *)umem)->umem_id;
}
#endif /* RTE_PMD_MLX5_COMMON_OS_H_ */

View File

@ -46,6 +46,7 @@
#include "mlx5_defs.h"
#include "mlx5.h"
#include "mlx5_common_os.h"
#include "mlx5_utils.h"
#include "mlx5_rxtx.h"
#include "mlx5_autoconf.h"
@ -65,79 +66,6 @@
#define MLX5DV_CONTEXT_FLAGS_CQE_128B_COMP (1 << 4)
#endif
/**
* Get device name. Given an ibv_device pointer - return a
* pointer to the corresponding device name.
*
* @param[in] dev
* Pointer to ibv device.
*
* @return
* Pointer to device name if dev is valid, NULL otherwise.
*/
const char *
mlx5_os_get_dev_device_name(void *dev)
{
if (!dev)
return NULL;
return ((struct ibv_device *)dev)->name;
}
/**
* Get ibv device name. Given an ibv_context pointer - return a
* pointer to the corresponding device name.
*
* @param[in] ctx
* Pointer to ibv context.
*
* @return
* Pointer to device name if ctx is valid, NULL otherwise.
*/
const char *
mlx5_os_get_ctx_device_name(void *ctx)
{
if (!ctx)
return NULL;
return ((struct ibv_context *)ctx)->device->name;
}
/**
* Get ibv device path name. Given an ibv_context pointer - return a
* pointer to the corresponding device path name.
*
* @param[in] ctx
* Pointer to ibv context.
*
* @return
* Pointer to device path name if ctx is valid, NULL otherwise.
*/
const char *
mlx5_os_get_ctx_device_path(void *ctx)
{
if (!ctx)
return NULL;
return ((struct ibv_context *)ctx)->device->ibdev_path;
}
/**
* Get umem id. Given a pointer to umem object of type
* 'struct mlx5dv_devx_umem *' - return its id.
*
* @param[in] umem
* Pointer to umem object.
*
* @return
* The umem id if umem is valid, 0 otherwise.
*/
uint32_t
mlx5_os_get_umem_id(void *umem)
{
if (!umem)
return 0;
return ((struct mlx5dv_devx_umem *)umem)->umem_id;
}
/**
* Get mlx5 device attributes. The glue function query_device_ex() is called
* with out parameter of type 'struct ibv_device_attr_ex *'. Then fill in mlx5

View File

@ -8,8 +8,8 @@
/* verb enumerations translations to local enums. */
enum {
DEV_SYSFS_NAME_MAX = IBV_SYSFS_NAME_MAX,
DEV_SYSFS_PATH_MAX = IBV_SYSFS_PATH_MAX
DEV_SYSFS_NAME_MAX = IBV_SYSFS_NAME_MAX + 1,
DEV_SYSFS_PATH_MAX = IBV_SYSFS_PATH_MAX + 1
};
#define PCI_DRV_FLAGS (RTE_PCI_DRV_INTR_LSC | \

View File

@ -38,6 +38,7 @@
#include <mlx5_glue.h>
#include <mlx5_devx_cmds.h>
#include <mlx5_common.h>
#include <mlx5_common_os.h>
#include <mlx5_common_mp.h>
#include "mlx5_defs.h"

View File

@ -932,10 +932,6 @@ void mlx5_flow_meter_detach(struct mlx5_flow_meter *fm);
/* mlx5_os.c */
struct rte_pci_driver;
const char *mlx5_os_get_ctx_device_name(void *ctx);
const char *mlx5_os_get_ctx_device_path(void *ctx);
const char *mlx5_os_get_dev_device_name(void *dev);
uint32_t mlx5_os_get_umem_id(void *umem);
int mlx5_os_get_dev_attr(void *ctx, struct mlx5_dev_attr *dev_attr);
void mlx5_os_free_shared_dr(struct mlx5_priv *priv);
int mlx5_os_open_device(const struct mlx5_dev_spawn_data *spawn,

View File

@ -36,6 +36,7 @@
#include "mlx5_defs.h"
#include "mlx5.h"
#include "mlx5_common_os.h"
#include "mlx5_flow.h"
#include "mlx5_rxtx.h"

View File

@ -34,6 +34,7 @@
#include "mlx5_defs.h"
#include "mlx5.h"
#include "mlx5_common_os.h"
#include "mlx5_rxtx.h"
#include "mlx5_utils.h"
#include "mlx5_autoconf.h"