]> www.infradead.org Git - users/hch/configfs.git/commitdiff
net/mlx5: SD, Do not query MPIR register if no sd_group
authorTariq Toukan <tariqt@nvidia.com>
Thu, 8 Aug 2024 14:41:02 +0000 (17:41 +0300)
committerJakub Kicinski <kuba@kernel.org>
Sat, 10 Aug 2024 05:16:46 +0000 (22:16 -0700)
Unconditionally calling the MPIR query on BF separate mode yields the FW
syndrome below [1]. Do not call it unless admin clearly specified the SD
group, i.e. expressing the intention of using the multi-PF netdev
feature.

This fix covers cases not covered in
commit fca3b4791850 ("net/mlx5: Do not query MPIR on embedded CPU function").

[1]
mlx5_cmd_out_err:808:(pid 8267): ACCESS_REG(0x805) op_mod(0x1) failed,
status bad system state(0x4), syndrome (0x685f19), err(-5)

Fixes: 678eb448055a ("net/mlx5: SD, Implement basic query and instantiation")
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Gal Pressman <gal@nvidia.com>
Link: https://patch.msgid.link/20240808144107.2095424-2-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c

index f6deb5a3f82024e528436af8fd66d238518a6588..eeb0b7ea05f1260b4177e45d38e76da367897307 100644 (file)
@@ -126,7 +126,7 @@ static bool mlx5_sd_is_supported(struct mlx5_core_dev *dev, u8 host_buses)
 }
 
 static int mlx5_query_sd(struct mlx5_core_dev *dev, bool *sdm,
-                        u8 *host_buses, u8 *sd_group)
+                        u8 *host_buses)
 {
        u32 out[MLX5_ST_SZ_DW(mpir_reg)];
        int err;
@@ -135,10 +135,6 @@ static int mlx5_query_sd(struct mlx5_core_dev *dev, bool *sdm,
        if (err)
                return err;
 
-       err = mlx5_query_nic_vport_sd_group(dev, sd_group);
-       if (err)
-               return err;
-
        *sdm = MLX5_GET(mpir_reg, out, sdm);
        *host_buses = MLX5_GET(mpir_reg, out, host_buses);
 
@@ -166,19 +162,23 @@ static int sd_init(struct mlx5_core_dev *dev)
        if (mlx5_core_is_ecpf(dev))
                return 0;
 
+       err = mlx5_query_nic_vport_sd_group(dev, &sd_group);
+       if (err)
+               return err;
+
+       if (!sd_group)
+               return 0;
+
        if (!MLX5_CAP_MCAM_REG(dev, mpir))
                return 0;
 
-       err = mlx5_query_sd(dev, &sdm, &host_buses, &sd_group);
+       err = mlx5_query_sd(dev, &sdm, &host_buses);
        if (err)
                return err;
 
        if (!sdm)
                return 0;
 
-       if (!sd_group)
-               return 0;
-
        group_id = mlx5_sd_group_id(dev, sd_group);
 
        if (!mlx5_sd_is_supported(dev, host_buses)) {