The maximum amount of unique switching domain is supposed to be equal to RTE_MAX_ETHPORTS. The current implementation allows to allocate only RTE_MAX_ETHPORTS-1 domains.
Fixes: ce9250406323 ("ethdev: add switch domain allocator") Cc: sta...@dpdk.org Signed-off-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> --- lib/librte_ethdev/rte_ethdev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 6e9cb24..4c2312c 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -5065,10 +5065,10 @@ enum rte_eth_switch_domain_state { *domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID; for (i = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID + 1; - i < RTE_MAX_ETHPORTS; i++) { - if (rte_eth_switch_domains[i].state == + i <= RTE_MAX_ETHPORTS; i++) { + if (rte_eth_switch_domains[i - 1].state == RTE_ETH_SWITCH_DOMAIN_UNUSED) { - rte_eth_switch_domains[i].state = + rte_eth_switch_domains[i - 1].state = RTE_ETH_SWITCH_DOMAIN_ALLOCATED; *domain_id = i; return 0; @@ -5082,14 +5082,15 @@ enum rte_eth_switch_domain_state { rte_eth_switch_domain_free(uint16_t domain_id) { if (domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID || - domain_id >= RTE_MAX_ETHPORTS) + domain_id > RTE_MAX_ETHPORTS) return -EINVAL; - if (rte_eth_switch_domains[domain_id].state != + if (rte_eth_switch_domains[domain_id - 1].state != RTE_ETH_SWITCH_DOMAIN_ALLOCATED) return -EINVAL; - rte_eth_switch_domains[domain_id].state = RTE_ETH_SWITCH_DOMAIN_UNUSED; + rte_eth_switch_domains[domain_id - 1].state = + RTE_ETH_SWITCH_DOMAIN_UNUSED; return 0; } -- 1.8.3.1