[libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live

Chen Hanxiao posted 2 patches 7 years, 4 months ago
[libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live
Posted by Chen Hanxiao 7 years, 4 months ago
From: Chen Hanxiao <chenhanxiao@gmail.com>

We lacked of hot unplugging redirdev device.
This patch add support for it.
We could use detach-device --live now.

Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
---
v3:
  use helper qemuDomainDelChardevTLSObjects
  address John's comments

v2:
  rebase on master

 src/qemu/qemu_driver.c  |  4 ++-
 src/qemu/qemu_hotplug.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_hotplug.h |  4 +++
 3 files changed, 98 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 97b194b05..a91288d4b 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7787,6 +7787,9 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
     case VIR_DOMAIN_DEVICE_INPUT:
         ret = qemuDomainDetachInputDevice(vm, dev->data.input);
         break;
+    case VIR_DOMAIN_DEVICE_REDIRDEV:
+        ret = qemuDomainDetachRedirdevDevice(driver, vm, dev->data.redirdev);
+        break;
 
     case VIR_DOMAIN_DEVICE_FS:
     case VIR_DOMAIN_DEVICE_SOUND:
@@ -7796,7 +7799,6 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
     case VIR_DOMAIN_DEVICE_SMARTCARD:
     case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
-    case VIR_DOMAIN_DEVICE_REDIRDEV:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_TPM:
     case VIR_DOMAIN_DEVICE_PANIC:
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index b79807300..724ee4f3f 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -4388,6 +4388,54 @@ qemuDomainRemoveInputDevice(virDomainObjPtr vm,
 }
 
 
+static int
+qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr driver,
+                               virDomainObjPtr vm,
+                               virDomainRedirdevDefPtr dev)
+{
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    virObjectEventPtr event;
+    char *charAlias = NULL;
+    ssize_t idx;
+    int ret = -1;
+
+    VIR_DEBUG("Removing redirdev device %s from domain %p %s",
+              dev->info.alias, vm, vm->def->name);
+
+    if (!(charAlias = qemuAliasChardevFromDevAlias(dev->info.alias)))
+        goto cleanup;
+
+    qemuDomainObjEnterMonitor(driver, vm);
+    /* DeviceDel from Detach may remove chardev,
+     * so we cannot rely on return status to delete TLS chardevs.
+     */
+    ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
+
+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
+        goto cleanup;
+
+    if (qemuDomainDelChardevTLSObjects(driver, vm,
+                                       dev->source, charAlias) < 0)
+        goto cleanup;
+
+    virDomainAuditRedirdev(vm, dev, "detach", true);
+
+    event = virDomainEventDeviceRemovedNewFromObj(vm, dev->info.alias);
+    qemuDomainEventQueue(driver, event);
+
+    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) >= 0)
+        virDomainRedirdevDefRemove(vm->def, idx);
+    qemuDomainReleaseDeviceAddress(vm, &dev->info, NULL);
+    virDomainRedirdevDefFree(dev);
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(charAlias);
+    return ret;
+}
+
+
 int
 qemuDomainRemoveDevice(virQEMUDriverPtr driver,
                        virDomainObjPtr vm,
@@ -5128,6 +5176,49 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
 }
 
 
+int
+qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
+                               virDomainObjPtr vm,
+                               virDomainRedirdevDefPtr dev)
+{
+    int ret = -1;
+    qemuDomainObjPrivatePtr priv = vm->privateData;
+    virDomainRedirdevDefPtr tmpRedirdevDef;
+    ssize_t idx;
+
+    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) < 0) {
+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                       _("no matching redirdev was not found"));
+        return -1;
+    }
+
+    tmpRedirdevDef = vm->def->redirdevs[idx];
+
+    if (!tmpRedirdevDef->info.alias) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("alias not set for redirdev device"));
+        return -1;
+    }
+
+    qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info);
+
+    qemuDomainObjEnterMonitor(driver, vm);
+    if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) < 0) {
+        ignore_value(qemuDomainObjExitMonitor(driver, vm));
+        goto cleanup;
+    }
+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
+        goto cleanup;
+
+    if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
+        ret = qemuDomainRemoveRedirdevDevice(driver, vm, tmpRedirdevDef);
+
+ cleanup:
+    qemuDomainResetDeviceRemoval(vm);
+    return ret;
+}
+
+
 int
 qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
                           virDomainObjPtr vm,
diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h
index 3e0d618e0..9a0c057f1 100644
--- a/src/qemu/qemu_hotplug.h
+++ b/src/qemu/qemu_hotplug.h
@@ -126,6 +126,10 @@ int qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
                              virDomainWatchdogDefPtr watchdog);
 
+int qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
+                                   virDomainObjPtr vm,
+                                   virDomainRedirdevDefPtr dev);
+
 int qemuDomainAttachInputDevice(virQEMUDriverPtr driver,
                                 virDomainObjPtr vm,
                                 virDomainInputDefPtr input);
-- 
2.14.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live
Posted by Ján Tomko 7 years, 4 months ago
On Fri, Dec 22, 2017 at 04:04:03PM +0800, Chen Hanxiao wrote:
>From: Chen Hanxiao <chenhanxiao@gmail.com>
>
>We lacked of hot unplugging redirdev device.
>This patch add support for it.
>We could use detach-device --live now.
>
>Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
>---
>v3:
>  use helper qemuDomainDelChardevTLSObjects
>  address John's comments
>
>v2:
>  rebase on master
>
> src/qemu/qemu_driver.c  |  4 ++-
> src/qemu/qemu_hotplug.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_hotplug.h |  4 +++
> 3 files changed, 98 insertions(+), 1 deletion(-)
>
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index 97b194b05..a91288d4b 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -7787,6 +7787,9 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
>     case VIR_DOMAIN_DEVICE_INPUT:
>         ret = qemuDomainDetachInputDevice(vm, dev->data.input);
>         break;
>+    case VIR_DOMAIN_DEVICE_REDIRDEV:
>+        ret = qemuDomainDetachRedirdevDevice(driver, vm, dev->data.redirdev);
>+        break;
>
>     case VIR_DOMAIN_DEVICE_FS:
>     case VIR_DOMAIN_DEVICE_SOUND:
>@@ -7796,7 +7799,6 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
>     case VIR_DOMAIN_DEVICE_SMARTCARD:
>     case VIR_DOMAIN_DEVICE_MEMBALLOON:
>     case VIR_DOMAIN_DEVICE_NVRAM:
>-    case VIR_DOMAIN_DEVICE_REDIRDEV:
>     case VIR_DOMAIN_DEVICE_NONE:
>     case VIR_DOMAIN_DEVICE_TPM:
>     case VIR_DOMAIN_DEVICE_PANIC:
>diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>index b79807300..724ee4f3f 100644
>--- a/src/qemu/qemu_hotplug.c
>+++ b/src/qemu/qemu_hotplug.c
>@@ -4388,6 +4388,54 @@ qemuDomainRemoveInputDevice(virDomainObjPtr vm,
> }
>
>
>+static int
>+qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr driver,
>+                               virDomainObjPtr vm,
>+                               virDomainRedirdevDefPtr dev)
>+{
>+    qemuDomainObjPrivatePtr priv = vm->privateData;
>+    virObjectEventPtr event;
>+    char *charAlias = NULL;
>+    ssize_t idx;
>+    int ret = -1;
>+
>+    VIR_DEBUG("Removing redirdev device %s from domain %p %s",
>+              dev->info.alias, vm, vm->def->name);
>+
>+    if (!(charAlias = qemuAliasChardevFromDevAlias(dev->info.alias)))
>+        goto cleanup;
>+
>+    qemuDomainObjEnterMonitor(driver, vm);
>+    /* DeviceDel from Detach may remove chardev,
>+     * so we cannot rely on return status to delete TLS chardevs.
>+     */
>+    ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
>+
>+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
>+        goto cleanup;
>+
>+    if (qemuDomainDelChardevTLSObjects(driver, vm,
>+                                       dev->source, charAlias) < 0)
>+        goto cleanup;
>+
>+    virDomainAuditRedirdev(vm, dev, "detach", true);
>+
>+    event = virDomainEventDeviceRemovedNewFromObj(vm, dev->info.alias);
>+    qemuDomainEventQueue(driver, event);
>+
>+    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) >= 0)
>+        virDomainRedirdevDefRemove(vm->def, idx);
>+    qemuDomainReleaseDeviceAddress(vm, &dev->info, NULL);
>+    virDomainRedirdevDefFree(dev);
>+
>+    ret = 0;
>+
>+ cleanup:
>+    VIR_FREE(charAlias);
>+    return ret;
>+}
>+
>+
> int
> qemuDomainRemoveDevice(virQEMUDriverPtr driver,
>                        virDomainObjPtr vm,
>@@ -5128,6 +5176,49 @@ qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
> }
>
>
>+int
>+qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
>+                               virDomainObjPtr vm,
>+                               virDomainRedirdevDefPtr dev)
>+{
>+    int ret = -1;
>+    qemuDomainObjPrivatePtr priv = vm->privateData;
>+    virDomainRedirdevDefPtr tmpRedirdevDef;
>+    ssize_t idx;
>+
>+    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) < 0) {
>+        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>+                       _("no matching redirdev was not found"));
>+        return -1;
>+    }
>+
>+    tmpRedirdevDef = vm->def->redirdevs[idx];
>+
>+    if (!tmpRedirdevDef->info.alias) {
>+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>+                       _("alias not set for redirdev device"));
>+        return -1;
>+    }
>+
>+    qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info);
>+
>+    qemuDomainObjEnterMonitor(driver, vm);
>+    if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) < 0) {
>+        ignore_value(qemuDomainObjExitMonitor(driver, vm));
>+        goto cleanup;
>+    }
>+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
>+        goto cleanup;
>+
>+    if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
>+        ret = qemuDomainRemoveRedirdevDevice(driver, vm, tmpRedirdevDef);

