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>

Reply via email to