Skip to content

Commit c6acd62

Browse files
HoommusSaeed Mahameed
authored andcommitted
net/mlx5e: Add support for devlink-port in non-representors mode
Added devlink_port field to mlx5e_priv structure and a callback to netdev ops to enable devlink to get info about the port. The port registration happens at driver initialization. Signed-off-by: Vladyslav Tarasiuk <[email protected]> Reviewed-by: Moshe Shemesh <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent ab8f963 commit c6acd62

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

drivers/net/ethernet/mellanox/mlx5/core/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
2525
en_tx.o en_rx.o en_dim.o en_txrx.o en/xdp.o en_stats.o \
2626
en_selftest.o en/port.o en/monitor_stats.o en/health.o \
2727
en/reporter_tx.o en/reporter_rx.o en/params.o en/xsk/umem.o \
28-
en/xsk/setup.o en/xsk/rx.o en/xsk/tx.o
28+
en/xsk/setup.o en/xsk/rx.o en/xsk/tx.o en/devlink.o
2929

3030
#
3131
# Netdev extra

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,7 @@ struct mlx5e_priv {
880880
#endif
881881
struct devlink_health_reporter *tx_reporter;
882882
struct devlink_health_reporter *rx_reporter;
883+
struct devlink_port dl_phy_port;
883884
struct mlx5e_xsk xsk;
884885
#if IS_ENABLED(CONFIG_PCI_HYPERV_INTERFACE)
885886
struct mlx5e_hv_vhca_stats_agent stats_agent;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
2+
/* Copyright (c) 2020, Mellanox Technologies inc. All rights reserved. */
3+
4+
#include "en/devlink.h"
5+
6+
int mlx5e_devlink_phy_port_register(struct net_device *dev)
7+
{
8+
struct mlx5e_priv *priv;
9+
struct devlink *devlink;
10+
int err;
11+
12+
priv = netdev_priv(dev);
13+
devlink = priv_to_devlink(priv->mdev);
14+
15+
devlink_port_attrs_set(&priv->dl_phy_port,
16+
DEVLINK_PORT_FLAVOUR_PHYSICAL,
17+
PCI_FUNC(priv->mdev->pdev->devfn),
18+
false, 0,
19+
NULL, 0);
20+
err = devlink_port_register(devlink, &priv->dl_phy_port, 1);
21+
if (err)
22+
return err;
23+
devlink_port_type_eth_set(&priv->dl_phy_port, dev);
24+
return 0;
25+
}
26+
27+
void mlx5e_devlink_phy_port_unregister(struct mlx5e_priv *priv)
28+
{
29+
devlink_port_unregister(&priv->dl_phy_port);
30+
}
31+
32+
struct devlink_port *mlx5e_get_devlink_phy_port(struct net_device *dev)
33+
{
34+
struct mlx5e_priv *priv = netdev_priv(dev);
35+
36+
return &priv->dl_phy_port;
37+
}
38+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2+
/* Copyright (c) 2020, Mellanox Technologies inc. All rights reserved. */
3+
4+
#ifndef __MLX5E_EN_DEVLINK_H
5+
#define __MLX5E_EN_DEVLINK_H
6+
7+
#include <net/devlink.h>
8+
#include "en.h"
9+
10+
int mlx5e_devlink_phy_port_register(struct net_device *dev);
11+
void mlx5e_devlink_phy_port_unregister(struct mlx5e_priv *priv);
12+
struct devlink_port *mlx5e_get_devlink_phy_port(struct net_device *dev);
13+
14+
#endif
15+

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
#include "en/xsk/rx.h"
6464
#include "en/xsk/tx.h"
6565
#include "en/hv_vhca_stats.h"
66+
#include "en/devlink.h"
6667
#include "lib/mlx5.h"
6768

6869

@@ -4605,6 +4606,7 @@ const struct net_device_ops mlx5e_netdev_ops = {
46054606
.ndo_set_vf_link_state = mlx5e_set_vf_link_state,
46064607
.ndo_get_vf_stats = mlx5e_get_vf_stats,
46074608
#endif
4609+
.ndo_get_devlink_port = mlx5e_get_devlink_phy_port,
46084610
};
46094611

46104612
static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev)
@@ -5472,11 +5474,19 @@ static void *mlx5e_add(struct mlx5_core_dev *mdev)
54725474
goto err_detach;
54735475
}
54745476

5477+
err = mlx5e_devlink_phy_port_register(netdev);
5478+
if (err) {
5479+
mlx5_core_err(mdev, "mlx5e_devlink_phy_port_register failed, %d\n", err);
5480+
goto err_unregister_netdev;
5481+
}
5482+
54755483
#ifdef CONFIG_MLX5_CORE_EN_DCB
54765484
mlx5e_dcbnl_init_app(priv);
54775485
#endif
54785486
return priv;
54795487

5488+
err_unregister_netdev:
5489+
unregister_netdev(netdev);
54805490
err_detach:
54815491
mlx5e_detach(mdev, priv);
54825492
err_destroy_netdev:
@@ -5498,6 +5508,7 @@ static void mlx5e_remove(struct mlx5_core_dev *mdev, void *vpriv)
54985508
#ifdef CONFIG_MLX5_CORE_EN_DCB
54995509
mlx5e_dcbnl_delete_app(priv);
55005510
#endif
5511+
mlx5e_devlink_phy_port_unregister(priv);
55015512
unregister_netdev(priv->netdev);
55025513
mlx5e_detach(mdev, vpriv);
55035514
mlx5e_destroy_netdev(priv);

0 commit comments

Comments
 (0)