vf->num_mac = 0;
        }
 
-       last_vector_idx = vf->first_vector_idx + pf->vfs.num_msix_per - 1;
+       last_vector_idx = vf->first_vector_idx + vf->num_msix - 1;
 
        /* clear VF MDD event information */
        memset(&vf->mdd_tx_events, 0, sizeof(vf->mdd_tx_events));
        wr32(hw, VPINT_ALLOC_PCI(vf->vf_id), 0);
 
        first = vf->first_vector_idx;
-       last = first + pf->vfs.num_msix_per - 1;
+       last = first + vf->num_msix - 1;
        for (v = first; v <= last; v++) {
                u32 reg;
 
 
        hw = &pf->hw;
        pf_based_first_msix = vf->first_vector_idx;
-       pf_based_last_msix = (pf_based_first_msix + pf->vfs.num_msix_per) - 1;
+       pf_based_last_msix = (pf_based_first_msix + vf->num_msix) - 1;
 
        device_based_first_msix = pf_based_first_msix +
                pf->hw.func_caps.common_cap.msix_vector_first_id;
        device_based_last_msix =
-               (device_based_first_msix + pf->vfs.num_msix_per) - 1;
+               (device_based_first_msix + vf->num_msix) - 1;
        device_based_vf_id = vf->vf_id + hw->func_caps.vf_base_id;
 
        reg = (((device_based_first_msix << VPINT_ALLOC_FIRST_S) &
 
                pci_dev_get(vfdev);
 
+               /* set default number of MSI-X */
+               vf->num_msix = pf->vfs.num_msix_per;
+               vf->num_vf_qs = pf->vfs.num_qps_per;
+               ice_vc_set_default_allowlist(vf);
+
                hash_add_rcu(vfs->table, &vf->entry, vf_id);
        }
 
 
        struct mutex table_lock;        /* Lock for protecting the hash table */
        u16 num_supported;              /* max supported VFs on this PF */
        u16 num_qps_per;                /* number of queue pairs per VF */
-       u16 num_msix_per;               /* number of MSI-X vectors per VF */
+       u16 num_msix_per;               /* default MSI-X vectors per VF */
        unsigned long last_printed_mdd_jiffies; /* MDD message rate limit */
 };
 
 
        /* devlink port data */
        struct devlink_port devlink_port;
+
+       u16 num_msix;                   /* num of MSI-X configured on this VF */
 };
 
 /* Flags for controlling behavior of ice_reset_vf */
 
        vfres->num_vsis = 1;
        /* Tx and Rx queue are equal for VF */
        vfres->num_queue_pairs = vsi->num_txq;
-       vfres->max_vectors = vf->pf->vfs.num_msix_per;
+       vfres->max_vectors = vf->num_msix;
        vfres->rss_key_size = ICE_VSIQF_HKEY_ARRAY_SIZE;
        vfres->rss_lut_size = ICE_LUT_VSI_SIZE;
        vfres->max_mtu = ice_vc_get_max_frame_size(vf);