]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: Print initializing field in case of timeout
authorShay Drory <shayd@nvidia.com>
Tue, 22 Mar 2022 14:55:58 +0000 (16:55 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 3 May 2022 04:21:12 +0000 (21:21 -0700)
Print the initializing field in case of FW couldn't initialize before
timeout. This will help to better understand the root cause in some
cases.

Signed-off-by: Shay Drory <shayd@nvidia.com>
Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/main.c

index d504c8cb8f9642e435f7a24d0c7921f0b5075fba..95d7712c2d9ad060972d75d9171b9e0f9eec9a71 100644 (file)
@@ -177,30 +177,29 @@ static struct mlx5_profile profile[] = {
        },
 };
 
-static int fw_initializing(struct mlx5_core_dev *dev)
-{
-       return ioread32be(&dev->iseg->initializing) >> 31;
-}
-
 static int wait_fw_init(struct mlx5_core_dev *dev, u32 max_wait_mili,
                        u32 warn_time_mili)
 {
        unsigned long warn = jiffies + msecs_to_jiffies(warn_time_mili);
        unsigned long end = jiffies + msecs_to_jiffies(max_wait_mili);
+       u32 fw_initializing;
        int err = 0;
 
-       while (fw_initializing(dev)) {
+       do {
+               fw_initializing = ioread32be(&dev->iseg->initializing);
+               if (!(fw_initializing >> 31))
+                       break;
                if (time_after(jiffies, end)) {
                        err = -EBUSY;
                        break;
                }
                if (warn_time_mili && time_after(jiffies, warn)) {
-                       mlx5_core_warn(dev, "Waiting for FW initialization, timeout abort in %ds\n",
-                                      jiffies_to_msecs(end - warn) / 1000);
+                       mlx5_core_warn(dev, "Waiting for FW initialization, timeout abort in %ds (0x%x)\n",
+                                      jiffies_to_msecs(end - warn) / 1000, fw_initializing);
                        warn = jiffies + msecs_to_jiffies(warn_time_mili);
                }
                msleep(mlx5_tout_ms(dev, FW_PRE_INIT_WAIT));
-       }
+       } while (true);
 
        return err;
 }