[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