bp->flags &= ~BNXT_FLAG_USING_MSIX;
 }
 
-int bnxt_reserve_rings(struct bnxt *bp)
+int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
 {
        int tcs = netdev_get_num_tc(bp->dev);
-       bool reinit_irq = false;
+       bool irq_cleared = false;
        int rc;
 
        if (!bnxt_need_reserve_rings(bp))
                return 0;
 
-       if (BNXT_NEW_RM(bp) && (bnxt_get_num_msix(bp) != bp->total_irqs)) {
+       if (irq_re_init && BNXT_NEW_RM(bp) &&
+           bnxt_get_num_msix(bp) != bp->total_irqs) {
                bnxt_ulp_irq_stop(bp);
                bnxt_clear_int_mode(bp);
-               reinit_irq = true;
+               irq_cleared = true;
        }
        rc = __bnxt_reserve_rings(bp);
-       if (reinit_irq) {
+       if (irq_cleared) {
                if (!rc)
                        rc = bnxt_init_int_mode(bp);
                bnxt_ulp_irq_restart(bp, rc);
                        return rc;
                }
        }
-       rc = bnxt_reserve_rings(bp);
+       rc = bnxt_reserve_rings(bp, irq_re_init);
        if (rc)
                return rc;
        if ((bp->flags & BNXT_FLAG_RFS) &&
 
 unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp);
 unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp);
 int bnxt_get_avail_msix(struct bnxt *bp, int num);
-int bnxt_reserve_rings(struct bnxt *bp);
+int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init);
 void bnxt_tx_disable(struct bnxt *bp);
 void bnxt_tx_enable(struct bnxt *bp);
 int bnxt_hwrm_set_pause(struct bnxt *);
 
                        bnxt_close_nic(bp, true, false);
                        rc = bnxt_open_nic(bp, true, false);
                } else {
-                       rc = bnxt_reserve_rings(bp);
+                       rc = bnxt_reserve_rings(bp, true);
                }
        }
        if (rc) {