[libvirt] [PATCH 2/4] test_driver: implement virDomainGetGuestVcpus

Ilias Stamatis stamatis.iliass at gmail.com
Thu Aug 8 18:05:22 UTC 2019


Signed-off-by: Ilias Stamatis <stamatis.iliass at gmail.com>
---
 src/test/test_driver.c | 70 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index a6f239b9f1..99cba7db42 100755
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2820,6 +2820,75 @@ testDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
     return ret;
 }

+
+static int
+testDomainGetGuestVcpus(virDomainPtr dom,
+                        virTypedParameterPtr *params,
+                        unsigned int *nparams,
+                        unsigned int flags)
+{
+    virDomainObjPtr vm = NULL;
+    virBitmapPtr vcpus = NULL;
+    virBitmapPtr online = NULL;
+    virTypedParameterPtr par = NULL;
+    char *tmp = NULL;
+    size_t i;
+    int npar = 0;
+    int maxpar = 0;
+    int ret = -1;
+
+    virCheckFlags(0, ret);
+
+    if (!(vm = testDomObjFromDomain(dom)))
+        goto cleanup;
+
+    if (virDomainObjCheckActive(vm) < 0)
+        goto cleanup;
+
+    if (!(vcpus = virBitmapNew(vm->def->maxvcpus)))
+        goto cleanup;
+
+    if (!(online = virBitmapNew(vm->def->maxvcpus)))
+        goto cleanup;
+
+    for (i = 0; i < vm->def->maxvcpus; i++) {
+        if (virBitmapSetBit(vcpus, i) < 0)
+            goto cleanup;
+
+        if (vm->def->vcpus[i]->online && virBitmapSetBit(online, i) < 0)
+            goto cleanup;
+    }
+
+#define ADD_BITMAP(map, name) \
+    if (!(tmp = virBitmapFormat(map))) \
+        goto cleanup; \
+    if (virTypedParamsAddString(&par, &npar, &maxpar, name, tmp) < 0) \
+        goto cleanup; \
+    VIR_FREE(tmp)
+
+    ADD_BITMAP(vcpus, "vcpus");
+    ADD_BITMAP(online, "online");
+
+    if (virBitmapClearBit(online, 0) < 0)
+        goto cleanup;
+    ADD_BITMAP(online, "offlinable");
+#undef ADD_BITMAP
+
+    *params = par;
+    *nparams = npar;
+    par = NULL;
+
+    ret = 0;
+ cleanup:
+    VIR_FREE(tmp);
+    virBitmapFree(vcpus);
+    virBitmapFree(online);
+    virDomainObjEndAPI(&vm);
+    virTypedParamsFree(par, npar);
+    return ret;
+}
+
+
 static int
 testDomainGetMaxVcpus(virDomainPtr domain)
 {
@@ -8964,6 +9033,7 @@ static virHypervisorDriver testHypervisorDriver = {
     .domainSetVcpus = testDomainSetVcpus, /* 0.1.4 */
     .domainSetVcpusFlags = testDomainSetVcpusFlags, /* 0.8.5 */
     .domainGetVcpusFlags = testDomainGetVcpusFlags, /* 0.8.5 */
+    .domainGetGuestVcpus = testDomainGetGuestVcpus, /* 5.7.0 */
     .domainPinVcpu = testDomainPinVcpu, /* 0.7.3 */
     .domainPinVcpuFlags = testDomainPinVcpuFlags, /* 5.6.0 */
     .domainGetVcpus = testDomainGetVcpus, /* 0.7.3 */
--
2.22.0




More information about the libvir-list mailing list