/* bus-off state */
                priv->can.state = CAN_STATE_BUS_OFF;
                cf->can_id |= CAN_ERR_BUSOFF;
-               /*
-                * disable all interrupts in bus-off mode to ensure that
-                * the CPU is not hogged down
-                */
-               c_can_enable_all_interrupts(priv, DISABLE_ALL_INTERRUPTS);
                can_bus_off(dev);
                break;
        default:
                        netdev_dbg(dev, "entered bus off state\n");
                        work_done += c_can_handle_state_change(dev,
                                                C_CAN_BUS_OFF);
+                       goto end;
                }
 
                /* handle bus recovery events */
 end:
        if (work_done < quota) {
                napi_complete(napi);
-               /* enable all IRQs */
-               c_can_enable_all_interrupts(priv, ENABLE_ALL_INTERRUPTS);
+               /* enable all IRQs if we are not in bus off state */
+               if (priv->can.state != CAN_STATE_BUS_OFF)
+                       c_can_enable_all_interrupts(priv, ENABLE_ALL_INTERRUPTS);
        }
 
        return work_done;