If qemuDomainWaitForDeviceRemoval returns 0 (QEMU supports
DEVICE_DEL_EVENT and did not unplug the device in 5 seconds),
then libvirtd should remove the device asynchronnously, when the device
deletion event arrives.

qemuDomainRemoveRedirdevDevice needs to be also called from
qemuDomainRemoveDevice for that to happen.

Jan

>+
>+ cleanup:
>+    qemuDomainResetDeviceRemoval(vm);
>+    return ret;
>+}
>+
>+
> int
> qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
>                           virDomainObjPtr vm,
>diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h
>index 3e0d618e0..9a0c057f1 100644
>--- a/src/qemu/qemu_hotplug.h
>+++ b/src/qemu/qemu_hotplug.h
>@@ -126,6 +126,10 @@ int qemuDomainDetachWatchdog(virQEMUDriverPtr driver,
>                              virDomainObjPtr vm,
>                              virDomainWatchdogDefPtr watchdog);
>
>+int qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
>+                                   virDomainObjPtr vm,
>+                                   virDomainRedirdevDefPtr dev);
>+
> int qemuDomainAttachInputDevice(virQEMUDriverPtr driver,
>                                 virDomainObjPtr vm,
>                                 virDomainInputDefPtr input);
>-- 
>2.14.3
>
>--
>libvir-list mailing list
>libvir-list@redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live
Posted by John Ferlan 7 years, 4 months ago

On 01/05/2018 05:40 AM, Ján Tomko wrote:
> On Fri, Dec 22, 2017 at 04:04:03PM +0800, Chen Hanxiao wrote:
>> From: Chen Hanxiao <chenhanxiao@gmail.com>
>>
>> We lacked of hot unplugging redirdev device.
>> This patch add support for it.
>> We could use detach-device --live now.
>>
>> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
>> ---
>> v3:
>>  use helper qemuDomainDelChardevTLSObjects
>>  address John's comments
>>
>> v2:
>>  rebase on master
>>
>> src/qemu/qemu_driver.c  |  4 ++-
>> src/qemu/qemu_hotplug.c | 91
>> +++++++++++++++++++++++++++++++++++++++++++++++++
>> src/qemu/qemu_hotplug.h |  4 +++
>> 3 files changed, 98 insertions(+), 1 deletion(-)
>>

