[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1745416242-1162653-6-git-send-email-moshe@nvidia.com>
Date: Wed, 23 Apr 2025 16:50:42 +0300
From: Moshe Shemesh <moshe@...dia.com>
To: <netdev@...r.kernel.org>, "David S. Miller" <davem@...emloft.net>, "Eric
Dumazet" <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>, Paolo Abeni
<pabeni@...hat.com>, Simon Horman <horms@...nel.org>, Donald Hunter
<donald.hunter@...il.com>, Jiri Pirko <jiri@...nulli.us>, Jonathan Corbet
<corbet@....net>, Andrew Lunn <andrew+netdev@...n.ch>
CC: Tariq Toukan <tariqt@...dia.com>, Saeed Mahameed <saeedm@...dia.com>,
"Leon Romanovsky" <leonro@...dia.com>, Mark Bloch <mbloch@...dia.com>, Avihai
Horon <avihaih@...dia.com>
Subject: [RFC net-next 5/5] net/mlx5: Expose unique identifier in devlink port function
From: Avihai Horon <avihaih@...dia.com>
The devlink port function unique identifier (UID) attribute allows to
report the UID of the function that pertains to the devlink port.
Get the port function's VUID and report it as its unique identifier.
Signed-off-by: Avihai Horon <avihaih@...dia.com>
---
.../mellanox/mlx5/core/esw/devlink_port.c | 2 ++
.../net/ethernet/mellanox/mlx5/core/eswitch.h | 2 ++
.../mellanox/mlx5/core/eswitch_offloads.c | 34 +++++++++++++++++++
3 files changed, 38 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
index b7102e14d23d..0f86c7d3df5f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
@@ -100,6 +100,8 @@ static const struct devlink_port_ops mlx5_esw_pf_vf_dl_port_ops = {
#endif /* CONFIG_XFRM_OFFLOAD */
.port_fn_max_io_eqs_get = mlx5_devlink_port_fn_max_io_eqs_get,
.port_fn_max_io_eqs_set = mlx5_devlink_port_fn_max_io_eqs_set,
+ .port_fn_uid_get = mlx5_devlink_port_fn_uid_get,
+ .port_fn_uid_max_size = MLX5_VUID_STR_MAX_SIZE,
};
static void mlx5_esw_offloads_sf_devlink_port_attrs_set(struct mlx5_eswitch *esw,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
index 8573d36785f4..bedbb4d12903 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
@@ -580,6 +580,8 @@ int mlx5_devlink_port_fn_max_io_eqs_set(struct devlink_port *port,
struct netlink_ext_ack *extack);
int mlx5_devlink_port_fn_max_io_eqs_set_sf_default(struct devlink_port *port,
struct netlink_ext_ack *extack);
+int mlx5_devlink_port_fn_uid_get(struct devlink_port *port, char *fuid,
+ struct netlink_ext_ack *extack);
void *mlx5_eswitch_get_uplink_priv(struct mlx5_eswitch *esw, u8 rep_type);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
index a6a8eea5980c..749e2f379eb4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
@@ -4701,3 +4701,37 @@ mlx5_devlink_port_fn_max_io_eqs_set_sf_default(struct devlink_port *port,
MLX5_ESW_DEFAULT_SF_COMP_EQS,
extack);
}
+
+int mlx5_devlink_port_fn_uid_get(struct devlink_port *port, char *fuid,
+ struct netlink_ext_ack *extack)
+{
+ struct mlx5_vport *vport = mlx5_devlink_port_vport_get(port);
+ u16 vport_num = vport->vport;
+ struct mlx5_eswitch *esw;
+ u16 vhca_id;
+ int err;
+
+ if (vport_num != MLX5_VPORT_PF)
+ return -EOPNOTSUPP;
+
+ esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
+ if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
+ return -EOPNOTSUPP;
+
+ if (!MLX5_CAP_GEN_2(esw->dev, query_vuid))
+ return -EOPNOTSUPP;
+
+ err = mlx5_vport_get_vhca_id(esw->dev, vport_num, &vhca_id);
+ if (err) {
+ NL_SET_ERR_MSG_MOD(extack, "Failed getting vhca_id of vport");
+ return err;
+ }
+
+ err = mlx5_core_query_vuid(esw->dev, vhca_id, false, fuid);
+ if (err) {
+ NL_SET_ERR_MSG_MOD(extack, "Failed querying vuid");
+ return err;
+ }
+
+ return 0;
+}
--
2.27.0
Powered by blists - more mailing lists