[libvirt] [PATCHv2 08/12] qemu: don't reset PCI devices being assigned with VFIO

Laine Stump laine at laine.org
Tue Jun 25 03:17:37 UTC 2013


I didn't notice that Martin had already ACKed this patch earlier today.
I just pushed it, so no further review is needed (although it would
still be good to get 07/12 reviewed and pushed to be sure this patch has
proper information)

On 06/24/2013 11:05 PM, Laine Stump wrote:
> I just learned that VFIO resets PCI devices when they are assigned to
> guests / returned to the host, so it is redundant for libvirt to reset
> the devices. This patch inhibits calling virPCIDeviceReset to devices
> that will be/were assigned using VFIO.
> ---
>  src/qemu/qemu_hostdev.c | 4 ++++
>  src/qemu/qemu_hotplug.c | 5 +++--
>  2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
> index dfe39c6..d7d54d7 100644
> --- a/src/qemu/qemu_hostdev.c
> +++ b/src/qemu/qemu_hostdev.c
> @@ -548,6 +548,8 @@ int qemuPrepareHostdevPCIDevices(virQEMUDriverPtr driver,
>       * can safely reset them */
>      for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
>          virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> +        if (STREQ_NULLABLE(virPCIDeviceGetStubDriver(dev), "vfio-pci"))
> +            continue;
>          if (virPCIDeviceReset(dev, driver->activePciHostdevs,
>                                driver->inactivePciHostdevs) < 0)
>              goto reattachdevs;
> @@ -1114,6 +1116,8 @@ void qemuDomainReAttachHostdevDevices(virQEMUDriverPtr driver,
>  
>      for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) {
>          virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i);
> +        if (STREQ_NULLABLE(virPCIDeviceGetStubDriver(dev), "vfio-pci"))
> +            continue;
>          if (virPCIDeviceReset(dev, driver->activePciHostdevs,
>                                driver->inactivePciHostdevs) < 0) {
>              virErrorPtr err = virGetLastError();
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index 18f5fa5..46875ad 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -2528,8 +2528,9 @@ qemuDomainDetachHostPciDevice(virQEMUDriverPtr driver,
>      if (pci) {
>          activePci = virPCIDeviceListSteal(driver->activePciHostdevs, pci);
>          if (activePci &&
> -            virPCIDeviceReset(activePci, driver->activePciHostdevs,
> -                              driver->inactivePciHostdevs) == 0) {
> +            (subsys->u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO ||
> +             virPCIDeviceReset(activePci, driver->activePciHostdevs,
> +                               driver->inactivePciHostdevs) == 0)) {
>              qemuReattachPciDevice(activePci, driver);
>              ret = 0;
>          } else {




More information about the libvir-list mailing list