[...]

>> +int
>> +qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
>> +                               virDomainObjPtr vm,
>> +                               virDomainRedirdevDefPtr dev)
>> +{
>> +    int ret = -1;
>> +    qemuDomainObjPrivatePtr priv = vm->privateData;
>> +    virDomainRedirdevDefPtr tmpRedirdevDef;
>> +    ssize_t idx;
>> +
>> +    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) < 0) {
>> +        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
>> +                       _("no matching redirdev was not found"));
>> +        return -1;
>> +    }
>> +
>> +    tmpRedirdevDef = vm->def->redirdevs[idx];
>> +
>> +    if (!tmpRedirdevDef->info.alias) {
>> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                       _("alias not set for redirdev device"));
>> +        return -1;
>> +    }
>> +
>> +    qemuDomainMarkDeviceForRemoval(vm, &tmpRedirdevDef->info);
>> +
>> +    qemuDomainObjEnterMonitor(driver, vm);
>> +    if (qemuMonitorDelDevice(priv->mon, tmpRedirdevDef->info.alias) <
>> 0) {
>> +        ignore_value(qemuDomainObjExitMonitor(driver, vm));
>> +        goto cleanup;
>> +    }
>> +    if (qemuDomainObjExitMonitor(driver, vm) < 0)
>> +        goto cleanup;
>> +
>> +    if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
>> +        ret = qemuDomainRemoveRedirdevDevice(driver, vm,
>> tmpRedirdevDef);
> 
> If qemuDomainWaitForDeviceRemoval returns 0 (QEMU supports
> DEVICE_DEL_EVENT and did not unplug the device in 5 seconds),
> then libvirtd should remove the device asynchronnously, when the device
> deletion event arrives.
> 
> qemuDomainRemoveRedirdevDevice needs to be also called from
> qemuDomainRemoveDevice for that to happen.
> 
> Jan
> 

oh yeah - right, adding :

+    case VIR_DOMAIN_DEVICE_REDIRDEV:
+        ret = qemuDomainRemoveRedirdevDevice(driver, vm,
dev->data.redirdev);
+        break;
+

to qemuDomainRemoveDevice

Tks -

John

>> +
>> + cleanup:
>> +    qemuDomainResetDeviceRemoval(vm);
>> +    return ret;
>> +}
>> +
>> +
>> int
>> qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
>>                           virDomainObjPtr vm,
>> diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h
>> index 3e0d618e0..9a0c057f1 100644
>> --- a/src/qemu/qemu_hotplug.h
>> +++ b/src/qemu/qemu_hotplug.h
>> @@ -126,6 +126,10 @@ int qemuDomainDetachWatchdog(virQEMUDriverPtr
>> driver,
>>                              virDomainObjPtr vm,
>>                              virDomainWatchdogDefPtr watchdog);
>>
>> +int qemuDomainDetachRedirdevDevice(virQEMUDriverPtr driver,
>> +                                   virDomainObjPtr vm,
>> +                                   virDomainRedirdevDefPtr dev);
>> +
>> int qemuDomainAttachInputDevice(virQEMUDriverPtr driver,
>>                                 virDomainObjPtr vm,
>>                                 virDomainInputDefPtr input);
>> -- 
>> 2.14.3
>>
>> -- 
>> libvir-list mailing list
>> libvir-list@redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list
> 
> 
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live
Posted by Chen Hanxiao 7 years, 4 months ago
在 2018-01-05 21:16:20,"John Ferlan" <jferlan@redhat.com> 写道:
>
>
>On 01/05/2018 05:40 AM, Ján Tomko wrote:
>> On Fri, Dec 22, 2017 at 04:04:03PM +0800, Chen Hanxiao wrote:
>>> From: Chen Hanxiao <chenhanxiao@gmail.com>
>>>
[...]
>>> +    if ((ret = qemuDomainWaitForDeviceRemoval(vm)) == 1)
>>> +        ret = qemuDomainRemoveRedirdevDevice(driver, vm,
>>> tmpRedirdevDef);
>> 
>> If qemuDomainWaitForDeviceRemoval returns 0 (QEMU supports
>> DEVICE_DEL_EVENT and did not unplug the device in 5 seconds),
>> then libvirtd should remove the device asynchronnously, when the device
>> deletion event arrives.
>> 
>> qemuDomainRemoveRedirdevDevice needs to be also called from
>> qemuDomainRemoveDevice for that to happen.
>> 
>> Jan
>> 
>
>oh yeah - right, adding :
>
>+    case VIR_DOMAIN_DEVICE_REDIRDEV:
>+        ret = qemuDomainRemoveRedirdevDevice(driver, vm,
>dev->data.redirdev);
>+        break;
>+
>
>to qemuDomainRemoveDevice
>

