From 47eb00f25ab06a699dc27507814c7656940340af Mon Sep 17 00:00:00 2001 From: Konstantin Ananyev Date: Fri, 25 Oct 2019 11:56:34 +0100 Subject: 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 Change-Id: Idc9f3e9329920dfb34916f9bff28664ee5e99a42 --- lib/libtle_l4p/tcp_ofo.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'lib/libtle_l4p/tcp_ofo.c') 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; } -- cgit 1.2.3-korg