net/mlx5: use port sibling iterators
Iterating over siblings was done with RTE_ETH_FOREACH_DEV() which skips the owned ports. The new iterators RTE_ETH_FOREACH_DEV_SIBLING() and RTE_ETH_FOREACH_DEV_OF() are more appropriate and more correct. Signed-off-by: Thomas Monjalon <thomas@monjalon.net> Tested-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com> Acked-by: Yongseok Koh <yskoh@mellanox.com>
This commit is contained in:
parent
7f98942886
commit
d874a4eed5
@ -540,17 +540,15 @@ mlx5_dev_close(struct rte_eth_dev *dev)
|
|||||||
dev->data->port_id);
|
dev->data->port_id);
|
||||||
if (priv->domain_id != RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID) {
|
if (priv->domain_id != RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID) {
|
||||||
unsigned int c = 0;
|
unsigned int c = 0;
|
||||||
unsigned int i = mlx5_dev_to_port_id(dev->device, NULL, 0);
|
uint16_t port_id;
|
||||||
uint16_t port_id[i];
|
|
||||||
|
|
||||||
i = RTE_MIN(mlx5_dev_to_port_id(dev->device, port_id, i), i);
|
RTE_ETH_FOREACH_DEV_OF(port_id, dev->device) {
|
||||||
while (i--) {
|
|
||||||
struct mlx5_priv *opriv =
|
struct mlx5_priv *opriv =
|
||||||
rte_eth_devices[port_id[i]].data->dev_private;
|
rte_eth_devices[port_id].data->dev_private;
|
||||||
|
|
||||||
if (!opriv ||
|
if (!opriv ||
|
||||||
opriv->domain_id != priv->domain_id ||
|
opriv->domain_id != priv->domain_id ||
|
||||||
&rte_eth_devices[port_id[i]] == dev)
|
&rte_eth_devices[port_id] == dev)
|
||||||
continue;
|
continue;
|
||||||
++c;
|
++c;
|
||||||
}
|
}
|
||||||
@ -1273,22 +1271,16 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
|
|||||||
* Look for sibling devices in order to reuse their switch domain
|
* Look for sibling devices in order to reuse their switch domain
|
||||||
* if any, otherwise allocate one.
|
* if any, otherwise allocate one.
|
||||||
*/
|
*/
|
||||||
i = mlx5_dev_to_port_id(dpdk_dev, NULL, 0);
|
RTE_ETH_FOREACH_DEV_OF(port_id, dpdk_dev) {
|
||||||
if (i > 0) {
|
const struct mlx5_priv *opriv =
|
||||||
uint16_t port_id[i];
|
rte_eth_devices[port_id].data->dev_private;
|
||||||
|
|
||||||
i = RTE_MIN(mlx5_dev_to_port_id(dpdk_dev, port_id, i), i);
|
if (!opriv ||
|
||||||
while (i--) {
|
opriv->domain_id ==
|
||||||
const struct mlx5_priv *opriv =
|
RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID)
|
||||||
rte_eth_devices[port_id[i]].data->dev_private;
|
continue;
|
||||||
|
priv->domain_id = opriv->domain_id;
|
||||||
if (!opriv ||
|
break;
|
||||||
opriv->domain_id ==
|
|
||||||
RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID)
|
|
||||||
continue;
|
|
||||||
priv->domain_id = opriv->domain_id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (priv->domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID) {
|
if (priv->domain_id == RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID) {
|
||||||
err = rte_eth_switch_domain_alloc(&priv->domain_id);
|
err = rte_eth_switch_domain_alloc(&priv->domain_id);
|
||||||
|
@ -1364,11 +1364,7 @@ mlx5_dev_to_port_id(const struct rte_device *dev, uint16_t *port_list,
|
|||||||
uint16_t id;
|
uint16_t id;
|
||||||
unsigned int n = 0;
|
unsigned int n = 0;
|
||||||
|
|
||||||
RTE_ETH_FOREACH_DEV(id) {
|
RTE_ETH_FOREACH_DEV_OF(id, dev) {
|
||||||
struct rte_eth_dev *ldev = &rte_eth_devices[id];
|
|
||||||
|
|
||||||
if (ldev->device != dev)
|
|
||||||
continue;
|
|
||||||
if (n < port_list_n)
|
if (n < port_list_n)
|
||||||
port_list[n] = id;
|
port_list[n] = id;
|
||||||
n++;
|
n++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user