static void ionic_lif_qcq_deinit(struct ionic_lif *lif, struct ionic_qcq *qcq)
 {
        struct ionic_dev *idev = &lif->ionic->idev;
-       struct device *dev = lif->ionic->dev;
 
        if (!qcq)
                return;
        if (qcq->flags & IONIC_QCQ_F_INTR) {
                ionic_intr_mask(idev->intr_ctrl, qcq->intr.index,
                                IONIC_INTR_MASK_SET);
-               irq_set_affinity_hint(qcq->intr.vector, NULL);
-               devm_free_irq(dev, qcq->intr.vector, &qcq->napi);
                netif_napi_del(&qcq->napi);
-               qcq->intr.vector = 0;
        }
 
        qcq->flags &= ~IONIC_QCQ_F_INITED;
        qcq->base = NULL;
        qcq->base_pa = 0;
 
-       if (qcq->flags & IONIC_QCQ_F_INTR)
+       if (qcq->flags & IONIC_QCQ_F_INTR) {
+               irq_set_affinity_hint(qcq->intr.vector, NULL);
+               devm_free_irq(dev, qcq->intr.vector, &qcq->napi);
+               qcq->intr.vector = 0;
                ionic_intr_free(lif, qcq->intr.index);
+       }
 
        devm_kfree(dev, qcq->cq.info);
        qcq->cq.info = NULL;
                ionic_intr_mask_assert(idev->intr_ctrl, new->intr.index,
                                       IONIC_INTR_MASK_SET);
 
+               err = ionic_request_irq(lif, new);
+               if (err) {
+                       netdev_warn(lif->netdev, "irq request failed %d\n", err);
+                       goto err_out_free_intr;
+               }
+
                new->intr.cpu = cpumask_local_spread(new->intr.index,
                                                     dev_to_node(dev));
                if (new->intr.cpu != -1)
        if (!new->cq.info) {
                netdev_err(lif->netdev, "Cannot allocate completion queue info\n");
                err = -ENOMEM;
-               goto err_out_free_intr;
+               goto err_out_free_irq;
        }
 
        err = ionic_cq_init(lif, &new->cq, &new->intr, num_descs, cq_desc_size);
        if (err) {
                netdev_err(lif->netdev, "Cannot initialize completion queue\n");
-               goto err_out_free_intr;
+               goto err_out_free_irq;
        }
 
        new->base = dma_alloc_coherent(dev, total_size, &new->base_pa,
        if (!new->base) {
                netdev_err(lif->netdev, "Cannot allocate queue DMA memory\n");
                err = -ENOMEM;
-               goto err_out_free_intr;
+               goto err_out_free_irq;
        }
 
        new->total_size = total_size;
 
        return 0;
 
+err_out_free_irq:
+       if (flags & IONIC_QCQ_F_INTR)
+               devm_free_irq(dev, new->intr.vector, &new->napi);
 err_out_free_intr:
-       ionic_intr_free(lif, new->intr.index);
+       if (flags & IONIC_QCQ_F_INTR)
+               ionic_intr_free(lif, new->intr.index);
 err_out:
        dev_err(dev, "qcq alloc of %s%d failed %d\n", name, index, err);
        return err;
        netif_napi_add(lif->netdev, &qcq->napi, ionic_rx_napi,
                       NAPI_POLL_WEIGHT);
 
-       err = ionic_request_irq(lif, qcq);
-       if (err) {
-               netif_napi_del(&qcq->napi);
-               return err;
-       }
-
        qcq->flags |= IONIC_QCQ_F_INITED;
 
        return 0;
        netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi,
                       NAPI_POLL_WEIGHT);
 
-       err = ionic_request_irq(lif, qcq);
-       if (err) {
-               netdev_warn(lif->netdev, "adminq irq request failed %d\n", err);
-               netif_napi_del(&qcq->napi);
-               return err;
-       }
-
        napi_enable(&qcq->napi);
 
        if (qcq->flags & IONIC_QCQ_F_INTR)