[libvirt] [PATCH 02/13] conf: Add helper to determine whether memory hotplug is enabled for a vm

Michal Privoznik mprivozn at redhat.com
Tue Sep 22 12:29:26 UTC 2015


On 21.09.2015 19:21, Peter Krempa wrote:
> Add a simple helper so that the code doesn't have to rewrite the same
> condition multiple times.
> ---
>  src/conf/domain_conf.c    | 9 ++++++++-
>  src/conf/domain_conf.h    | 1 +
>  src/libvirt_private.syms  | 1 +
>  src/qemu/qemu_command.c   | 2 +-
>  src/qemu/qemu_domain.c    | 2 +-
>  src/qemu/qemu_migration.c | 5 ++---
>  6 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index a3b3ccb..fa2e331 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -1154,7 +1154,7 @@ int
>  virDomainDefCheckUnsupportedMemoryHotplug(virDomainDefPtr def)
>  {
>      /* memory hotplug tunables are not supported by this driver */
> -    if (def->mem.max_memory > 0 || def->mem.memory_slots > 0) {
> +    if (virDomainDefHasMemoryHotplug(def)) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                         _("memory hotplug tunables <maxMemory> are not "
>                           "supported by this hypervisor driver"));
> @@ -7671,6 +7671,13 @@ virDomainParseMemoryLimit(const char *xpath,
>  }
> 
> 
> +bool
> +virDomainDefHasMemoryHotplug(const virDomainDef *def)
> +{
> +    return def->mem.memory_slots > 0 || def->mem.max_memory > 0;
> +}
> +

There are some other occurrences of this pattern too, e.g.:

virDomainDefPostParseInternal
virDomainDefFormatInternal

Probably worth 'fixing' those places too.


> +
>  /**
>   * virDomainDefGetMemoryInitial:
>   * @def: domain definition
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 8be390b..cfd2600 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2324,6 +2324,7 @@ struct _virDomainDef {
>  unsigned long long virDomainDefGetMemoryInitial(virDomainDefPtr def);
>  void virDomainDefSetMemoryInitial(virDomainDefPtr def, unsigned long long size);
>  unsigned long long virDomainDefGetMemoryActual(virDomainDefPtr def);
> +bool virDomainDefHasMemoryHotplug(const virDomainDef *def);
> 
>  typedef enum {
>      VIR_DOMAIN_KEY_WRAP_CIPHER_NAME_AES,
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index 8c1f388..1a92422 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -217,6 +217,7 @@ virDomainDefGetMemoryActual;
>  virDomainDefGetMemoryInitial;
>  virDomainDefGetSecurityLabelDef;
>  virDomainDefHasDeviceAddress;
> +virDomainDefHasMemoryHotplug;
>  virDomainDefMaybeAddController;
>  virDomainDefMaybeAddInput;
>  virDomainDefNeedsPlacementAdvice;
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 25f57f2..e1f199c 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -9323,7 +9323,7 @@ qemuBuildCommandLine(virConnectPtr conn,
> 
>      virCommandAddArg(cmd, "-m");
> 
> -    if (def->mem.max_memory) {
> +    if (virDomainDefHasMemoryHotplug(def)) {
>          if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PC_DIMM)) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                             _("memory hotplug isn't supported by this QEMU binary"));
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index e4a88cd..f840b0d 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -1367,7 +1367,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
>      }
> 
>      if (dev->type == VIR_DOMAIN_DEVICE_MEMORY &&
> -        def->mem.max_memory == 0) {
> +        !virDomainDefHasMemoryHotplug(def)) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                         _("maxMemory has to be specified when using memory "
>                           "devices "));
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 903612b..948ad3b 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -3000,10 +3000,9 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
>          }
>      }
> 
> -    if (vm->def->mem.max_memory ||
> +    if (virDomainDefHasMemoryHotplug(vm->def) ||
>          ((flags & VIR_MIGRATE_PERSIST_DEST) &&
> -         vm->newDef &&
> -         vm->newDef->mem.max_memory))
> +         vm->newDef && virDomainDefHasMemoryHotplug(vm->newDef)))
>          cookieFlags |= QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG;
> 
>      if (!(mig = qemuMigrationEatCookie(driver, vm, NULL, 0, 0)))
> 

ACK

Michal




More information about the libvir-list mailing list