diff options
author | Konstantin Ananyev <konstantin.ananyev@intel.com> | 2019-10-25 11:56:34 +0100 |
---|---|---|
committer | Konstantin Ananyev <konstantin.ananyev@intel.com> | 2019-12-31 11:42:47 +0000 |
commit | 47eb00f25ab06a699dc27507814c7656940340af (patch) | |
tree | 2ba4120a03e8a7e34a582266150e4a2a6d25b802 /lib/libtle_l4p/tcp_ofo.c | |
parent | 703faabf2d44d245fe1dd0b75f1736bf6114a557 (diff) |
v6 rework TCP stream allocation
Allocate TCP stream and all necessary metadata
(RX/TX queues, OFO queue, DRBs, etc.) as one big buffer,
instead of separate alloc() calls for each of the sub-components.
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Change-Id: Idc9f3e9329920dfb34916f9bff28664ee5e99a42
Diffstat (limited to 'lib/libtle_l4p/tcp_ofo.c')
-rw-r--r-- | lib/libtle_l4p/tcp_ofo.c | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/lib/libtle_l4p/tcp_ofo.c b/lib/libtle_l4p/tcp_ofo.c index 1565445..8724a0a 100644 --- a/lib/libtle_l4p/tcp_ofo.c +++ b/lib/libtle_l4p/tcp_ofo.c @@ -27,14 +27,20 @@ #define OFO_OBJ_MAX (OFODB_OBJ_MAX * OFO_DB_MAX) -void -tcp_ofo_free(struct ofo *ofo) +static uint32_t +calc_ofo_size(uint32_t nobj, uint32_t ndb) { - rte_free(ofo); + uint32_t dsz, osz, sz; + const struct ofo *ofo = NULL; + + osz = sizeof(*ofo) + sizeof(ofo->db[0]) * ndb; + dsz = sizeof(ofo->db[0].obj[0]) * nobj * ndb; + sz = osz + dsz; + return sz; } -static void -calc_ofo_elems(uint32_t nbufs, uint32_t *nobj, uint32_t *ndb) +void +tcp_ofo_calc_elems(uint32_t nbufs, uint32_t *nobj, uint32_t *ndb, uint32_t *sz) { uint32_t n, nd, no; @@ -50,29 +56,15 @@ calc_ofo_elems(uint32_t nbufs, uint32_t *nobj, uint32_t *ndb) *nobj = no; *ndb = nd; + *sz = calc_ofo_size(no, nd); } -struct ofo * -tcp_ofo_alloc(uint32_t nbufs, int32_t socket) +void +tcp_ofo_init(struct ofo *ofo, uint32_t nobj, uint32_t ndb) { - uint32_t i, ndb, nobj; - size_t dsz, osz, sz; - struct ofo *ofo; + uint32_t i; struct rte_mbuf **obj; - calc_ofo_elems(nbufs, &nobj, &ndb); - osz = sizeof(*ofo) + sizeof(ofo->db[0]) * ndb; - dsz = sizeof(ofo->db[0].obj[0]) * nobj * ndb; - sz = osz + dsz; - - ofo = rte_zmalloc_socket(NULL, sz, RTE_CACHE_LINE_SIZE, socket); - if (ofo == NULL) { - TCP_LOG(ERR, "%s: allocation of %zu bytes on socket %d " - "failed with error code: %d\n", - __func__, sz, socket, rte_errno); - return NULL; - } - obj = (struct rte_mbuf **)&ofo->db[ndb]; for (i = 0; i != ndb; i++) { ofo->db[i].nb_max = nobj; @@ -80,6 +72,5 @@ tcp_ofo_alloc(uint32_t nbufs, int32_t socket) } ofo->nb_max = ndb; - return ofo; } |