{
        enum hl_device_status status;
 
-       if (hdev->reset_info.in_reset)
-               status = HL_DEVICE_STATUS_IN_RESET;
-       else if (hdev->reset_info.needs_reset)
+       if (hdev->reset_info.in_reset) {
+               if (hdev->reset_info.is_in_soft_reset)
+                       status = HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE;
+               else
+                       status = HL_DEVICE_STATUS_IN_RESET;
+       } else if (hdev->reset_info.needs_reset) {
                status = HL_DEVICE_STATUS_NEEDS_RESET;
-       else if (hdev->disabled)
+       } else if (hdev->disabled) {
                status = HL_DEVICE_STATUS_MALFUNCTION;
-       else if (!hdev->init_done)
+       } else if (!hdev->init_done) {
                status = HL_DEVICE_STATUS_IN_DEVICE_CREATION;
-       else
+       } else {
                status = HL_DEVICE_STATUS_OPERATIONAL;
+       }
 
        return status;
 }
 
        switch (current_status) {
        case HL_DEVICE_STATUS_IN_RESET:
+       case HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE:
        case HL_DEVICE_STATUS_MALFUNCTION:
        case HL_DEVICE_STATUS_NEEDS_RESET:
                return false;
 
                        "Can't open %s because it is %s\n",
                        dev_name(hdev->dev), hdev->status[status]);
 
-               if (status == HL_DEVICE_STATUS_IN_RESET)
+               if (status == HL_DEVICE_STATUS_IN_RESET ||
+                                       status == HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE)
                        rc = -EAGAIN;
                else
                        rc = -EPERM;
        strncpy(hdev->status[HL_DEVICE_STATUS_NEEDS_RESET], "needs reset", HL_STR_MAX);
        strncpy(hdev->status[HL_DEVICE_STATUS_IN_DEVICE_CREATION],
                                        "in device creation", HL_STR_MAX);
+       strncpy(hdev->status[HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE],
+                                       "in reset after device release", HL_STR_MAX);
+
 
        /* First, we must find out which ASIC are we handling. This is needed
         * to configure the behavior of the driver (kernel parameters)
 
  * @HL_DEVICE_STATUS_NEEDS_RESET: Device needs reset because auto reset was disabled.
  * @HL_DEVICE_STATUS_IN_DEVICE_CREATION: Device is operational but its creation is still in
  *                                       progress.
+ * @HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE: Device is currently during reset that was
+ *                                                  triggered because the user released the device
  * @HL_DEVICE_STATUS_LAST: Last status.
  */
 enum hl_device_status {
        HL_DEVICE_STATUS_MALFUNCTION,
        HL_DEVICE_STATUS_NEEDS_RESET,
        HL_DEVICE_STATUS_IN_DEVICE_CREATION,
-       HL_DEVICE_STATUS_LAST = HL_DEVICE_STATUS_IN_DEVICE_CREATION
+       HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE,
+       HL_DEVICE_STATUS_LAST = HL_DEVICE_STATUS_IN_RESET_AFTER_DEVICE_RELEASE
 };
 
 enum hl_server_type {