Re: [PATCH] qemu: fix hot unplug of PCI devices with VFIO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm new to this community and this is the first patch/fix that I'm trying to get merged.

I would appreciate if people could review it and give me some feedback.

Do I need to raise a bug as well ?

Regards,
/ludovic

On 02/05/2016 02:11 PM, Ludovic Beliveau wrote:
> Currently, on hot unplug of PCI devices with VFIO driver for QEMU, libvirt is
> trying to restore the host devices to it's previous value (basically a chown
> on the previous user/group).
>
> However for devices with VFIO driver, when the device is unbinded it is
> removed from the /dev/vfio file system causing the restore label to fail.
>
> The fix is to not restore the label for those PCI devices since they are going
> to be teared down anyway.
>
> Signed-off-by: Ludovic Beliveau <ludovic.beliveau@xxxxxxxxxxxxx>
> ---
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index f8db960..f5beabd 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -2996,6 +2996,8 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>      int ret = -1;
>      qemuDomainObjPrivatePtr priv = vm->privateData;
>      char *drivestr = NULL;
> +    virDomainHostdevSubsysPCIPtr pcisrc = NULL;
> +    bool is_vfio = false;
>  
>      VIR_DEBUG("Removing host device %s from domain %p %s",
>                hostdev->info->alias, vm, vm->def->name);
> @@ -3039,6 +3041,8 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>  
>      switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) {
>      case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
> +        pcisrc = &hostdev->source.subsys.u.pci;
> +        is_vfio = pcisrc->backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
>          qemuDomainRemovePCIHostDevice(driver, vm, hostdev);
>          /* QEMU might no longer need to lock as much memory, eg. we just
>           * detached the last VFIO device, so adjust the limit here */
> @@ -3058,7 +3062,8 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>      if (qemuTeardownHostdevCgroup(vm, hostdev) < 0)
>          VIR_WARN("Failed to remove host device cgroup ACL");
>  
> -    if (virSecurityManagerRestoreHostdevLabel(driver->securityManager,
> +    if (!is_vfio &&
> +        virSecurityManagerRestoreHostdevLabel(driver->securityManager,
>                                                vm->def, hostdev, NULL) < 0) {
>          VIR_WARN("Failed to restore host device labelling");
>      }
>
> --
> libvir-list mailing list
> libvir-list@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/libvir-list
>


--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]