Skip to content

Commit 31e87b3

Browse files
HoommusSaeed Mahameed
authored andcommitted
net/mlx5e: Fix devlink port register sequence
If udevd is configured to rename interfaces according to persistent naming rules and if a network interface has phys_port_name in sysfs, its contents will be appended to the interface name. However, register_netdev creates device in sysfs and if devlink_port_register is called after that, there is a timeframe in which udevd may read an empty phys_port_name value. The consequence is that the interface will lose this suffix and its name will not be really persistent. The solution is to register the port before registering a netdev. Fixes: c6acd62 ("net/mlx5e: Add support for devlink-port in non-representors mode") Signed-off-by: Vladyslav Tarasiuk <[email protected]> Reviewed-by: Maxim Mikityanskiy <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent d0645b3 commit 31e87b3

File tree

3 files changed

+21
-24
lines changed

3 files changed

+21
-24
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/devlink.c

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,27 @@
33

44
#include "en/devlink.h"
55

6-
int mlx5e_devlink_port_register(struct net_device *netdev)
6+
int mlx5e_devlink_port_register(struct mlx5e_priv *priv)
77
{
8-
struct mlx5_core_dev *dev;
9-
struct mlx5e_priv *priv;
10-
struct devlink *devlink;
11-
int err;
8+
struct devlink *devlink = priv_to_devlink(priv->mdev);
129

13-
priv = netdev_priv(netdev);
14-
dev = priv->mdev;
15-
16-
if (mlx5_core_is_pf(dev))
10+
if (mlx5_core_is_pf(priv->mdev))
1711
devlink_port_attrs_set(&priv->dl_port,
1812
DEVLINK_PORT_FLAVOUR_PHYSICAL,
19-
PCI_FUNC(dev->pdev->devfn),
13+
PCI_FUNC(priv->mdev->pdev->devfn),
2014
false, 0,
2115
NULL, 0);
2216
else
2317
devlink_port_attrs_set(&priv->dl_port,
2418
DEVLINK_PORT_FLAVOUR_VIRTUAL,
2519
0, false, 0, NULL, 0);
2620

27-
devlink = priv_to_devlink(dev);
28-
err = devlink_port_register(devlink, &priv->dl_port, 1);
29-
if (err)
30-
return err;
31-
devlink_port_type_eth_set(&priv->dl_port, netdev);
32-
return 0;
21+
return devlink_port_register(devlink, &priv->dl_port, 1);
22+
}
23+
24+
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv)
25+
{
26+
devlink_port_type_eth_set(&priv->dl_port, priv->netdev);
3327
}
3428

3529
void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv)

drivers/net/ethernet/mellanox/mlx5/core/en/devlink.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
#include <net/devlink.h>
88
#include "en.h"
99

10-
int mlx5e_devlink_port_register(struct net_device *dev);
10+
int mlx5e_devlink_port_register(struct mlx5e_priv *priv);
1111
void mlx5e_devlink_port_unregister(struct mlx5e_priv *priv);
12+
void mlx5e_devlink_port_type_eth_set(struct mlx5e_priv *priv);
1213
struct devlink_port *mlx5e_get_devlink_port(struct net_device *dev);
1314

1415
#endif

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5467,25 +5467,27 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
54675467
goto err_destroy_netdev;
54685468
}
54695469

5470-
err = register_netdev(netdev);
5470+
err = mlx5e_devlink_port_register(priv);
54715471
if (err) {
5472-
mlx5_core_err(mdev, "register_netdev failed, %d\n", err);
5472+
mlx5_core_err(mdev, "mlx5e_devlink_port_register failed, %d\n", err);
54735473
goto err_detach;
54745474
}
54755475

5476-
err = mlx5e_devlink_port_register(netdev);
5476+
err = register_netdev(netdev);
54775477
if (err) {
5478-
mlx5_core_err(mdev, "mlx5e_devlink_phy_port_register failed, %d\n", err);
5479-
goto err_unregister_netdev;
5478+
mlx5_core_err(mdev, "register_netdev failed, %d\n", err);
5479+
goto err_devlink_port_unregister;
54805480
}
54815481

5482+
mlx5e_devlink_port_type_eth_set(priv);
5483+
54825484
#ifdef CONFIG_MLX5_CORE_EN_DCB
54835485
mlx5e_dcbnl_init_app(priv);
54845486
#endif
54855487
return priv;
54865488

5487-
err_unregister_netdev:
5488-
unregister_netdev(netdev);
5489+
err_devlink_port_unregister:
5490+
mlx5e_devlink_port_unregister(priv);
54895491
err_detach:
54905492
mlx5e_detach(mdev, priv);
54915493
err_destroy_netdev:

0 commit comments

Comments
 (0)