[libvirt] [PATCH] qemu: restore non-pci hostdev labels after detach

Laine Stump laine at laine.org
Fri Jun 17 15:26:10 UTC 2016


On 06/17/2016 09:34 AM, Ján Tomko wrote:
> Commit 409de00 changed the logic to only match PCI devices
> while moving this before Remove*HostDevice calls.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1342874
> ---
>   src/qemu/qemu_hotplug.c | 17 ++++++++++-------
>   1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index e1c3de7..39d49d4 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -2952,10 +2952,16 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>       int ret = -1;
>       qemuDomainObjPrivatePtr priv = vm->privateData;
>       char *drivestr = NULL;
> +    bool is_vfio = false;
>   
>       VIR_DEBUG("Removing host device %s from domain %p %s",
>                 hostdev->info->alias, vm, vm->def->name);
>   
> +    if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) {
> +        int backend = hostdev->source.subsys.u.pci.backend;
> +        is_vfio = backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
> +    }
> +
>       if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI) {
>           /* build the actual drive id string as generated during
>            * qemuBuildSCSIHostdevDrvStr that is passed to qemu */
> @@ -2993,13 +2999,10 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver,
>   
>       virDomainAuditHostdev(vm, hostdev, "detach", true);
>   
> -    if (hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI &&
> -        hostdev->source.subsys.u.pci.backend !=
> -        VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
> -        if (virSecurityManagerRestoreHostdevLabel(driver->securityManager,
> -                                                  vm->def, hostdev, NULL) < 0)
> -            VIR_WARN("Failed to restore host device labelling");
> -    }
> +    if (!is_vfio &&
> +        virSecurityManagerRestoreHostdevLabel(driver->securityManager,
> +                                              vm->def, hostdev, NULL) < 0)
> +        VIR_WARN("Failed to restore host device labelling");
>   
>       if (qemuTeardownHostdevCgroup(vm, hostdev) < 0)
>           VIR_WARN("Failed to remove host device cgroup ACL");

ACK.




More information about the libvir-list mailing list