return rc;
 }
 
-int bnxt_hwrm_func_qcaps(struct bnxt *bp)
+static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
 {
        int rc = 0;
        struct hwrm_func_qcaps_input req = {0};
        return rc;
 }
 
+void bnxt_restore_pf_fw_resources(struct bnxt *bp)
+{
+       ASSERT_RTNL();
+       bnxt_hwrm_func_qcaps(bp);
+}
+
 static void bnxt_parse_log_pcie_link(struct bnxt *bp)
 {
        enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
 
 int hwrm_send_message(struct bnxt *, void *, u32, int);
 int hwrm_send_message_silent(struct bnxt *, void *, u32, int);
 int bnxt_hwrm_set_coal(struct bnxt *);
-int bnxt_hwrm_func_qcaps(struct bnxt *);
 void bnxt_set_max_func_irqs(struct bnxt *bp, unsigned int max);
 void bnxt_tx_disable(struct bnxt *bp);
 void bnxt_tx_enable(struct bnxt *bp);
 int bnxt_close_nic(struct bnxt *, bool, bool);
 int bnxt_setup_mq_tc(struct net_device *dev, u8 tc);
 int bnxt_get_max_rings(struct bnxt *, int *, int *, bool);
+void bnxt_restore_pf_fw_resources(struct bnxt *bp);
 #endif
 
        bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
 
        /* Remaining rings are distributed equally amongs VF's for now */
-       /* TODO: the following workaroud is needed to restrict total number
-        * of vf_cp_rings not exceed number of HW ring groups. This WA should
-        * be removed once new HWRM provides HW ring groups capability in
-        * hwrm_func_qcap.
-        */
-       vf_cp_rings = min_t(u16, pf->max_cp_rings, pf->max_stat_ctxs);
-       vf_cp_rings = (vf_cp_rings - bp->cp_nr_rings) / num_vfs;
-       /* TODO: restore this logic below once the WA above is removed */
-       /* vf_cp_rings = (pf->max_cp_rings - bp->cp_nr_rings) / num_vfs; */
+       vf_cp_rings = (pf->max_cp_rings - bp->cp_nr_rings) / num_vfs;
        vf_stat_ctx = (pf->max_stat_ctxs - bp->num_stat_ctxs) / num_vfs;
        if (bp->flags & BNXT_FLAG_AGG_RINGS)
                vf_rx_rings = (pf->max_rx_rings - bp->rx_nr_rings * 2) /
 
        bp->pf.active_vfs = 0;
        /* Reclaim all resources for the PF. */
-       bnxt_hwrm_func_qcaps(bp);
+       rtnl_lock();
+       bnxt_restore_pf_fw_resources(bp);
+       rtnl_unlock();
 }
 
 int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs)