A SR-IOV VF needs to use pcie_sriov_vf_register_bar() instead of pci_register_bar().
Co-developed-by: Yui Washizu <yui.wash...@gmail.com> Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> --- hw/pci/msix.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hw/pci/msix.c b/hw/pci/msix.c index ab8869d9d0..3b94ce389f 100644 --- a/hw/pci/msix.c +++ b/hw/pci/msix.c @@ -421,8 +421,12 @@ int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries, return ret; } - pci_register_bar(dev, bar_nr, PCI_BASE_ADDRESS_SPACE_MEMORY, - &dev->msix_exclusive_bar); + if (pci_is_vf(dev)) { + pcie_sriov_vf_register_bar(dev, bar_nr, &dev->msix_exclusive_bar); + } else { + pci_register_bar(dev, bar_nr, PCI_BASE_ADDRESS_SPACE_MEMORY, + &dev->msix_exclusive_bar); + } return 0; } -- 2.43.0