free_irq(wx->msix_q_entries[vector].vector,
                         wx->q_vector[vector]);
        }
-       wx_reset_interrupt_capability(wx);
        return err;
 }
 
        free_irq(txgbe->link_irq, txgbe);
        free_irq(txgbe->misc.irq, txgbe);
        txgbe_del_irq_domain(txgbe);
+       txgbe->wx->misc_irq_domain = false;
 }
 
 int txgbe_setup_misc_irq(struct txgbe *txgbe)
 
 
        wx_configure(wx);
 
-       err = txgbe_request_queue_irqs(wx);
+       err = txgbe_setup_misc_irq(wx->priv);
        if (err)
                goto err_free_resources;
 
+       err = txgbe_request_queue_irqs(wx);
+       if (err)
+               goto err_free_misc_irq;
+
        /* Notify the stack of the actual queue counts. */
        err = netif_set_real_num_tx_queues(netdev, wx->num_tx_queues);
        if (err)
 
 err_free_irq:
        wx_free_irq(wx);
+err_free_misc_irq:
+       txgbe_free_misc_irq(wx->priv);
+       wx_reset_interrupt_capability(wx);
 err_free_resources:
        wx_free_resources(wx);
 err_reset:
        wx_ptp_stop(wx);
        txgbe_down(wx);
        wx_free_irq(wx);
+       txgbe_free_misc_irq(wx->priv);
        wx_free_resources(wx);
        txgbe_fdir_filter_exit(wx);
        wx_control_hw(wx, false);
 int txgbe_setup_tc(struct net_device *dev, u8 tc)
 {
        struct wx *wx = netdev_priv(dev);
-       struct txgbe *txgbe = wx->priv;
 
        /* Hardware has to reinitialize queues and interrupts to
         * match packet buffer alignment. Unfortunately, the
        else
                txgbe_reset(wx);
 
-       txgbe_free_misc_irq(txgbe);
        wx_clear_interrupt_scheme(wx);
 
        if (tc)
                netdev_reset_tc(dev);
 
        wx_init_interrupt_scheme(wx);
-       txgbe_setup_misc_irq(txgbe);
 
        if (netif_running(dev))
                txgbe_open(dev);
 
        txgbe_init_fdir(txgbe);
 
-       err = txgbe_setup_misc_irq(txgbe);
-       if (err)
-               goto err_release_hw;
-
        err = txgbe_init_phy(txgbe);
        if (err)
-               goto err_free_misc_irq;
+               goto err_release_hw;
 
        err = register_netdev(netdev);
        if (err)
 
 err_remove_phy:
        txgbe_remove_phy(txgbe);
-err_free_misc_irq:
-       txgbe_free_misc_irq(txgbe);
 err_release_hw:
        wx_clear_interrupt_scheme(wx);
        wx_control_hw(wx, false);
        unregister_netdev(netdev);
 
        txgbe_remove_phy(txgbe);
-       txgbe_free_misc_irq(txgbe);
        wx_free_isb_resources(wx);
 
        pci_release_selected_regions(pdev,