}
        ret = IRQ_HANDLED;
 
-       if (!test_bit(__ICE_DOWN, pf->state)) {
-               ice_service_task_schedule(pf);
-               ice_irq_dynamic_ena(hw, NULL, NULL);
-       }
+       ice_service_task_schedule(pf);
+       ice_irq_dynamic_ena(hw, NULL, NULL);
 
        return ret;
 }
                goto err_init_interrupt_unroll;
        }
 
-       /* Driver is mostly up */
-       clear_bit(__ICE_DOWN, pf->state);
-
        /* In case of MSIX we are going to setup the misc vector right here
         * to handle admin queue events etc. In case of legacy and MSI
         * the misc functionality and queue processing is combined in
 
        ice_verify_cacheline_size(pf);
 
-       /* If no DDP driven features have to be setup, return here */
+       /* If no DDP driven features have to be setup, we are done with probe */
        if (ice_is_safe_mode(pf))
-               return 0;
+               goto probe_done;
 
        /* initialize DDP driven features */
 
        /* print PCI link speed and width */
        pcie_print_link_status(pf->pdev);
 
+probe_done:
+       /* ready to go, so clear down state bit */
+       clear_bit(__ICE_DOWN, pf->state);
        return 0;
 
 err_alloc_sw_unroll:
 {
        struct ice_netdev_priv *np = netdev_priv(netdev);
        struct ice_vsi *vsi = np->vsi;
+       struct ice_pf *pf = vsi->back;
        struct ice_port_info *pi;
        int err;
 
-       if (test_bit(__ICE_NEEDS_RESTART, vsi->back->state)) {
+       if (test_bit(__ICE_NEEDS_RESTART, pf->state)) {
                netdev_err(netdev, "driver needs to be unloaded and reloaded\n");
                return -EIO;
        }
 
+       if (test_bit(__ICE_DOWN, pf->state)) {
+               netdev_err(netdev, "device is not ready yet\n");
+               return -EBUSY;
+       }
+
        netif_carrier_off(netdev);
 
        pi = vsi->port_info;