return true;
 }
 
+static void enter_error_state(struct mlx5_core_dev *dev, bool force)
+{
+       if (mlx5_health_check_fatal_sensors(dev) || force) { /* protected state setting */
+               dev->state = MLX5_DEVICE_STATE_INTERNAL_ERROR;
+               mlx5_cmd_flush(dev);
+       }
+
+       mlx5_notifier_call_chain(dev->priv.events, MLX5_DEV_EVENT_SYS_ERROR, (void *)1);
+}
+
 void mlx5_enter_error_state(struct mlx5_core_dev *dev, bool force)
 {
        bool err_detected = false;
                goto unlock;
        }
 
-       if (mlx5_health_check_fatal_sensors(dev) || force) { /* protected state setting */
-               dev->state = MLX5_DEVICE_STATE_INTERNAL_ERROR;
-               mlx5_cmd_flush(dev);
-       }
-
-       mlx5_notifier_call_chain(dev->priv.events, MLX5_DEV_EVENT_SYS_ERROR, (void *)1);
+       enter_error_state(dev, force);
 unlock:
        mutex_unlock(&dev->intf_state_mutex);
 }
        priv = container_of(health, struct mlx5_priv, health);
        dev = container_of(priv, struct mlx5_core_dev, priv);
 
-       mlx5_enter_error_state(dev, false);
+       enter_error_state(dev, false);
        if (IS_ERR_OR_NULL(health->fw_fatal_reporter)) {
                if (mlx5_health_try_recover(dev))
                        mlx5_core_err(dev, "health recovery failed\n");
                mlx5_core_err(dev, "Fatal error %u detected\n", fatal_error);
                dev->priv.health.fatal_error = fatal_error;
                print_health_info(dev);
+               dev->state = MLX5_DEVICE_STATE_INTERNAL_ERROR;
                mlx5_trigger_health_work(dev);
-               goto out;
+               return;
        }
 
        count = ioread32be(health->health_counter);