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;
+       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) {
-               mlx5e_destroy_mdev_resources(mdev);
-               return err;
-       }
+       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)
        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;
 }