allocated all port and all cpu momory together instead of realloc 19/2919/1
authorMohammad Abdul Awal <mohammad.abdul.awal@intel.com>
Thu, 15 Sep 2016 08:03:08 +0000 (09:03 +0100)
committerMohammad Abdul Awal <mohammad.abdul.awal@intel.com>
Fri, 16 Sep 2016 13:29:15 +0000 (14:29 +0100)
Change-Id: I3240e6afefb5d784e08e3a5a1b70ada7d5b4b223
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>
examples/udpfwd/Makefile
examples/udpfwd/main.c
examples/udpfwd/parse.c
examples/udpfwd/parse.h

index 6816b5e..496a3be 100644 (file)
@@ -41,5 +41,6 @@ LDLIBS += -ltle_udp
 
 EXTRA_CFLAGS += -O3
 CFLAGS_parse.o += -D_GNU_SOURCE
+CFLAGS_main.o += -D_GNU_SOURCE
 
 include $(RTE_SDK)/mk/rte.extapp.mk
index 1eb4e2a..c260d1c 100644 (file)
@@ -500,7 +500,6 @@ calculate_nb_prtq(struct netbe_cfg *cfg)
 
                        lc = find_initilized_lcore(cfg, prt->lcore[j]);
                        if (lc == NULL) {
-                               NETBE_REALLOC(cfg->cpu, cfg->cpu_num + 1);
                                lc = &cfg->cpu[cfg->cpu_num];
                                lc->id = prt->lcore[j];
                                cfg->cpu_num++;
@@ -526,22 +525,30 @@ netbe_port_init(struct netbe_cfg *cfg, int argc, char *argv[])
        int32_t rc;
        uint32_t i, n, sid, j;
        struct netbe_port *prt;
+       rte_cpuset_t cpuset;
+       uint32_t nc;
 
        n = (uint32_t)argc;
+       cfg->prt = rte_zmalloc(NULL, sizeof(struct netbe_port) * n,
+               RTE_CACHE_LINE_SIZE);
+       cfg->prt_num = n;
 
        rc = 0;
        for (i = 0; i != n; i++) {
-               NETBE_REALLOC(cfg->prt, cfg->prt_num + 1);
-               rc = parse_netbe_arg(cfg->prt + i, argv[i]);
+               rc = parse_netbe_arg(cfg->prt + i, argv[i], &cpuset);
                if (rc != 0) {
                        RTE_LOG(ERR, USER1,
                                "%s: processing of \"%s\" failed with error code: %d\n",
                                __func__, argv[i], rc);
                        return rc;
                }
-               cfg->prt_num++;
        }
 
+       for (i = 0, nc = 0; i < RTE_MAX_LCORE; i++)
+               nc += CPU_ISSET(i, &cpuset);
+       cfg->cpu = rte_zmalloc(NULL, sizeof(struct netbe_lcore) * nc,
+               RTE_CACHE_LINE_SIZE);
+
        /* calculate number of queues per lcore. */
        rc = calculate_nb_prtq(cfg);
        if (rc != 0) {
index 09c4a96..f46c7df 100644 (file)
@@ -13,7 +13,6 @@
  * limitations under the License.
  */
 
-#include <sched.h>
 #include "netbe.h"
 #include "parse.h"
 
@@ -198,7 +197,7 @@ parse_kvargs(const char *arg, const char *keys_man[], uint32_t nb_man,
 }
 
 int
-parse_netbe_arg(struct netbe_port *prt, const char *arg)
+parse_netbe_arg(struct netbe_port *prt, const char *arg, rte_cpuset_t *cpuset)
 {
        int32_t rc;
        uint32_t i, j, nc;
@@ -247,6 +246,7 @@ parse_netbe_arg(struct netbe_port *prt, const char *arg)
        for (i = 0, j = 0; i < RTE_MAX_LCORE; i++)
                if (CPU_ISSET(i, &val[1].cpuset))
                        prt->lcore[j++] = i;
+       CPU_OR(cpuset, cpuset, &val[1].cpuset);
 
        prt->mtu = val[2].u64;
        prt->rx_offload = val[3].u64;
index e25e64e..7df7671 100644 (file)
@@ -16,6 +16,8 @@
 #ifndef __PARSE_H__
 #define __PARSE_H__
 
+#include <sched.h>
+
 #define PARSE_LIST_DELIM "-"
 
 union parse_val {
@@ -68,7 +70,8 @@ format_addr(const struct sockaddr_storage *sp, char buf[], size_t len)
        return inet_ntop(sp->ss_family, addr, buf, len);
 }
 
-int parse_netbe_arg(struct netbe_port *prt, const char *arg);
+int parse_netbe_arg(struct netbe_port *prt, const char *arg,
+       rte_cpuset_t *cpuset);
 
 int netbe_parse_dest(const char *fname, struct netbe_dest_prm *prm);