bnxt_re_limit_vf_res(&rdev->qplib_ctx, num_vfs);
 }
 
-static void bnxt_re_sriov_config(void *p, int num_vfs)
+static void bnxt_re_vf_res_config(struct bnxt_re_dev *rdev)
 {
-       struct bnxt_re_dev *rdev = p;
 
        if (test_bit(BNXT_RE_FLAG_ERR_DEVICE_DETACHED, &rdev->flags))
                return;
-       rdev->num_vfs = num_vfs;
+       rdev->num_vfs = pci_sriov_get_totalvfs(rdev->en_dev->pdev);
        if (!bnxt_qplib_is_chip_gen_p5(rdev->chip_ctx)) {
                bnxt_re_set_resource_limits(rdev);
                bnxt_qplib_set_func_resources(&rdev->qplib_res, &rdev->rcfw,
 }
 
 static struct bnxt_ulp_ops bnxt_re_ulp_ops = {
-       .ulp_sriov_config = bnxt_re_sriov_config,
        .ulp_irq_stop = bnxt_re_stop_irq,
        .ulp_irq_restart = bnxt_re_start_irq
 };
                INIT_DELAYED_WORK(&rdev->worker, bnxt_re_worker);
                set_bit(BNXT_RE_FLAG_QOS_WORK_REG, &rdev->flags);
                schedule_delayed_work(&rdev->worker, msecs_to_jiffies(30000));
+               /*
+                * Use the total VF count since the actual VF count may not be
+                * available at this point.
+                */
+               bnxt_re_vf_res_config(rdev);
        }
 
        return 0;
 
                *num_vfs = rc;
        }
 
-       bnxt_ulp_sriov_cfg(bp, *num_vfs);
        return 0;
 }
 
                goto err_out2;
 
        rc = pci_enable_sriov(bp->pdev, *num_vfs);
-       if (rc) {
-               bnxt_ulp_sriov_cfg(bp, 0);
+       if (rc)
                goto err_out2;
-       }
 
        return 0;
 
        rtnl_lock();
        bnxt_restore_pf_fw_resources(bp);
        rtnl_unlock();
-
-       bnxt_ulp_sriov_cfg(bp, 0);
 }
 
 int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs)
 
 }
 EXPORT_SYMBOL(bnxt_send_msg);
 
-static void bnxt_ulp_get(struct bnxt_ulp *ulp)
-{
-       atomic_inc(&ulp->ref_count);
-}
-
-static void bnxt_ulp_put(struct bnxt_ulp *ulp)
-{
-       atomic_dec(&ulp->ref_count);
-}
-
 void bnxt_ulp_stop(struct bnxt *bp)
 {
        struct bnxt_aux_priv *aux_priv = bp->aux_priv;
 
 }
 
-void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs)
-{
-       struct bnxt_en_dev *edev = bp->edev;
-       struct bnxt_ulp_ops *ops;
-       struct bnxt_ulp *ulp;
-
-       if (!edev)
-               return;
-       ulp = edev->ulp_tbl;
-
-       ops = rcu_dereference(ulp->ulp_ops);
-       if (!ops || !ops->ulp_sriov_config)
-               return;
-
-       bnxt_ulp_get(ulp);
-       ops->ulp_sriov_config(ulp->handle, num_vfs);
-       bnxt_ulp_put(ulp);
-}
-
 void bnxt_ulp_irq_stop(struct bnxt *bp)
 {
        struct bnxt_en_dev *edev = bp->edev;