net/mlx5: fix find sibling devices
The routine mlx5_eth_find_next() and related iterating macro MLX5_ETH_FOREACH_DEV is used to iterate through sibling devices (all representors share the same configuration and switching domain) on top of specified root device. The root device parameter was specified as NULL, and it caused missing siblings in iteration during representor device probing, causing: 1. allocating new domain_id for the device being probed. 2. discrepancy in representor configurations and potential overall driver malfunctions. Fixes: 56bb3c84e982 ("net/mlx5: reduce PCI dependency") Signed-off-by: Gregory Etelson <getelson@nvidia.com> Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
This commit is contained in:
parent
1af874087c
commit
e9d420dfc2
@ -1314,7 +1314,7 @@ err_secondary:
|
||||
}
|
||||
/* Override some values set by hardware configuration. */
|
||||
mlx5_args(config, dpdk_dev->devargs);
|
||||
err = mlx5_dev_check_sibling_config(priv, config);
|
||||
err = mlx5_dev_check_sibling_config(priv, config, dpdk_dev);
|
||||
if (err)
|
||||
goto error;
|
||||
config->hw_csum = !!(sh->device_attr.device_cap_flags_ex &
|
||||
|
@ -2297,7 +2297,8 @@ rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n)
|
||||
*/
|
||||
int
|
||||
mlx5_dev_check_sibling_config(struct mlx5_priv *priv,
|
||||
struct mlx5_dev_config *config)
|
||||
struct mlx5_dev_config *config,
|
||||
struct rte_device *dpdk_dev)
|
||||
{
|
||||
struct mlx5_dev_ctx_shared *sh = priv->sh;
|
||||
struct mlx5_dev_config *sh_conf = NULL;
|
||||
@ -2308,7 +2309,7 @@ mlx5_dev_check_sibling_config(struct mlx5_priv *priv,
|
||||
if (sh->refcnt == 1)
|
||||
return 0;
|
||||
/* Find the device with shared context. */
|
||||
MLX5_ETH_FOREACH_DEV(port_id, NULL) {
|
||||
MLX5_ETH_FOREACH_DEV(port_id, dpdk_dev) {
|
||||
struct mlx5_priv *opriv =
|
||||
rte_eth_devices[port_id].data->dev_private;
|
||||
|
||||
|
@ -1503,7 +1503,8 @@ void mlx5_set_min_inline(struct mlx5_dev_spawn_data *spawn,
|
||||
struct mlx5_dev_config *config);
|
||||
void mlx5_set_metadata_mask(struct rte_eth_dev *dev);
|
||||
int mlx5_dev_check_sibling_config(struct mlx5_priv *priv,
|
||||
struct mlx5_dev_config *config);
|
||||
struct mlx5_dev_config *config,
|
||||
struct rte_device *dpdk_dev);
|
||||
int mlx5_dev_configure(struct rte_eth_dev *dev);
|
||||
int mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info);
|
||||
int mlx5_fw_version_get(struct rte_eth_dev *dev, char *fw_ver, size_t fw_size);
|
||||
|
@ -430,7 +430,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
|
||||
* Look for sibling devices in order to reuse their switch domain
|
||||
* if any, otherwise allocate one.
|
||||
*/
|
||||
MLX5_ETH_FOREACH_DEV(port_id, NULL) {
|
||||
MLX5_ETH_FOREACH_DEV(port_id, dpdk_dev) {
|
||||
const struct mlx5_priv *opriv =
|
||||
rte_eth_devices[port_id].data->dev_private;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user