mempool: get capabilities
Allow the mempool driver to advertise his pool capabilities. For that pupose, an api(rte_mempool_ops_get_capabilities) and ->get_capabilities() handler has been introduced. - Upon ->get_capabilities() call, mempool driver will advertise his capabilities to mempool flags param. Signed-off-by: Santosh Shukla <santosh.shukla@caviumnetworks.com> Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
f9caf23ba2
commit
3bbc406a87
@ -522,12 +522,25 @@ rte_mempool_populate_default(struct rte_mempool *mp)
|
|||||||
size_t size, total_elt_sz, align, pg_sz, pg_shift;
|
size_t size, total_elt_sz, align, pg_sz, pg_shift;
|
||||||
phys_addr_t paddr;
|
phys_addr_t paddr;
|
||||||
unsigned mz_id, n;
|
unsigned mz_id, n;
|
||||||
|
unsigned int mp_flags;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* mempool must not be populated */
|
/* mempool must not be populated */
|
||||||
if (mp->nb_mem_chunks != 0)
|
if (mp->nb_mem_chunks != 0)
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
|
|
||||||
|
/* Get mempool capabilities */
|
||||||
|
mp_flags = 0;
|
||||||
|
ret = rte_mempool_ops_get_capabilities(mp, &mp_flags);
|
||||||
|
if (ret == -ENOTSUP)
|
||||||
|
RTE_LOG(DEBUG, MEMPOOL, "get_capability not supported for %s\n",
|
||||||
|
mp->name);
|
||||||
|
else if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* update mempool capabilities */
|
||||||
|
mp->flags |= mp_flags;
|
||||||
|
|
||||||
if (rte_xen_dom0_supported()) {
|
if (rte_xen_dom0_supported()) {
|
||||||
pg_sz = RTE_PGSIZE_2M;
|
pg_sz = RTE_PGSIZE_2M;
|
||||||
pg_shift = rte_bsf32(pg_sz);
|
pg_shift = rte_bsf32(pg_sz);
|
||||||
|
@ -389,6 +389,12 @@ typedef int (*rte_mempool_dequeue_t)(struct rte_mempool *mp,
|
|||||||
*/
|
*/
|
||||||
typedef unsigned (*rte_mempool_get_count)(const struct rte_mempool *mp);
|
typedef unsigned (*rte_mempool_get_count)(const struct rte_mempool *mp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mempool capabilities.
|
||||||
|
*/
|
||||||
|
typedef int (*rte_mempool_get_capabilities_t)(const struct rte_mempool *mp,
|
||||||
|
unsigned int *flags);
|
||||||
|
|
||||||
/** Structure defining mempool operations structure */
|
/** Structure defining mempool operations structure */
|
||||||
struct rte_mempool_ops {
|
struct rte_mempool_ops {
|
||||||
char name[RTE_MEMPOOL_OPS_NAMESIZE]; /**< Name of mempool ops struct. */
|
char name[RTE_MEMPOOL_OPS_NAMESIZE]; /**< Name of mempool ops struct. */
|
||||||
@ -397,6 +403,10 @@ struct rte_mempool_ops {
|
|||||||
rte_mempool_enqueue_t enqueue; /**< Enqueue an object. */
|
rte_mempool_enqueue_t enqueue; /**< Enqueue an object. */
|
||||||
rte_mempool_dequeue_t dequeue; /**< Dequeue an object. */
|
rte_mempool_dequeue_t dequeue; /**< Dequeue an object. */
|
||||||
rte_mempool_get_count get_count; /**< Get qty of available objs. */
|
rte_mempool_get_count get_count; /**< Get qty of available objs. */
|
||||||
|
/**
|
||||||
|
* Get the mempool capabilities
|
||||||
|
*/
|
||||||
|
rte_mempool_get_capabilities_t get_capabilities;
|
||||||
} __rte_cache_aligned;
|
} __rte_cache_aligned;
|
||||||
|
|
||||||
#define RTE_MEMPOOL_MAX_OPS_IDX 16 /**< Max registered ops structs */
|
#define RTE_MEMPOOL_MAX_OPS_IDX 16 /**< Max registered ops structs */
|
||||||
@ -508,6 +518,23 @@ rte_mempool_ops_enqueue_bulk(struct rte_mempool *mp, void * const *obj_table,
|
|||||||
unsigned
|
unsigned
|
||||||
rte_mempool_ops_get_count(const struct rte_mempool *mp);
|
rte_mempool_ops_get_count(const struct rte_mempool *mp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal wrapper for mempool_ops get_capabilities callback.
|
||||||
|
*
|
||||||
|
* @param mp [in]
|
||||||
|
* Pointer to the memory pool.
|
||||||
|
* @param flags [out]
|
||||||
|
* Pointer to the mempool flags.
|
||||||
|
* @return
|
||||||
|
* - 0: Success; The mempool driver has advertised his pool capabilities in
|
||||||
|
* flags param.
|
||||||
|
* - -ENOTSUP - doesn't support get_capabilities ops (valid case).
|
||||||
|
* - Otherwise, pool create fails.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
rte_mempool_ops_get_capabilities(const struct rte_mempool *mp,
|
||||||
|
unsigned int *flags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal wrapper for mempool_ops free callback.
|
* @internal wrapper for mempool_ops free callback.
|
||||||
*
|
*
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
#include <rte_mempool.h>
|
#include <rte_mempool.h>
|
||||||
#include <rte_errno.h>
|
#include <rte_errno.h>
|
||||||
|
#include <rte_dev.h>
|
||||||
|
|
||||||
/* indirect jump table to support external memory pools. */
|
/* indirect jump table to support external memory pools. */
|
||||||
struct rte_mempool_ops_table rte_mempool_ops_table = {
|
struct rte_mempool_ops_table rte_mempool_ops_table = {
|
||||||
@ -85,6 +86,7 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h)
|
|||||||
ops->enqueue = h->enqueue;
|
ops->enqueue = h->enqueue;
|
||||||
ops->dequeue = h->dequeue;
|
ops->dequeue = h->dequeue;
|
||||||
ops->get_count = h->get_count;
|
ops->get_count = h->get_count;
|
||||||
|
ops->get_capabilities = h->get_capabilities;
|
||||||
|
|
||||||
rte_spinlock_unlock(&rte_mempool_ops_table.sl);
|
rte_spinlock_unlock(&rte_mempool_ops_table.sl);
|
||||||
|
|
||||||
@ -123,6 +125,19 @@ rte_mempool_ops_get_count(const struct rte_mempool *mp)
|
|||||||
return ops->get_count(mp);
|
return ops->get_count(mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wrapper to get external mempool capabilities. */
|
||||||
|
int
|
||||||
|
rte_mempool_ops_get_capabilities(const struct rte_mempool *mp,
|
||||||
|
unsigned int *flags)
|
||||||
|
{
|
||||||
|
struct rte_mempool_ops *ops;
|
||||||
|
|
||||||
|
ops = rte_mempool_get_ops(mp->ops_index);
|
||||||
|
|
||||||
|
RTE_FUNC_PTR_OR_ERR_RET(ops->get_capabilities, -ENOTSUP);
|
||||||
|
return ops->get_capabilities(mp, flags);
|
||||||
|
}
|
||||||
|
|
||||||
/* sets mempool ops previously registered by rte_mempool_register_ops. */
|
/* sets mempool ops previously registered by rte_mempool_register_ops. */
|
||||||
int
|
int
|
||||||
rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name,
|
rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name,
|
||||||
|
@ -41,3 +41,10 @@ DPDK_16.07 {
|
|||||||
rte_mempool_set_ops_byname;
|
rte_mempool_set_ops_byname;
|
||||||
|
|
||||||
} DPDK_2.0;
|
} DPDK_2.0;
|
||||||
|
|
||||||
|
DPDK_17.11 {
|
||||||
|
global:
|
||||||
|
|
||||||
|
rte_mempool_ops_get_capabilities;
|
||||||
|
|
||||||
|
} DPDK_16.07;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user