Thanks, will be updated soon.

Regards,
- Chen

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 1/2] qemu: Add support for hot unplugging redirdev device which can use the detach-device --live
Posted by John Ferlan 7 years, 4 months ago

On 12/22/2017 03:04 AM, Chen Hanxiao wrote:
> From: Chen Hanxiao <chenhanxiao@gmail.com>
> 
> We lacked of hot unplugging redirdev device.
> This patch add support for it.
> We could use detach-device --live now.

Change the commit message to:

Commit id '162efa1a' added support hotplug a redirdev, but
did not add the hot unplug. This patch will add that support
to allow usage of the detach-device --live on the device.

> 
> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com>
> ---
> v3:
>   use helper qemuDomainDelChardevTLSObjects
>   address John's comments
> 
> v2:
>   rebase on master
> 
>  src/qemu/qemu_driver.c  |  4 ++-
>  src/qemu/qemu_hotplug.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
>  src/qemu/qemu_hotplug.h |  4 +++
>  3 files changed, 98 insertions(+), 1 deletion(-)
> 

[...]

> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
> index b79807300..724ee4f3f 100644
> --- a/src/qemu/qemu_hotplug.c
> +++ b/src/qemu/qemu_hotplug.c
> @@ -4388,6 +4388,54 @@ qemuDomainRemoveInputDevice(virDomainObjPtr vm,
>  }
>  
>  
> +static int
> +qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr driver,
> +                               virDomainObjPtr vm,
> +                               virDomainRedirdevDefPtr dev)
> +{
> +    qemuDomainObjPrivatePtr priv = vm->privateData;
> +    virObjectEventPtr event;
> +    char *charAlias = NULL;
> +    ssize_t idx;
> +    int ret = -1;
> +
> +    VIR_DEBUG("Removing redirdev device %s from domain %p %s",
> +              dev->info.alias, vm, vm->def->name);
> +
> +    if (!(charAlias = qemuAliasChardevFromDevAlias(dev->info.alias)))
> +        goto cleanup;
> +
> +    qemuDomainObjEnterMonitor(driver, vm);
> +    /* DeviceDel from Detach may remove chardev,
> +     * so we cannot rely on return status to delete TLS chardevs.
> +     */
> +    ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
> +
> +    if (qemuDomainObjExitMonitor(driver, vm) < 0)
> +        goto cleanup;
> +
> +    if (qemuDomainDelChardevTLSObjects(driver, vm,
> +                                       dev->source, charAlias) < 0)

The above fits on one line.

> +        goto cleanup;
> +
> +    virDomainAuditRedirdev(vm, dev, "detach", true);
> +
> +    event = virDomainEventDeviceRemovedNewFromObj(vm, dev->info.alias);
> +    qemuDomainEventQueue(driver, event);
> +
> +    if ((idx = virDomainRedirdevDefFind(vm->def, dev)) >= 0)
> +        virDomainRedirdevDefRemove(vm->def, idx);
> +    qemuDomainReleaseDeviceAddress(vm, &dev->info, NULL);
> +    virDomainRedirdevDefFree(dev);
> +
> +    ret = 0;
> +
> + cleanup:
> +    VIR_FREE(charAlias);
> +    return ret;
> +}
> +
> +

[...]

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

But I'll give it a day or so before pushing - just in case there's a
straggler comment or two...

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