[PATCH v2 04/10] hyperv: replace generic WMI class list helpers with a macro
Neal Gompa
ngompa13 at gmail.com
Tue Oct 6 00:58:38 UTC 2020
On Mon, Oct 5, 2020 at 12:21 PM Matt Coleman <mcoleman at datto.com> wrote:
>
> Signed-off-by: Matt Coleman <matt at datto.com>
> ---
> src/hyperv/hyperv_driver.c | 39 ++++++++++++------
> src/hyperv/hyperv_wmi.c | 83 ++++----------------------------------
> src/hyperv/hyperv_wmi.h | 28 ++-----------
> 3 files changed, 36 insertions(+), 114 deletions(-)
>
> diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
> index 5e09c8f4af..3e4563252e 100644
> --- a/src/hyperv/hyperv_driver.c
> +++ b/src/hyperv/hyperv_driver.c
> @@ -47,6 +47,20 @@ VIR_LOG_INIT("hyperv.hyperv_driver");
> * wrapper functions for commonly-accessed WMI objects and interfaces.
> */
>
> +/**
> + * hypervGetWmiClass:
> + * @type: the type of the class being retrieved from WMI
> + * @class: double pointer where the class data will be stored
> + *
> + * Retrieve one or more classes from WMI.
> + *
> + * The following variables must exist in the caller:
> + * 1. hypervPrivate *priv
> + * 2. virBuffer query
> + */
> +#define hypervGetWmiClass(type, class) \
> + hypervGetWmiClassList(priv, type ## _WmiInfo, &query, (hypervObject **)class)
> +
> static int
> hypervGetProcessorsByName(hypervPrivate *priv, const char *name,
> Win32_Processor **processorList)
> @@ -58,7 +72,7 @@ hypervGetProcessorsByName(hypervPrivate *priv, const char *name,
> "ResultClass = Win32_Processor",
> name);
>
> - if (hypervGetWin32ProcessorList(priv, &query, processorList) < 0 ||
> + if (hypervGetWmiClass(Win32_Processor, processorList) < 0 ||
> !processorList) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Could not look up processor(s) on '%s'"),
> @@ -77,7 +91,7 @@ hypervGetActiveVirtualSystemList(hypervPrivate *priv,
> "WHERE " MSVM_COMPUTERSYSTEM_WQL_VIRTUAL
> "AND " MSVM_COMPUTERSYSTEM_WQL_ACTIVE), 0 };
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystemList) < 0 ||
> + if (hypervGetWmiClass(Msvm_ComputerSystem, computerSystemList) < 0 ||
> !*computerSystemList) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("Could not look up active virtual machines"));
> @@ -96,7 +110,7 @@ hypervGetInactiveVirtualSystemList(hypervPrivate *priv,
> "WHERE " MSVM_COMPUTERSYSTEM_WQL_VIRTUAL
> "AND " MSVM_COMPUTERSYSTEM_WQL_INACTIVE), 0 };
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystemList) < 0 ||
> + if (hypervGetWmiClass(Msvm_ComputerSystem, computerSystemList) < 0 ||
> !*computerSystemList) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("Could not look up inactive virtual machines"));
> @@ -112,7 +126,7 @@ hypervGetPhysicalSystemList(hypervPrivate *priv,
> {
> g_auto(virBuffer) query = { g_string_new(WIN32_COMPUTERSYSTEM_WQL_SELECT), 0 };
>
> - if (hypervGetWin32ComputerSystemList(priv, &query, computerSystemList) < 0 ||
> + if (hypervGetWmiClass(Win32_ComputerSystem, computerSystemList) < 0 ||
> !*computerSystemList) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> _("Could not look up Win32_ComputerSystem"));
> @@ -133,7 +147,7 @@ hypervGetVirtualSystemByID(hypervPrivate *priv, int id,
> "AND ProcessID = %d",
> id);
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystemList) < 0) {
> + if (hypervGetWmiClass(Msvm_ComputerSystem, computerSystemList) < 0) {
> virReportError(VIR_ERR_OPERATION_FAILED,
> _("Could not look up virtual system with ID %d"), id);
> return -1;
> @@ -158,7 +172,7 @@ hypervGetVirtualSystemByUUID(hypervPrivate *priv, const char *uuid,
> "AND Name = \"%s\"",
> uuid);
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystemList) < 0) {
> + if (hypervGetWmiClass(Msvm_ComputerSystem, computerSystemList) < 0) {
> virReportError(VIR_ERR_OPERATION_FAILED,
> _("Could not look up virtual system with UUID '%s'"),
> uuid);
> @@ -186,7 +200,7 @@ hypervGetVirtualSystemByName(hypervPrivate *priv, const char *name,
> "AND ElementName = \"%s\"",
> name);
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystemList) < 0) {
> + if (hypervGetWmiClass(Msvm_ComputerSystem, computerSystemList) < 0) {
> virReportError(VIR_ERR_OPERATION_FAILED,
> _("Could not look up virtual system named '%s'"), name);
> return -1;
> @@ -212,7 +226,7 @@ hypervGetVSSDFromUUID(hypervPrivate *priv, const char *uuid,
> "ResultClass = Msvm_VirtualSystemSettingData",
> uuid);
>
> - if (hypervGetMsvmVirtualSystemSettingDataList(priv, &query, data) < 0 ||
> + if (hypervGetWmiClass(Msvm_VirtualSystemSettingData, data) < 0 ||
> !*data) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Could not look up virtual system setting data with UUID '%s'"),
> @@ -234,7 +248,7 @@ hypervGetProcSDByVSSDInstanceId(hypervPrivate *priv, const char *id,
> "ResultClass = Msvm_ProcessorSettingData",
> id);
>
> - if (hypervGetMsvmProcessorSettingDataList(priv, &query, data) < 0 ||
> + if (hypervGetWmiClass(Msvm_ProcessorSettingData, data) < 0 ||
> !*data) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Could not look up processor setting data with virtual system instance ID '%s'"),
> @@ -256,7 +270,7 @@ hypervGetMemSDByVSSDInstanceId(hypervPrivate *priv, const char *id,
> "ResultClass = Msvm_MemorySettingData",
> id);
>
> - if (hypervGetMsvmMemorySettingDataList(priv, &query, data) < 0 ||
> + if (hypervGetWmiClass(Msvm_MemorySettingData, data) < 0 ||
> !*data) {
> virReportError(VIR_ERR_INTERNAL_ERROR,
> _("Could not look up memory setting data with virtual system instance ID '%s'"),
> @@ -1278,8 +1292,7 @@ hypervConnectListAllDomains(virConnectPtr conn,
> }
> }
>
> - if (hypervGetMsvmComputerSystemList(priv, &query,
> - &computerSystemList) < 0)
> + if (hypervGetWmiClass(Msvm_ComputerSystem, &computerSystemList) < 0)
> goto cleanup;
>
> if (domains) {
> @@ -1385,7 +1398,7 @@ hypervDomainSendKey(virDomainPtr domain, unsigned int codeset,
> "where ResultClass = Msvm_Keyboard",
> uuid_string);
>
> - if (hypervGetMsvmKeyboardList(priv, &query, &keyboard) < 0)
> + if (hypervGetWmiClass(Msvm_Keyboard, &keyboard) < 0)
> goto cleanup;
>
> translatedKeycodes = g_new0(int, nkeycodes);
> diff --git a/src/hyperv/hyperv_wmi.c b/src/hyperv/hyperv_wmi.c
> index 809f68a844..b233dab58d 100644
> --- a/src/hyperv/hyperv_wmi.c
> +++ b/src/hyperv/hyperv_wmi.c
> @@ -83,7 +83,7 @@ hypervGetWmiClassInfo(hypervPrivate *priv, hypervWmiClassInfoListPtr list,
> return -1;
> }
>
> -static int
> +int
> hypervGetWmiClassList(hypervPrivate *priv, hypervWmiClassInfoListPtr wmiInfo,
> virBufferPtr query, hypervObject **wmiClass)
> {
> @@ -878,8 +878,8 @@ hypervInvokeMethod(hypervPrivate *priv, hypervInvokeParamsListPtr params,
> virBufferAddLit(&query, MSVM_CONCRETEJOB_WQL_SELECT);
> virBufferEscapeSQL(&query, "where InstanceID = \"%s\"", instanceID);
>
> - if (hypervGetMsvmConcreteJobList(priv, &query, &job) < 0
> - || job == NULL)
> + if (hypervGetWmiClassList(priv, Msvm_ConcreteJob_WmiInfo, &query,
> + (hypervObject **)&job) < 0 || job == NULL)
> goto cleanup;
>
> jobState = job->data.common->JobState;
> @@ -1218,77 +1218,6 @@ hypervReturnCodeToString(int returnCode)
>
>
>
> -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> - * Generic "Get WMI class list" helpers
> - */
> -
> -int
> -hypervGetMsvmComputerSystemList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_ComputerSystem **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_ComputerSystem_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetMsvmConcreteJobList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_ConcreteJob **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_ConcreteJob_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetWin32ComputerSystemList(hypervPrivate *priv, virBufferPtr query,
> - Win32_ComputerSystem **list)
> -{
> - return hypervGetWmiClassList(priv, Win32_ComputerSystem_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetWin32ProcessorList(hypervPrivate *priv, virBufferPtr query,
> - Win32_Processor **list)
> -{
> - return hypervGetWmiClassList(priv, Win32_Processor_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetMsvmVirtualSystemSettingDataList(hypervPrivate *priv,
> - virBufferPtr query,
> - Msvm_VirtualSystemSettingData **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_VirtualSystemSettingData_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetMsvmProcessorSettingDataList(hypervPrivate *priv,
> - virBufferPtr query,
> - Msvm_ProcessorSettingData **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_ProcessorSettingData_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int
> -hypervGetMsvmMemorySettingDataList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_MemorySettingData **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_MemorySettingData_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -int hypervGetMsvmKeyboardList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_Keyboard **list)
> -{
> - return hypervGetWmiClassList(priv, Msvm_Keyboard_WmiInfo, query,
> - (hypervObject **)list);
> -}
> -
> -
> -
> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> * Msvm_ComputerSystem
> */
> @@ -1371,7 +1300,8 @@ hypervInvokeMsvmComputerSystemRequestStateChange(virDomainPtr domain,
> virBufferAddLit(&query, MSVM_CONCRETEJOB_WQL_SELECT);
> virBufferAsprintf(&query, "where InstanceID = \"%s\"", instanceID);
>
> - if (hypervGetMsvmConcreteJobList(priv, &query, &concreteJob) < 0)
> + if (hypervGetWmiClassList(priv, Msvm_ConcreteJob_WmiInfo, &query,
> + (hypervObject **)&concreteJob) < 0)
> goto cleanup;
>
> if (concreteJob == NULL) {
> @@ -1560,7 +1490,8 @@ hypervMsvmComputerSystemFromDomain(virDomainPtr domain,
> virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_VIRTUAL);
> virBufferAsprintf(&query, "and Name = \"%s\"", uuid_string);
>
> - if (hypervGetMsvmComputerSystemList(priv, &query, computerSystem) < 0)
> + if (hypervGetWmiClassList(priv, Msvm_ComputerSystem_WmiInfo, &query,
> + (hypervObject **)computerSystem) < 0)
> return -1;
>
> if (*computerSystem == NULL) {
> diff --git a/src/hyperv/hyperv_wmi.h b/src/hyperv/hyperv_wmi.h
> index 74a74e0e09..8c9c5ed9c1 100644
> --- a/src/hyperv/hyperv_wmi.h
> +++ b/src/hyperv/hyperv_wmi.h
> @@ -198,40 +198,18 @@ const char *hypervReturnCodeToString(int returnCode);
> * Generic "Get WMI class list" helpers
> */
>
> -int hypervGetMsvmComputerSystemList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_ComputerSystem **list);
> -
> -int hypervGetMsvmConcreteJobList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_ConcreteJob **list);
> -
> -int hypervGetWin32ComputerSystemList(hypervPrivate *priv, virBufferPtr query,
> - Win32_ComputerSystem **list);
> -
> -int hypervGetWin32ProcessorList(hypervPrivate *priv, virBufferPtr query,
> - Win32_Processor **list);
> -
> -int hypervGetMsvmVirtualSystemSettingDataList(hypervPrivate *priv,
> - virBufferPtr query,
> - Msvm_VirtualSystemSettingData **list);
> +int hypervGetWmiClassList(hypervPrivate *priv,
> + hypervWmiClassInfoListPtr wmiInfo, virBufferPtr query,
> + hypervObject **wmiClass);
>
> int hypervGetMsvmVirtualSystemSettingDataFromUUID(hypervPrivate *priv,
> const char *uuid_string,
> Msvm_VirtualSystemSettingData **list);
>
> -int hypervGetMsvmProcessorSettingDataList(hypervPrivate *priv,
> - virBufferPtr query,
> - Msvm_ProcessorSettingData **list);
> -
> -int hypervGetMsvmMemorySettingDataList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_MemorySettingData **list);
> -
> int hypervGetMsvmMemorySettingDataFromVSSD(hypervPrivate *priv,
> const char *vssd_instanceid,
> Msvm_MemorySettingData **list);
>
> -int hypervGetMsvmKeyboardList(hypervPrivate *priv, virBufferPtr query,
> - Msvm_Keyboard **list);
> -
> /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> * Msvm_ComputerSystem
> */
> --
> 2.27.0
>
>
Reviewed-by: Neal Gompa <ngompa13 at gmail.com>
--
真実はいつも一つ!/ Always, there's only one truth!
More information about the libvir-list
mailing list