net/mlx: make rdma-core glue path configurable
Since rdma-core glue libraries are intrinsically tied to their respective PMDs and used as internal plug-ins, their presence in the default search path among other system libraries for the dynamic linker is not necessarily desired. This commit enables their installation and subsequent look-up at run time in RTE_EAL_PMD_PATH if configured to a nonempty string. This path can also be overridden by environment variables MLX[45]_GLUE_PATH. Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This commit is contained in:
parent
6d5df2eaf6
commit
f6242d0655
@ -97,6 +97,11 @@ These options can be modified in the ``.config`` file.
|
||||
``CONFIG_RTE_BUILD_SHARED_LIB`` disabled) and they won't show up as
|
||||
missing with ``ldd(1)``.
|
||||
|
||||
It works by moving these dependencies to a purpose-built rdma-core "glue"
|
||||
plug-in, which must either be installed in ``CONFIG_RTE_EAL_PMD_PATH`` if
|
||||
set, or in a standard location for the dynamic linker (e.g. ``/lib``) if
|
||||
left to the default empty string (``""``).
|
||||
|
||||
This option has no performance impact.
|
||||
|
||||
- ``CONFIG_RTE_LIBRTE_MLX4_DEBUG`` (default **n**)
|
||||
@ -113,6 +118,18 @@ These options can be modified in the ``.config`` file.
|
||||
|
||||
This value is always 1 for RX queues since they use a single MP.
|
||||
|
||||
Environment variables
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- ``MLX4_GLUE_PATH``
|
||||
|
||||
A list of directories in which to search for the rdma-core "glue" plug-in,
|
||||
separated by colons or semi-colons.
|
||||
|
||||
Only matters when compiled with ``CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS``
|
||||
enabled and most useful when ``CONFIG_RTE_EAL_PMD_PATH`` is also set,
|
||||
since ``LD_LIBRARY_PATH`` has no effect in this case.
|
||||
|
||||
Run-time configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -170,6 +170,11 @@ These options can be modified in the ``.config`` file.
|
||||
``CONFIG_RTE_BUILD_SHARED_LIB`` disabled) and they won't show up as
|
||||
missing with ``ldd(1)``.
|
||||
|
||||
It works by moving these dependencies to a purpose-built rdma-core "glue"
|
||||
plug-in, which must either be installed in ``CONFIG_RTE_EAL_PMD_PATH`` if
|
||||
set, or in a standard location for the dynamic linker (e.g. ``/lib``) if
|
||||
left to the default empty string (``""``).
|
||||
|
||||
This option has no performance impact.
|
||||
|
||||
- ``CONFIG_RTE_LIBRTE_MLX5_DEBUG`` (default **n**)
|
||||
@ -189,6 +194,15 @@ These options can be modified in the ``.config`` file.
|
||||
Environment variables
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- ``MLX5_GLUE_PATH``
|
||||
|
||||
A list of directories in which to search for the rdma-core "glue" plug-in,
|
||||
separated by colons or semi-colons.
|
||||
|
||||
Only matters when compiled with ``CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS``
|
||||
enabled and most useful when ``CONFIG_RTE_EAL_PMD_PATH`` is also set,
|
||||
since ``LD_LIBRARY_PATH`` has no effect in this case.
|
||||
|
||||
- ``MLX5_PMD_ENABLE_PADDING``
|
||||
|
||||
Enables HW packet padding in PCI bus transactions.
|
||||
|
@ -713,11 +713,52 @@ static struct rte_pci_driver mlx4_driver = {
|
||||
static int
|
||||
mlx4_glue_init(void)
|
||||
{
|
||||
const char *path[] = {
|
||||
/*
|
||||
* A basic security check is necessary before trusting
|
||||
* MLX4_GLUE_PATH, which may override RTE_EAL_PMD_PATH.
|
||||
*/
|
||||
(geteuid() == getuid() && getegid() == getgid() ?
|
||||
getenv("MLX4_GLUE_PATH") : NULL),
|
||||
RTE_EAL_PMD_PATH,
|
||||
};
|
||||
unsigned int i = 0;
|
||||
void *handle = NULL;
|
||||
void **sym;
|
||||
const char *dlmsg;
|
||||
|
||||
handle = dlopen(MLX4_GLUE, RTLD_LAZY);
|
||||
while (!handle && i != RTE_DIM(path)) {
|
||||
const char *end;
|
||||
size_t len;
|
||||
int ret;
|
||||
|
||||
if (!path[i]) {
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
end = strpbrk(path[i], ":;");
|
||||
if (!end)
|
||||
end = path[i] + strlen(path[i]);
|
||||
len = end - path[i];
|
||||
ret = 0;
|
||||
do {
|
||||
char name[ret + 1];
|
||||
|
||||
ret = snprintf(name, sizeof(name), "%.*s%s" MLX4_GLUE,
|
||||
(int)len, path[i],
|
||||
(!len || *(end - 1) == '/') ? "" : "/");
|
||||
if (ret == -1)
|
||||
break;
|
||||
if (sizeof(name) != (size_t)ret + 1)
|
||||
continue;
|
||||
DEBUG("looking for rdma-core glue as \"%s\"", name);
|
||||
handle = dlopen(name, RTLD_LAZY);
|
||||
break;
|
||||
} while (1);
|
||||
path[i] = end + 1;
|
||||
if (!*end)
|
||||
++i;
|
||||
}
|
||||
if (!handle) {
|
||||
rte_errno = EINVAL;
|
||||
dlmsg = dlerror();
|
||||
|
@ -1056,11 +1056,52 @@ static struct rte_pci_driver mlx5_driver = {
|
||||
static int
|
||||
mlx5_glue_init(void)
|
||||
{
|
||||
const char *path[] = {
|
||||
/*
|
||||
* A basic security check is necessary before trusting
|
||||
* MLX5_GLUE_PATH, which may override RTE_EAL_PMD_PATH.
|
||||
*/
|
||||
(geteuid() == getuid() && getegid() == getgid() ?
|
||||
getenv("MLX5_GLUE_PATH") : NULL),
|
||||
RTE_EAL_PMD_PATH,
|
||||
};
|
||||
unsigned int i = 0;
|
||||
void *handle = NULL;
|
||||
void **sym;
|
||||
const char *dlmsg;
|
||||
|
||||
handle = dlopen(MLX5_GLUE, RTLD_LAZY);
|
||||
while (!handle && i != RTE_DIM(path)) {
|
||||
const char *end;
|
||||
size_t len;
|
||||
int ret;
|
||||
|
||||
if (!path[i]) {
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
end = strpbrk(path[i], ":;");
|
||||
if (!end)
|
||||
end = path[i] + strlen(path[i]);
|
||||
len = end - path[i];
|
||||
ret = 0;
|
||||
do {
|
||||
char name[ret + 1];
|
||||
|
||||
ret = snprintf(name, sizeof(name), "%.*s%s" MLX5_GLUE,
|
||||
(int)len, path[i],
|
||||
(!len || *(end - 1) == '/') ? "" : "/");
|
||||
if (ret == -1)
|
||||
break;
|
||||
if (sizeof(name) != (size_t)ret + 1)
|
||||
continue;
|
||||
DEBUG("looking for rdma-core glue as \"%s\"", name);
|
||||
handle = dlopen(name, RTLD_LAZY);
|
||||
break;
|
||||
} while (1);
|
||||
path[i] = end + 1;
|
||||
if (!*end)
|
||||
++i;
|
||||
}
|
||||
if (!handle) {
|
||||
rte_errno = EINVAL;
|
||||
dlmsg = dlerror();
|
||||
|
Loading…
Reference in New Issue
Block a user