The next function numbers are expected to form a linked list ending with 0.
Fixes: 44c2c09488 ("hw/nvme: Add support for SR-IOV") Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> --- hw/nvme/ctrl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index fd917fcda1..12500dc80b 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -8088,7 +8088,12 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp) pcie_endpoint_cap_init(pci_dev, 0x80); pcie_cap_flr_init(pci_dev); if (n->params.sriov_max_vfs) { - pcie_ari_init(pci_dev, 0x100, 1); + uint16_t nextvfn = pci_is_vf(pci_dev) ? + pcie_sriov_vf_number(pci_dev) + 1 : 0; + uint16_t nextfn = nextvfn < n->params.sriov_max_vfs ? + NVME_VF_OFFSET + nextvfn * NVME_VF_STRIDE : 0; + + pcie_ari_init(pci_dev, 0x100, nextfn); } /* add one to max_ioqpairs to account for the admin queue pair */ -- 2.41.0