[libvirt] [PATCH v2 0/2] test_driver: implement virDomainSetNumaParameters

Change since v1: * virDomainObjGetOneDefState is used instead of virDomainObjGetOneDef I send these 2 patches together, since testConnectSupportsFeature needs to be implemented in order for testDomainSetNumaParameters to support string parameters. Ilias Stamatis (2): test_driver: implement virConnectSupportsFeature test_driver: implement virDomainSetNumaParameters src/test/test_driver.c | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) mode change 100644 => 100755 src/test/test_driver.c -- 2.22.0

Make the test driver only support the VIR_TYPED_PARAM_STRING flag for now. Signed-off-by: Ilias Stamatis <stamatis.iliass@gmail.com> --- src/test/test_driver.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) mode change 100644 => 100755 src/test/test_driver.c diff --git a/src/test/test_driver.c b/src/test/test_driver.c old mode 100644 new mode 100755 index 7cf92e78a7..6221f5b9ae --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -1557,6 +1557,34 @@ testConnectGetType(virConnectPtr conn ATTRIBUTE_UNUSED) return "TEST"; } + +static int +testConnectSupportsFeature(virConnectPtr conn ATTRIBUTE_UNUSED, + int feature) +{ + switch ((virDrvFeature) feature) { + case VIR_DRV_FEATURE_TYPED_PARAM_STRING: + return 1; + case VIR_DRV_FEATURE_MIGRATION_V2: + case VIR_DRV_FEATURE_MIGRATION_V3: + case VIR_DRV_FEATURE_MIGRATION_P2P: + case VIR_DRV_FEATURE_MIGRATE_CHANGE_PROTECTION: + case VIR_DRV_FEATURE_FD_PASSING: + case VIR_DRV_FEATURE_XML_MIGRATABLE: + case VIR_DRV_FEATURE_MIGRATION_OFFLINE: + case VIR_DRV_FEATURE_MIGRATION_PARAMS: + case VIR_DRV_FEATURE_MIGRATION_DIRECT: + case VIR_DRV_FEATURE_MIGRATION_V1: + case VIR_DRV_FEATURE_PROGRAM_KEEPALIVE: + case VIR_DRV_FEATURE_REMOTE: + case VIR_DRV_FEATURE_REMOTE_CLOSE_CALLBACK: + case VIR_DRV_FEATURE_REMOTE_EVENT_CALLBACK: + default: + return 0; + } +} + + static int testConnectNumOfDomains(virConnectPtr conn) { testDriverPtr privconn = conn->privateData; @@ -7767,6 +7795,7 @@ static virHypervisorDriver testHypervisorDriver = { .connectGetCapabilities = testConnectGetCapabilities, /* 0.2.1 */ .connectGetSysinfo = testConnectGetSysinfo, /* 2.3.0 */ .connectGetType = testConnectGetType, /* 2.3.0 */ + .connectSupportsFeature = testConnectSupportsFeature, /* 5.6.0 */ .connectListDomains = testConnectListDomains, /* 0.1.1 */ .connectNumOfDomains = testConnectNumOfDomains, /* 0.1.1 */ .connectListAllDomains = testConnectListAllDomains, /* 0.9.13 */ -- 2.22.0

Signed-off-by: Ilias Stamatis <stamatis.iliass@gmail.com> --- src/test/test_driver.c | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 6221f5b9ae..127403bc0c 100755 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3091,6 +3091,87 @@ testDomainGetMemoryParameters(virDomainPtr dom, } +static int +testDomainSetNumaParameters(virDomainPtr dom, + virTypedParameterPtr params, + int nparams, + unsigned int flags) +{ + virDomainObjPtr vm = NULL; + virDomainDefPtr def = NULL; + virBitmapPtr nodeset = NULL; + virDomainNumatuneMemMode config_mode; + bool live; + size_t i; + int mode = -1; + int ret = -1; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (virTypedParamsValidate(params, nparams, + VIR_DOMAIN_NUMA_MODE, + VIR_TYPED_PARAM_INT, + VIR_DOMAIN_NUMA_NODESET, + VIR_TYPED_PARAM_STRING, + NULL) < 0) + return -1; + + if (!(vm = testDomObjFromDomain(dom))) + return -1; + + if (!(def = virDomainObjGetOneDefState(vm, flags, &live))) + goto cleanup; + + for (i = 0; i < nparams; i++) { + virTypedParameterPtr param = ¶ms[i]; + + if (STREQ(param->field, VIR_DOMAIN_NUMA_MODE)) { + mode = param->value.i; + + if (mode < 0 || mode >= VIR_DOMAIN_NUMATUNE_MEM_LAST) { + virReportError(VIR_ERR_INVALID_ARG, + _("unsupported numatune mode: '%d'"), mode); + goto cleanup; + } + + } else if (STREQ(param->field, VIR_DOMAIN_NUMA_NODESET)) { + if (virBitmapParse(param->value.s, &nodeset, + VIR_DOMAIN_CPUMASK_LEN) < 0) + goto cleanup; + + if (virBitmapIsAllClear(nodeset)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("Invalid nodeset of 'numatune': %s"), + param->value.s); + goto cleanup; + } + } + } + + if (live && + mode != -1 && + virDomainNumatuneGetMode(def->numa, -1, &config_mode) == 0 && + config_mode != mode) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("can't change numatune mode for running domain")); + goto cleanup; + } + + if (virDomainNumatuneSet(def->numa, + def->placement_mode == + VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC, + -1, mode, nodeset) < 0) + goto cleanup; + + ret = 0; + cleanup: + virBitmapFree(nodeset); + virDomainObjEndAPI(&vm); + return ret; +} + + static int testDomainGetNumaParameters(virDomainPtr dom, virTypedParameterPtr params, @@ -7841,6 +7922,7 @@ static virHypervisorDriver testHypervisorDriver = { .domainGetXMLDesc = testDomainGetXMLDesc, /* 0.1.4 */ .domainSetMemoryParameters = testDomainSetMemoryParameters, /* 5.6.0 */ .domainGetMemoryParameters = testDomainGetMemoryParameters, /* 5.6.0 */ + .domainSetNumaParameters = testDomainSetNumaParameters, /* 5.6.0 */ .domainGetNumaParameters = testDomainGetNumaParameters, /* 5.6.0 */ .domainGetInterfaceParameters = testDomainGetInterfaceParameters, /* 5.6.0 */ .connectListDefinedDomains = testConnectListDefinedDomains, /* 0.1.11 */ -- 2.22.0

On Wed, Jul 24, 2019 at 04:31:32PM +0200, Ilias Stamatis wrote:
Change since v1: * virDomainObjGetOneDefState is used instead of virDomainObjGetOneDef
I send these 2 patches together, since testConnectSupportsFeature needs to be implemented in order for testDomainSetNumaParameters to support string parameters.
Ilias Stamatis (2): test_driver: implement virConnectSupportsFeature test_driver: implement virDomainSetNumaParameters
src/test/test_driver.c | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) mode change 100644 => 100755 src/test/test_driver.c
Reviewed-by: Erik Skultety <eskultet@redhat.com>
participants (2)
-
Erik Skultety
-
Ilias Stamatis