[dpdk-dev] [PATCH v3 2/7] ethdev: fix used portid allocation

Matan Azrad matan at mellanox.com
Thu Jan 18 17:35:12 CET 2018


rte_eth_dev_find_free_port() found a free port by state checking.
The state field are in local process memory, so other DPDK processes
may get the same port ID because their local states may be different.

Replace the state checking by the ethdev port name checking,
so, if the name is an empty string the port ID will be detected as
unused.

Fixes: d948f596fee2 ("ethdev: fix port data mismatched in multiple process model")
Cc: stable at dpdk.org

Suggested-by: Konstantin Ananyev <konstantin.ananyev at intel.com>
Signed-off-by: Matan Azrad <matan at mellanox.com>
---
 lib/librte_ether/rte_ethdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 156231c..5d87f72 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -164,7 +164,7 @@ struct rte_eth_dev *
 	unsigned i;
 
 	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-		if (rte_eth_devices[i].state == RTE_ETH_DEV_UNUSED)
+		if (rte_eth_dev_share_data->data[i].name[0] == '\0')
 			return i;
 	}
 	return RTE_MAX_ETHPORTS;
-- 
1.8.3.1



More information about the dev mailing list