[PATCH v2 09/12] test_driver: add memballoon support for testDomainDetachDeviceLiveAndConfig

Luke Yue lukedyue at gmail.com
Fri Aug 20 12:44:36 UTC 2021


As the memballoon device shouldn't be hot-(un)pluggable, so error if try
to remove it on a running domain, for removing from config, it's fine.

Signed-off-by: Luke Yue <lukedyue at gmail.com>
---
 src/hypervisor/domain_driver.c | 18 ++++++++++++++++++
 src/hypervisor/domain_driver.h |  3 +++
 src/libvirt_private.syms       |  1 +
 src/test/test_driver.c         | 19 ++++++++++++++++---
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c
index 93754ae08a..34e225dd2d 100644
--- a/src/hypervisor/domain_driver.c
+++ b/src/hypervisor/domain_driver.c
@@ -797,3 +797,21 @@ virDomainDriverDetachTPMDeviceConfig(virDomainDef *vmdef,
 
     return 0;
 }
+
+
+int
+virDomainDriverDetachMemballoonDeviceConfig(virDomainDef *vmdef,
+                                            virDomainDeviceDef *dev)
+{
+    if (!vmdef->memballoon ||
+        !virDomainMemballoonDefEquals(dev->data.memballoon,
+                                      vmdef->memballoon)) {
+        virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+                       _("matching memballoon device not found"));
+        return -1;
+    }
+    virDomainMemballoonDefFree(vmdef->memballoon);
+    vmdef->memballoon = NULL;
+
+    return 0;
+}
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
index 6cb9defb58..4d8b1f7b36 100644
--- a/src/hypervisor/domain_driver.h
+++ b/src/hypervisor/domain_driver.h
@@ -104,3 +104,6 @@ int virDomainDriverDetachVsockDeviceConfig(virDomainDef *vmdef,
 
 int virDomainDriverDetachTPMDeviceConfig(virDomainDef *vmdef,
                                          virDomainDeviceDef *dev);
+
+int virDomainDriverDetachMemballoonDeviceConfig(virDomainDef *vmdef,
+                                                virDomainDeviceDef *dev);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 57f0d24c36..fc4e8736b0 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1543,6 +1543,7 @@ virDomainDriverDetachFSDeviceConfig;
 virDomainDriverDetachHostdevDeviceConfig;
 virDomainDriverDetachInputDeviceConfig;
 virDomainDriverDetachLeaseDeviceConfig;
+virDomainDriverDetachMemballoonDeviceConfig;
 virDomainDriverDetachMemoryDeviceConfig;
 virDomainDriverDetachNetDeviceConfig;
 virDomainDriverDetachRedirdevDeviceConfig;
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index c12a76749c..bf26df0d18 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -9539,7 +9539,8 @@ testDomainGetMessages(virDomainPtr dom,
 
 static int
 testDomainDetachDeviceLiveAndConfig(virDomainDef *vmdef,
-                                    virDomainDeviceDef *dev)
+                                    virDomainDeviceDef *dev,
+                                    unsigned int flags)
 {
     virDomainChrDef *chr;
 
@@ -9641,11 +9642,23 @@ testDomainDetachDeviceLiveAndConfig(virDomainDef *vmdef,
 
         break;
 
+    case VIR_DOMAIN_DEVICE_MEMBALLOON:
+        if (flags & VIR_DOMAIN_AFFECT_LIVE) {
+            virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+                           _("detach of device '%s' on running domain "
+                             "is not supported"),
+                           virDomainDeviceTypeToString(dev->type));
+            return -1;
+        } else {
+            if (virDomainDriverDetachMemballoonDeviceConfig(vmdef, dev) < 0)
+                return -1;
+        }
+        break;
+
     case VIR_DOMAIN_DEVICE_VIDEO:
     case VIR_DOMAIN_DEVICE_GRAPHICS:
     case VIR_DOMAIN_DEVICE_HUB:
     case VIR_DOMAIN_DEVICE_SMARTCARD:
-    case VIR_DOMAIN_DEVICE_MEMBALLOON:
     case VIR_DOMAIN_DEVICE_NVRAM:
     case VIR_DOMAIN_DEVICE_NONE:
     case VIR_DOMAIN_DEVICE_PANIC:
@@ -9711,7 +9724,7 @@ testDomainChgDevice(virDomainPtr dom,
         break;
 
     case VIR_DOMAIN_DEVICE_ACTION_DETACH:
-        if (testDomainDetachDeviceLiveAndConfig(def, dev) < 0)
+        if (testDomainDetachDeviceLiveAndConfig(def, dev, flags) < 0)
             goto cleanup;
         break;
 
-- 
2.33.0




More information about the libvir-list mailing list