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