[libvirt] [PATCH 5/8] qemu: domain: Add helper to determine presence of memory baloon

John Ferlan jferlan at redhat.com
Thu Apr 14 18:35:08 UTC 2016



On 04/06/2016 12:02 PM, Peter Krempa wrote:
> ---
>  src/qemu/qemu_command.c |  3 +--
>  src/qemu/qemu_domain.c  | 11 +++++++++--
>  src/qemu/qemu_domain.h  |  1 +
>  src/qemu/qemu_driver.c  | 12 ++++--------
>  src/qemu/qemu_process.c |  9 +++------
>  5 files changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index a2448bf..1518a53 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -3408,8 +3408,7 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd,
>          virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_S390) && def->memballoon)
>          def->memballoon->model = VIR_DOMAIN_MEMBALLOON_MODEL_NONE;
> 
> -    if (!def->memballoon ||
> -        def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE)
> +    if (!qemuDomainDefHasMemballoon(def))
>          return 0;
> 
>      if (def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index f38b0f3..c13acd1 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -4218,6 +4218,14 @@ qemuDomainMachineHasBuiltinIDE(const virDomainDef *def)
>  }
> 
> 
> +bool
> +qemuDomainDefHasMemballoon(const virDomainDef *def)
> +{
> +    return def->memballoon &&
> +           def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_NONE;

I guess I would think would be if balloon and model == MODEL_VIRTIO

I find it easier to read absolutes rather than considering alternatives
to the != check... in this case that's only MODEL_XEN which yes should
never happen, but with the && at least there's no question...

> +}
> +
> +
>  /**
>   * qemuDomainUpdateCurrentMemorySize:
>   *
> @@ -4242,8 +4250,7 @@ qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
> 
>      /* if no balloning is available, the current size equals to the current
>       * full memory size */
> -    if (!vm->def->memballoon ||
> -        vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE) {
> +    if (!qemuDomainDefHasMemballoon(vm->def)) {
>          vm->def->mem.cur_balloon = virDomainDefGetMemoryActual(vm->def);
>          return 0;
>      }
> diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
> index 54d7bd7..2992214 100644
> --- a/src/qemu/qemu_domain.h
> +++ b/src/qemu/qemu_domain.h
> @@ -516,6 +516,7 @@ bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only)
>  int qemuDomainAlignMemorySizes(virDomainDefPtr def);
>  void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def,
>                                       virDomainMemoryDefPtr mem);
> +bool qemuDomainDefHasMemballoon(const virDomainDef *def);
> 
>  virDomainChrDefPtr qemuFindAgentConfig(virDomainDefPtr def);
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index eaabe58..a00268b 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -2505,8 +2505,7 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPtr dom, int period,
>      priv = vm->privateData;
> 
>      if (def) {
> -        if (!def->memballoon ||
> -            def->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {

This is what I was thinking - either this construct or the corollary
balloon && model == VIRTIO.

> +        if (!qemuDomainDefHasMemballoon(def)) {
>              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                             _("Memory balloon model must be virtio to set the"
>                               " collection period"));
> @@ -2529,8 +2528,7 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPtr dom, int period,
>      }
> 
>      if (persistentDef) {
> -        if (!persistentDef->memballoon ||
> -            persistentDef->memballoon->model != VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
> +        if (!qemuDomainDefHasMemballoon(persistentDef)) {
>              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                             _("Memory balloon model must be virtio to set the"
>                               " collection period"));
> @@ -11495,8 +11493,7 @@ qemuDomainMemoryStats(virDomainPtr dom,
>          goto endjob;
>      }
> 
> -    if (vm->def->memballoon &&
> -        vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO) {
> +    if (qemuDomainDefHasMemballoon(vm->def)) {
>          priv = vm->privateData;
>          qemuDomainObjEnterMonitor(driver, vm);
>          ret = qemuMonitorGetMemoryStats(priv->mon, stats, nr_stats);
> @@ -19061,8 +19058,7 @@ qemuDomainGetStatsBalloon(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
>      unsigned long long cur_balloon = 0;
>      int err = 0;
> 
> -    if (dom->def->memballoon &&
> -        dom->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE) {
> +    if (!qemuDomainDefHasMemballoon(dom->def)) {

Ugh.. the ugly duckling

This changes the statement from if we have a model=NONE memballoon to we
have a memballoon with a model that's not NONE.  Double negatives.

I think the logic has the right thought, but would be perhaps clearer in
my mind with the adjusted logic in the common function.

I think this is ACK-able just want get your thoughts on the logic for
the helper...

John

>          cur_balloon = virDomainDefGetMemoryActual(dom->def);
>      } else if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BALLOON_EVENT)) {
>          cur_balloon = dom->def->mem.cur_balloon;
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index d9dca74..4911c1d 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -1933,8 +1933,7 @@ qemuProcessRefreshBalloonState(virQEMUDriverPtr driver,
> 
>      /* if no ballooning is available, the current size equals to the current
>       * full memory size */
> -    if (!vm->def->memballoon ||
> -        vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE) {
> +    if (!qemuDomainDefHasMemballoon(vm->def)) {
>          vm->def->mem.cur_balloon = virDomainDefGetMemoryActual(vm->def);
>          return 0;
>      }
> @@ -4382,8 +4381,7 @@ qemuProcessSetupBalloon(virQEMUDriverPtr driver,
>      int period;
>      int ret = -1;
> 
> -    if (!vm->def->memballoon ||
> -        vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_NONE)
> +    if (!qemuDomainDefHasMemballoon(vm->def))
>          return 0;
> 
>      period = vm->def->memballoon->period;
> @@ -6237,8 +6235,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
>      if (running) {
>          virDomainObjSetState(vm, VIR_DOMAIN_RUNNING,
>                               VIR_DOMAIN_RUNNING_UNPAUSED);
> -        if (vm->def->memballoon &&
> -            vm->def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO &&
> +        if (qemuDomainDefHasMemballoon(vm->def) &&
>              vm->def->memballoon->period) {
>              qemuDomainObjEnterMonitor(driver, vm);
>              qemuMonitorSetMemoryStatsPeriod(priv->mon,
> 




More information about the libvir-list mailing list