From 65a7360cc3378f5b3edd59f230141462dd98cfe9 Mon Sep 17 00:00:00 2001 From: Matan Azrad Date: Sun, 3 Sep 2017 16:19:07 +0300 Subject: [PATCH] app/testpmd: fix forward port ids setting The corrupted code didn't check the port availability when it was trying to set the forward port IDs array. However, when it was counting the number of ports, the availability was checked by RTE_ETH_FOREACH_DEV iterator. Hence, even when ETH devices ports were not in ATTACHED state, the testpmd tried to forward traffic by them and got segmentation fault at queue access time. For example: When EAL command line parameters include two devices, the first is failsafe with two sub devices and the second is any device, testpmd gets two devices by the iterator and sets for forwarding both, the failsafe device and the failsafe first sub device (instead of the second sub device). After the first failsafe sub device state was changed to DEFERRED, testpmd tries to forward traffic through the deferred device because it didn't check the port availability in setting time. The fix uses the RTE_ETH_FOREACH_DEV iterator for the forward port IDs default setting. Fixes: cb894d99eceb ("ethdev: add deferred intermediate device state") Cc: stable@dpdk.org Signed-off-by: Matan Azrad Acked-by: Jingjing Wu --- app/test-pmd/testpmd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 57a6f895c2..1f0d8f1afb 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -464,9 +464,10 @@ static void set_default_fwd_ports_config(void) { portid_t pt_id; + int i = 0; - for (pt_id = 0; pt_id < nb_ports; pt_id++) - fwd_ports_ids[pt_id] = pt_id; + RTE_ETH_FOREACH_DEV(pt_id) + fwd_ports_ids[i++] = pt_id; nb_cfg_ports = nb_ports; nb_fwd_ports = nb_ports; -- 2.20.1