app/testpmd: fix crash when portmask is specified

If testpmd is invoked with portmask option like below, segmentation
fault will occur. This patch fixes the issue.

Reported-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
Tetsuya Mukawa 2015-02-27 16:16:15 +09:00 committed by Thomas Monjalon
parent e34550c8b9
commit ffc468ff3c

View File

@ -579,20 +579,6 @@ init_config(void)
socket_num);
}
/* Configuration of Ethernet ports. */
ports = rte_zmalloc("testpmd: ports",
sizeof(struct rte_port) * RTE_MAX_ETHPORTS,
RTE_CACHE_LINE_SIZE);
if (ports == NULL) {
rte_exit(EXIT_FAILURE,
"rte_zmalloc(%d struct rte_port) failed\n",
RTE_MAX_ETHPORTS);
}
/* enabled allocated ports */
for (pid = 0; pid < nb_ports; pid++)
ports[pid].enabled = 1;
FOREACH_PORT(pid, ports) {
port = &ports[pid];
rte_eth_dev_info_get(pid, &port->dev_info);
@ -1999,6 +1985,26 @@ init_port_dcb_config(portid_t pid,struct dcb_config *dcb_conf)
return 0;
}
static void
init_port(void)
{
portid_t pid;
/* Configuration of Ethernet ports. */
ports = rte_zmalloc("testpmd: ports",
sizeof(struct rte_port) * RTE_MAX_ETHPORTS,
RTE_CACHE_LINE_SIZE);
if (ports == NULL) {
rte_exit(EXIT_FAILURE,
"rte_zmalloc(%d struct rte_port) failed\n",
RTE_MAX_ETHPORTS);
}
/* enabled allocated ports */
for (pid = 0; pid < nb_ports; pid++)
ports[pid].enabled = 1;
}
int
main(int argc, char** argv)
{
@ -2013,6 +2019,9 @@ main(int argc, char** argv)
if (nb_ports == 0)
RTE_LOG(WARNING, EAL, "No probed ethernet devices\n");
/* allocate port structures, and init them */
init_port();
set_def_fwd_config();
if (nb_lcores == 0)
rte_panic("Empty set of forwarding logical cores - check the "