New upstream version 17.11.5
[deb_dpdk.git] / app / test-pmd / testpmd.c
index 32d6871..0adebdd 100644 (file)
@@ -446,6 +446,8 @@ set_default_fwd_lcores_config(void)
 
        nb_lc = 0;
        for (i = 0; i < RTE_MAX_LCORE; i++) {
+               if (!rte_lcore_is_enabled(i))
+                       continue;
                sock_num = rte_lcore_to_socket_id(i);
                if (new_socket_id(sock_num)) {
                        if (num_sockets >= RTE_MAX_NUMA_NODES) {
@@ -455,8 +457,6 @@ set_default_fwd_lcores_config(void)
                        }
                        socket_ids[num_sockets++] = sock_num;
                }
-               if (!rte_lcore_is_enabled(i))
-                       continue;
                if (i == rte_get_master_lcore())
                        continue;
                fwd_lcores_cpuids[nb_lc++] = i;
@@ -483,9 +483,21 @@ set_default_fwd_ports_config(void)
        portid_t pt_id;
        int i = 0;
 
-       RTE_ETH_FOREACH_DEV(pt_id)
+       RTE_ETH_FOREACH_DEV(pt_id) {
                fwd_ports_ids[i++] = pt_id;
 
+               /* Update sockets info according to the attached device */
+               int socket_id = rte_eth_dev_socket_id(pt_id);
+               if (socket_id >= 0 && new_socket_id(socket_id)) {
+                       if (num_sockets >= RTE_MAX_NUMA_NODES) {
+                               rte_exit(EXIT_FAILURE,
+                                        "Total sockets greater than %u\n",
+                                        RTE_MAX_NUMA_NODES);
+                       }
+                       socket_ids[num_sockets++] = socket_id;
+               }
+       }
+
        nb_cfg_ports = nb_ports;
        nb_fwd_ports = nb_ports;
 }
@@ -674,12 +686,6 @@ init_config(void)
 
        memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
 
-       if (numa_support) {
-               memset(port_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
-               memset(rxring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
-               memset(txring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
-       }
-
        /* Configuration of logical cores. */
        fwd_lcores = rte_zmalloc("testpmd: fwd_lcores",
                                sizeof(struct fwd_lcore *) * nb_lcores,
@@ -709,9 +715,12 @@ init_config(void)
                        else {
                                uint32_t socket_id = rte_eth_dev_socket_id(pid);
 
-                               /* if socket_id is invalid, set to 0 */
+                               /*
+                                * if socket_id is invalid,
+                                * set to the first available socket.
+                                */
                                if (check_socket_id(socket_id) < 0)
-                                       socket_id = 0;
+                                       socket_id = socket_ids[0];
                                port_per_socket[socket_id]++;
                        }
                }
@@ -845,9 +854,12 @@ init_fwd_streams(void)
                        else {
                                port->socket_id = rte_eth_dev_socket_id(pid);
 
-                               /* if socket_id is invalid, set to 0 */
+                               /*
+                                * if socket_id is invalid,
+                                * set to the first available socket.
+                                */
                                if (check_socket_id(port->socket_id) < 0)
-                                       port->socket_id = 0;
+                                       port->socket_id = socket_ids[0];
                        }
                }
                else {
@@ -1896,9 +1908,9 @@ attach_port(char *identifier)
                return;
 
        socket_id = (unsigned)rte_eth_dev_socket_id(pi);
-       /* if socket_id is invalid, set to 0 */
+       /* if socket_id is invalid, set to the first available socket. */
        if (check_socket_id(socket_id) < 0)
-               socket_id = 0;
+               socket_id = socket_ids[0];
        reconfig(pi, socket_id);
        rte_eth_promiscuous_enable(pi);
 
@@ -2066,11 +2078,11 @@ eth_event_callback(portid_t port_id, enum rte_eth_event_type type, void *param,
        RTE_SET_USED(ret_param);
 
        if (type >= RTE_ETH_EVENT_MAX) {
-               fprintf(stderr, "\nPort %" PRIu8 ": %s called upon invalid event %d\n",
+               fprintf(stderr, "\nPort %" PRIu16 ": %s called upon invalid event %d\n",
                        port_id, __func__, type);
                fflush(stderr);
        } else if (event_print_mask & (UINT32_C(1) << type)) {
-               printf("\nPort %" PRIu8 ": %s event\n", port_id,
+               printf("\nPort %" PRIu16 ": %s event\n", port_id,
                        event_desc[type]);
                fflush(stdout);
        }
@@ -2464,6 +2476,11 @@ init_port(void)
                                "rte_zmalloc(%d struct rte_port) failed\n",
                                RTE_MAX_ETHPORTS);
        }
+
+       /* Initialize ports NUMA structures */
+       memset(port_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
+       memset(rxring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
+       memset(txring_numa, NUMA_NO_CONFIG, RTE_MAX_ETHPORTS);
 }
 
 static void