net/mlx5: Update log_max_qp value to FW max capability
authorMaher Sanalla <msanalla@nvidia.com>
Wed, 5 Jan 2022 12:50:11 +0000 (14:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:55 +0000 (11:04 +0100)
[ Upstream commit f79a609ea6bf54ad2d2c24e4de4524288b221666 ]

log_max_qp in driver's default profile #2 was set to 18, but FW actually
supports 17 at the most - a situation that led to the concerning print
when the driver is loaded:
"log_max_qp value in current profile is 18, changing to HCA capabaility
limit (17)"

The expected behavior from mlx5_profile #2 is to match the maximum FW
capability in regards to log_max_qp. Thus, log_max_qp in profile #2 is
initialized to a defined static value (0xff) - which basically means that
when loading this profile, log_max_qp value  will be what the currently
installed FW supports at most.

Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/main.c

index 92b01858d7f3ec5b4d89b364db80f7c46e85cb38..29b7297a836a552a17f4d71f6c3b58d566a9a197 100644 (file)
@@ -97,6 +97,8 @@ enum {
        MLX5_ATOMIC_REQ_MODE_HOST_ENDIANNESS = 0x1,
 };
 
+#define LOG_MAX_SUPPORTED_QPS 0xff
+
 static struct mlx5_profile profile[] = {
        [0] = {
                .mask           = 0,
@@ -108,7 +110,7 @@ static struct mlx5_profile profile[] = {
        [2] = {
                .mask           = MLX5_PROF_MASK_QP_SIZE |
                                  MLX5_PROF_MASK_MR_CACHE,
-               .log_max_qp     = 18,
+               .log_max_qp     = LOG_MAX_SUPPORTED_QPS,
                .mr_cache[0]    = {
                        .size   = 500,
                        .limit  = 250
@@ -513,7 +515,9 @@ static int handle_hca_cap(struct mlx5_core_dev *dev, void *set_ctx)
                 to_fw_pkey_sz(dev, 128));
 
        /* Check log_max_qp from HCA caps to set in current profile */
-       if (MLX5_CAP_GEN_MAX(dev, log_max_qp) < prof->log_max_qp) {
+       if (prof->log_max_qp == LOG_MAX_SUPPORTED_QPS) {
+               prof->log_max_qp = MLX5_CAP_GEN_MAX(dev, log_max_qp);
+       } else if (MLX5_CAP_GEN_MAX(dev, log_max_qp) < prof->log_max_qp) {
                mlx5_core_warn(dev, "log_max_qp value in current profile is %d, changing it to HCA capability limit (%d)\n",
                               prof->log_max_qp,
                               MLX5_CAP_GEN_MAX(dev, log_max_qp));