net/mlx5e: Create EN core HW resources for all secondary devices

Traffic queues will be created on all devices, including the
secondaries. Create the needed core layer resources for them as well.

Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Gal Pressman <gal@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
Tariq Toukan 2023-08-06 00:49:34 +03:00 committed by Saeed Mahameed
parent e2578b4f98
commit c4fb94aa82
2 changed files with 24 additions and 11 deletions

View file

@ -60,6 +60,7 @@
#include "lib/clock.h"
#include "en/rx_res.h"
#include "en/selq.h"
#include "lib/sd.h"
extern const struct net_device_ops mlx5e_netdev_ops;
struct page_pool;

View file

@ -5988,22 +5988,29 @@ static int _mlx5e_resume(struct auxiliary_device *adev)
struct mlx5e_priv *priv = mlx5e_dev->priv;
struct net_device *netdev = priv->netdev;
struct mlx5_core_dev *mdev = edev->mdev;
int err;
struct mlx5_core_dev *pos, *to;
int err, i;
if (netif_device_present(netdev))
return 0;
err = mlx5e_create_mdev_resources(mdev, true);
if (err)
return err;
err = mlx5e_attach_netdev(priv);
if (err) {
mlx5e_destroy_mdev_resources(mdev);
return err;
mlx5_sd_for_each_dev(i, mdev, pos) {
err = mlx5e_create_mdev_resources(pos, true);
if (err)
goto err_destroy_mdev_res;
}
err = mlx5e_attach_netdev(priv);
if (err)
goto err_destroy_mdev_res;
return 0;
err_destroy_mdev_res:
to = pos;
mlx5_sd_for_each_dev_to(i, mdev, to, pos)
mlx5e_destroy_mdev_resources(pos);
return err;
}
static int mlx5e_resume(struct auxiliary_device *adev)
@ -6029,15 +6036,20 @@ static int _mlx5e_suspend(struct auxiliary_device *adev)
struct mlx5e_priv *priv = mlx5e_dev->priv;
struct net_device *netdev = priv->netdev;
struct mlx5_core_dev *mdev = priv->mdev;
struct mlx5_core_dev *pos;
int i;
if (!netif_device_present(netdev)) {
if (test_bit(MLX5E_STATE_DESTROYING, &priv->state))
mlx5e_destroy_mdev_resources(mdev);
mlx5_sd_for_each_dev(i, mdev, pos)
mlx5e_destroy_mdev_resources(pos);
return -ENODEV;
}
mlx5e_detach_netdev(priv);
mlx5e_destroy_mdev_resources(mdev);
mlx5_sd_for_each_dev(i, mdev, pos)
mlx5e_destroy_mdev_resources(pos);
return 0;
}