a3acc3144a
This patch add support for various mempool ops config helper APIs. 1.User defined mempool ops 2.Platform detected HW mempool ops (active). 3.Best selection of mempool ops by looking into user defined, platform registered and compile time configured. Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com> Acked-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
97 lines
2.0 KiB
C
97 lines
2.0 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright 2018 NXP
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <rte_eal.h>
|
|
#include <rte_mbuf.h>
|
|
#include <rte_errno.h>
|
|
#include <rte_mbuf_pool_ops.h>
|
|
|
|
int
|
|
rte_mbuf_set_platform_mempool_ops(const char *ops_name)
|
|
{
|
|
const struct rte_memzone *mz;
|
|
|
|
if (strlen(ops_name) >= RTE_MEMPOOL_OPS_NAMESIZE)
|
|
return -ENAMETOOLONG;
|
|
|
|
mz = rte_memzone_lookup("mbuf_platform_pool_ops");
|
|
if (mz == NULL) {
|
|
mz = rte_memzone_reserve("mbuf_platform_pool_ops",
|
|
RTE_MEMPOOL_OPS_NAMESIZE, SOCKET_ID_ANY, 0);
|
|
if (mz == NULL)
|
|
return -rte_errno;
|
|
strncpy(mz->addr, ops_name, strlen(ops_name));
|
|
return 0;
|
|
} else if (strcmp(mz->addr, ops_name) == 0) {
|
|
return 0;
|
|
}
|
|
|
|
RTE_LOG(ERR, MBUF,
|
|
"%s is already registered as platform mbuf pool ops\n",
|
|
(char *)mz->addr);
|
|
return -EEXIST;
|
|
}
|
|
|
|
const char *
|
|
rte_mbuf_platform_mempool_ops(void)
|
|
{
|
|
const struct rte_memzone *mz;
|
|
|
|
mz = rte_memzone_lookup("mbuf_platform_pool_ops");
|
|
if (mz == NULL)
|
|
return NULL;
|
|
return mz->addr;
|
|
}
|
|
|
|
int
|
|
rte_mbuf_set_user_mempool_ops(const char *ops_name)
|
|
{
|
|
const struct rte_memzone *mz;
|
|
|
|
if (strlen(ops_name) >= RTE_MEMPOOL_OPS_NAMESIZE)
|
|
return -ENAMETOOLONG;
|
|
|
|
mz = rte_memzone_lookup("mbuf_user_pool_ops");
|
|
if (mz == NULL) {
|
|
mz = rte_memzone_reserve("mbuf_user_pool_ops",
|
|
RTE_MEMPOOL_OPS_NAMESIZE, SOCKET_ID_ANY, 0);
|
|
if (mz == NULL)
|
|
return -rte_errno;
|
|
}
|
|
|
|
strncpy(mz->addr, ops_name, strlen(ops_name));
|
|
return 0;
|
|
|
|
}
|
|
|
|
const char *
|
|
rte_mbuf_user_mempool_ops(void)
|
|
{
|
|
const struct rte_memzone *mz;
|
|
|
|
mz = rte_memzone_lookup("mbuf_user_pool_ops");
|
|
if (mz == NULL)
|
|
return rte_eal_mbuf_default_mempool_ops();
|
|
return mz->addr;
|
|
}
|
|
|
|
/* Return mbuf pool ops name */
|
|
const char *
|
|
rte_mbuf_best_mempool_ops(void)
|
|
{
|
|
/* User defined mempool ops takes the priority */
|
|
const char *best_ops = rte_mbuf_user_mempool_ops();
|
|
if (best_ops)
|
|
return best_ops;
|
|
|
|
/* Next choice is platform configured mempool ops */
|
|
best_ops = rte_mbuf_platform_mempool_ops();
|
|
if (best_ops)
|
|
return best_ops;
|
|
|
|
/* Last choice is to use the compile time config pool */
|
|
return RTE_MBUF_DEFAULT_MEMPOOL_OPS;
|
|
}
|