Alex Williamson <alex.william...@redhat.com> writes: > When an assigned device is initialized it copies the device config > space into the emulated config space. Unfortunately multifunction is > setup prior to the device initfn and gets clobbered. We need to > restore it just like pci-assign does. > > Signed-off-by: Alex Williamson <alex.william...@redhat.com> > Cc: qemu-sta...@nongnu.org > --- > > Anthony, please apply directly or let me know if you'd prefer a pull > request. Thanks > > hw/misc/vfio.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c > index fe95e03..f7f8a19 100644 > --- a/hw/misc/vfio.c > +++ b/hw/misc/vfio.c > @@ -3568,6 +3568,13 @@ static int vfio_initfn(PCIDevice *pdev) > vdev->emulated_config_bits[PCI_HEADER_TYPE] = > PCI_HEADER_TYPE_MULTI_FUNCTION; > > + /* Restore or clear multifunction, this is always controlled by QEMU */ > + if (vdev->pdev.cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { > + vdev->pdev.config[PCI_HEADER_TYPE] |= PCI_HEADER_TYPE_MULTI_FUNCTION; > + } else { > + vdev->pdev.config[PCI_HEADER_TYPE] &= > ~PCI_HEADER_TYPE_MULTI_FUNCTION; > + } > + > /* > * Clear host resource mapping info. If we choose not to register a > * BAR, such as might be the case with the option ROM, we can get
Reviewed-by: Bandan Das <b...@redhat.com>