mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-23 13:17:34 -04:00
net/mlx5: Relax capability check for eswitch query paths
Several eswitch functions that only query other functions' HCA capabilities or read cached vport state are guarded by the vhca_resource_manager capability. This capability is required for set_hca_cap operations but query_hca_cap of other functions only requires the vport_group_manager capability. Relax the capability check from vhca_resource_manager to vport_group_manager in the following query-only paths: - mlx5_esw_vport_caps_get() - queries other function general caps - esw_ipsec_vf_query_generic() - queries other function ipsec cap - mlx5_devlink_port_fn_migratable_get() - reads cached vport state - mlx5_devlink_port_fn_roce_get() - reads cached vport state - mlx5_devlink_port_fn_max_io_eqs_get() - queries other function caps - mlx5_esw_vport_enable/disable() - vhca_id map/unmap Functions that perform also set_hca_cap (migratable_set, roce_set, max_io_eqs_set, esw_ipsec_vf_set_generic, esw_ipsec_vf_set_bytype) retain the vhca_resource_manager requirement. Signed-off-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Akiva Goldberger <agoldberger@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260506133239.276237-2-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
1160428a8b
commit
8ca3246081
@@ -12,7 +12,7 @@ static int esw_ipsec_vf_query_generic(struct mlx5_core_dev *dev, u16 vport_num,
|
||||
void *hca_cap, *query_cap;
|
||||
int err;
|
||||
|
||||
if (!MLX5_CAP_GEN(dev, vhca_resource_manager))
|
||||
if (!MLX5_CAP_GEN(dev, vport_group_manager))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!mlx5_esw_ipsec_vf_offload_supported(dev)) {
|
||||
|
||||
@@ -806,7 +806,7 @@ static int mlx5_esw_vport_caps_get(struct mlx5_eswitch *esw, struct mlx5_vport *
|
||||
void *hca_caps;
|
||||
int err;
|
||||
|
||||
if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
|
||||
if (!MLX5_CAP_GEN(esw->dev, vport_group_manager))
|
||||
return 0;
|
||||
|
||||
query_ctx = kzalloc(query_out_sz, GFP_KERNEL);
|
||||
@@ -938,7 +938,7 @@ int mlx5_esw_vport_enable(struct mlx5_eswitch *esw, struct mlx5_vport *vport,
|
||||
vport->info.trusted = true;
|
||||
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
|
||||
MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
|
||||
MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
|
||||
ret = mlx5_esw_vport_vhca_id_map(esw, vport);
|
||||
if (ret)
|
||||
goto err_vhca_mapping;
|
||||
@@ -976,7 +976,7 @@ void mlx5_esw_vport_disable(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
|
||||
arm_vport_context_events_cmd(esw->dev, vport_num, 0);
|
||||
|
||||
if (!mlx5_esw_is_manager_vport(esw, vport_num) &&
|
||||
MLX5_CAP_GEN(esw->dev, vhca_resource_manager))
|
||||
MLX5_CAP_GEN(esw->dev, vport_group_manager))
|
||||
mlx5_esw_vport_vhca_id_unmap(esw, vport);
|
||||
|
||||
if (vport->vport != MLX5_VPORT_HOST_PF &&
|
||||
|
||||
@@ -4830,8 +4830,9 @@ int mlx5_devlink_port_fn_migratable_get(struct devlink_port *port, bool *is_enab
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Device doesn't support VHCA management");
|
||||
if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Device doesn't support vport group management");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
@@ -4906,8 +4907,9 @@ int mlx5_devlink_port_fn_roce_get(struct devlink_port *port, bool *is_enabled,
|
||||
struct mlx5_eswitch *esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
|
||||
struct mlx5_vport *vport = mlx5_devlink_port_vport_get(port);
|
||||
|
||||
if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "Device doesn't support VHCA management");
|
||||
if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Device doesn't support vport group management");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
@@ -5229,9 +5231,9 @@ mlx5_devlink_port_fn_max_io_eqs_get(struct devlink_port *port, u32 *max_io_eqs,
|
||||
int err;
|
||||
|
||||
esw = mlx5_devlink_eswitch_nocheck_get(port->devlink);
|
||||
if (!MLX5_CAP_GEN(esw->dev, vhca_resource_manager)) {
|
||||
if (!MLX5_CAP_GEN(esw->dev, vport_group_manager)) {
|
||||
NL_SET_ERR_MSG_MOD(extack,
|
||||
"Device doesn't support VHCA management");
|
||||
"Device doesn't support vport group management");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user