[libvirt] [PATCH 10/16] hyperv: add get scheduler functions
John Ferlan
jferlan at redhat.com
Thu Sep 15 13:44:23 UTC 2016
On 08/09/2016 08:39 AM, Jason Miesionczek wrote:
> ---
> src/hyperv/hyperv_driver.c | 127 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 127 insertions(+)
>
> diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
> index 2623916..348b39c 100644
> --- a/src/hyperv/hyperv_driver.c
> +++ b/src/hyperv/hyperv_driver.c
> @@ -1737,6 +1737,130 @@ hypervDomainShutdown(virDomainPtr dom)
> return hypervDomainShutdownFlags(dom, 0);
> }
>
> +static int
> +hypervDomainGetSchedulerParametersFlags(virDomainPtr dom, virTypedParameterPtr params,
> + int *nparams, unsigned int flags)
> +{
> + hypervPrivate *priv = dom->conn->privateData;
> + Msvm_ComputerSystem *computerSystem = NULL;
> + Msvm_ProcessorSettingData *processorSettingData = NULL;
> + Msvm_VirtualSystemSettingData *virtualSystemSettingData = NULL;
> + char uuid_string[VIR_UUID_STRING_BUFLEN];
> + virBuffer query = VIR_BUFFER_INITIALIZER;
> + int saved_nparams = 0;
> + int result = -1;
> +
> + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |VIR_DOMAIN_AFFECT_CONFIG |VIR_TYPED_PARAM_STRING_OKAY, -1);
> +
> + /* We don't return strings, and thus trivially support this flag */
> + flags &= ~VIR_TYPED_PARAM_STRING_OKAY;
> +
> + virUUIDFormat(dom->uuid, uuid_string);
> +
> + /* Get Msvm_ComputerSystem */
> + if (hypervMsvmComputerSystemFromDomain(dom, &computerSystem) < 0) {
> + goto cleanup;
> + }
> +
> + /* Get Msvm_VirtualSystemSettingData */
> + virBufferAsprintf(&query,
> + "associators of "
> + "{Msvm_ComputerSystem.CreationClassName=\"Msvm_ComputerSystem\","
> + "Name=\"%s\"} "
> + "where AssocClass = Msvm_SettingsDefineState "
> + "ResultClass = Msvm_VirtualSystemSettingData",
> + uuid_string);
> +
> + if (hypervGetMsvmVirtualSystemSettingDataList(priv, &query, &virtualSystemSettingData) < 0) {
> + goto cleanup;
> + }
> +
> + if (virtualSystemSettingData == NULL) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Could not lookup %s for domain %s"),
> + "Msvm_VirtualSystemSettingData",
> + computerSystem->data->ElementName);
> + goto cleanup;
> + }
> +
> + /* Get Msvm_ProcessorSettingData */
> + virBufferAsprintf(&query,
> + "associators of "
> + "{Msvm_VirtualSystemSettingData.InstanceID=\"%s\"} "
> + "where AssocClass = Msvm_VirtualSystemSettingDataComponent "
> + "ResultClass = Msvm_ProcessorSettingData",
> + virtualSystemSettingData->data->InstanceID);
> +
> + if (hypervGetMsvmProcessorSettingDataList(priv, &query, &processorSettingData) < 0) {
> + goto cleanup;
> + }
> +
> + if (processorSettingData == NULL) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not lookup %s for domain %s"),
> + "Msvm_ProcessorSettingData",computerSystem->data->ElementName);
> + goto cleanup;
> + }
> +
There's no other parameters? Strange to me I guess, but it would seem
there could be others...
> + if (virTypedParameterAssign(¶ms[0], VIR_DOMAIN_SCHEDULER_LIMIT,
> + VIR_TYPED_PARAM_LLONG, processorSettingData->data->Limit) < 0)
> + goto cleanup;
> + saved_nparams++;
> +
> + if (*nparams > saved_nparams) {
> + if (virTypedParameterAssign(¶ms[1],VIR_DOMAIN_SCHEDULER_RESERVATION,
> + VIR_TYPED_PARAM_LLONG, processorSettingData->data->Reservation) < 0)
> + goto cleanup;
> + saved_nparams++;
> + }
> +
> + if (*nparams > saved_nparams) {
> + if (virTypedParameterAssign(¶ms[2],VIR_DOMAIN_SCHEDULER_WEIGHT,
> + VIR_TYPED_PARAM_UINT, processorSettingData->data->Weight) < 0)
> + goto cleanup;
> + saved_nparams++;
> + }
> +
> + *nparams = saved_nparams;
> +
> + result = 0;
> +
> + cleanup:
> + hypervFreeObject(priv, (hypervObject *)computerSystem);
> + hypervFreeObject(priv, (hypervObject *)virtualSystemSettingData);
> + hypervFreeObject(priv, (hypervObject *)processorSettingData);
> + virBufferFreeAndReset(&query);
> +
> + return result;
> +}
> +
> +
> +
> +static int
> +hypervDomainGetSchedulerParameters(virDomainPtr dom, virTypedParameterPtr params, int *nparams)
> +{
> + return hypervDomainGetSchedulerParametersFlags(dom, params, nparams, VIR_DOMAIN_AFFECT_CURRENT);
> +}
> +
> +
> +
> +static char*
char *
> +hypervDomainGetSchedulerType(virDomainPtr domain ATTRIBUTE_UNUSED, int *nparams)
> +{
> + char *type;
> +
> + if (VIR_STRDUP(type, "allocation") < 0) {
> + virReportOOMError();
Unnecessary OOM
> + return NULL;
> + }
Or
ignore_value(VIR_STRDUP(type, "allocation));
if (nparams)
*params = 3; /* reservation, limit, weight */
return type;
> +
> + if (nparams != NULL) {
> + *nparams = 3; /* reservation, limit, weight */
> + }
> +
> + return type;
> +}
> +
> +
> static virHypervisorDriver hypervHypervisorDriver = {
> .name = "Hyper-V",
> .connectOpen = hypervConnectOpen, /* 0.9.5 */
> @@ -1782,6 +1906,9 @@ static virHypervisorDriver hypervHypervisorDriver = {
> .domainGetAutostart = hypervDomainGetAutostart, /* 1.2.10 */
> .domainShutdownFlags = hypervDomainShutdownFlags, /* 1.2.10 */
> .domainShutdown = hypervDomainShutdown, /* 1.2.10 */
> + .domainGetSchedulerParametersFlags = hypervDomainGetSchedulerParametersFlags, /* 1.2.10 */
> + .domainGetSchedulerParameters = hypervDomainGetSchedulerParameters, /* 1.2.10 */
> + .domainGetSchedulerType = hypervDomainGetSchedulerType, /* 1.2.10 */
2.3.0 at the earliest
Trying my best not to mention long lines, {} usage, but it's hard
John
> };
>
> /* Retrieves host system UUID */
>
More information about the libvir-list
mailing list