net/softnic: add mempool object
Add mempool object implementation to the softnic. Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com> Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
This commit is contained in:
parent
dfcd81838c
commit
0efefe115a
@ -22,6 +22,7 @@ LIBABIVER := 1
|
||||
# all source are stored in SRCS-y
|
||||
#
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC) += rte_eth_softnic.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC) += rte_eth_softnic_mempool.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC) += rte_eth_softnic_swq.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC) += rte_eth_softnic_link.c
|
||||
SRCS-$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC) += rte_eth_softnic_tm.c
|
||||
|
@ -4,6 +4,7 @@
|
||||
install_headers('rte_eth_softnic.h')
|
||||
sources = files('rte_eth_softnic_tm.c',
|
||||
'rte_eth_softnic.c',
|
||||
'rte_eth_softnic_mempool.c',
|
||||
'rte_eth_softnic_swq.c',
|
||||
'rte_eth_softnic_link.c')
|
||||
deps += 'sched'
|
||||
|
@ -216,6 +216,7 @@ pmd_init(struct pmd_params *params)
|
||||
memcpy(&p->params, params, sizeof(p->params));
|
||||
|
||||
/* Resources */
|
||||
softnic_mempool_init(p);
|
||||
softnic_swq_init(p);
|
||||
softnic_link_init(p);
|
||||
|
||||
@ -230,6 +231,7 @@ pmd_free(struct pmd_internals *p)
|
||||
|
||||
softnic_link_free(p);
|
||||
softnic_swq_free(p);
|
||||
softnic_mempool_free(p);
|
||||
|
||||
rte_free(p);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <stdint.h>
|
||||
#include <sys/queue.h>
|
||||
|
||||
#include <rte_mempool.h>
|
||||
#include <rte_mbuf.h>
|
||||
#include <rte_ring.h>
|
||||
#include <rte_ethdev.h>
|
||||
@ -36,6 +37,24 @@ struct pmd_params {
|
||||
} tm;
|
||||
};
|
||||
|
||||
/**
|
||||
* MEMPOOL
|
||||
*/
|
||||
struct softnic_mempool_params {
|
||||
uint32_t buffer_size;
|
||||
uint32_t pool_size;
|
||||
uint32_t cache_size;
|
||||
};
|
||||
|
||||
struct softnic_mempool {
|
||||
TAILQ_ENTRY(softnic_mempool) node;
|
||||
char name[NAME_SIZE];
|
||||
struct rte_mempool *m;
|
||||
uint32_t buffer_size;
|
||||
};
|
||||
|
||||
TAILQ_HEAD(softnic_mempool_list, softnic_mempool);
|
||||
|
||||
/**
|
||||
* SWQ
|
||||
*/
|
||||
@ -193,10 +212,29 @@ struct pmd_internals {
|
||||
struct tm_internals tm; /**< Traffic Management */
|
||||
} soft;
|
||||
|
||||
struct softnic_mempool_list mempool_list;
|
||||
struct softnic_swq_list swq_list;
|
||||
struct softnic_link_list link_list;
|
||||
};
|
||||
|
||||
/**
|
||||
* MEMPOOL
|
||||
*/
|
||||
int
|
||||
softnic_mempool_init(struct pmd_internals *p);
|
||||
|
||||
void
|
||||
softnic_mempool_free(struct pmd_internals *p);
|
||||
|
||||
struct softnic_mempool *
|
||||
softnic_mempool_find(struct pmd_internals *p,
|
||||
const char *name);
|
||||
|
||||
struct softnic_mempool *
|
||||
softnic_mempool_create(struct pmd_internals *p,
|
||||
const char *name,
|
||||
struct softnic_mempool_params *params);
|
||||
|
||||
/**
|
||||
* SWQ
|
||||
*/
|
||||
|
103
drivers/net/softnic/rte_eth_softnic_mempool.c
Normal file
103
drivers/net/softnic/rte_eth_softnic_mempool.c
Normal file
@ -0,0 +1,103 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
* Copyright(c) 2010-2018 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <rte_mbuf.h>
|
||||
#include <rte_string_fns.h>
|
||||
|
||||
#include "rte_eth_softnic_internals.h"
|
||||
|
||||
#define BUFFER_SIZE_MIN (sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
|
||||
|
||||
int
|
||||
softnic_mempool_init(struct pmd_internals *p)
|
||||
{
|
||||
TAILQ_INIT(&p->mempool_list);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
softnic_mempool_free(struct pmd_internals *p)
|
||||
{
|
||||
for ( ; ; ) {
|
||||
struct softnic_mempool *mempool;
|
||||
|
||||
mempool = TAILQ_FIRST(&p->mempool_list);
|
||||
if (mempool == NULL)
|
||||
break;
|
||||
|
||||
TAILQ_REMOVE(&p->mempool_list, mempool, node);
|
||||
rte_mempool_free(mempool->m);
|
||||
free(mempool);
|
||||
}
|
||||
}
|
||||
|
||||
struct softnic_mempool *
|
||||
softnic_mempool_find(struct pmd_internals *p,
|
||||
const char *name)
|
||||
{
|
||||
struct softnic_mempool *mempool;
|
||||
|
||||
if (name == NULL)
|
||||
return NULL;
|
||||
|
||||
TAILQ_FOREACH(mempool, &p->mempool_list, node)
|
||||
if (strcmp(mempool->name, name) == 0)
|
||||
return mempool;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct softnic_mempool *
|
||||
softnic_mempool_create(struct pmd_internals *p,
|
||||
const char *name,
|
||||
struct softnic_mempool_params *params)
|
||||
{
|
||||
char mempool_name[NAME_SIZE];
|
||||
struct softnic_mempool *mempool;
|
||||
struct rte_mempool *m;
|
||||
|
||||
/* Check input params */
|
||||
if (name == NULL ||
|
||||
softnic_mempool_find(p, name) ||
|
||||
params == NULL ||
|
||||
params->buffer_size < BUFFER_SIZE_MIN ||
|
||||
params->pool_size == 0)
|
||||
return NULL;
|
||||
|
||||
/* Resource create */
|
||||
snprintf(mempool_name, sizeof(mempool_name), "%s_%s",
|
||||
p->params.name,
|
||||
name);
|
||||
|
||||
m = rte_pktmbuf_pool_create(mempool_name,
|
||||
params->pool_size,
|
||||
params->cache_size,
|
||||
0,
|
||||
params->buffer_size - sizeof(struct rte_mbuf),
|
||||
p->params.cpu_id);
|
||||
|
||||
if (m == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Node allocation */
|
||||
mempool = calloc(1, sizeof(struct softnic_mempool));
|
||||
if (mempool == NULL) {
|
||||
rte_mempool_free(m);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Node fill in */
|
||||
strlcpy(mempool->name, name, sizeof(mempool->name));
|
||||
mempool->m = m;
|
||||
mempool->buffer_size = params->buffer_size;
|
||||
|
||||
/* Node add to list */
|
||||
TAILQ_INSERT_TAIL(&p->mempool_list, mempool, node);
|
||||
|
||||
return mempool;
|
||||
}
|
Loading…
Reference in New Issue
Block a user