[libvirt] [PATCH] qemu: numa: Don't return automatic nodeset for inactive domain

Peter Krempa posted 1 patch 6 years, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/81687b0ec6ce5f449be57ef6ca5ea0a00fead53f.1493211900.git.pkrempa@redhat.com
src/qemu/qemu_driver.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
[libvirt] [PATCH] qemu: numa: Don't return automatic nodeset for inactive domain
Posted by Peter Krempa 6 years, 11 months ago
qemuDomainGetNumaParameters would return the automatic nodeset even for
the persistent config if the domain was running. This is incorrect since
the automatic nodeset will be re-queried upon starting the vm.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1445325
---
 src/qemu/qemu_driver.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e39de625d..1ba3e0943 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -9461,6 +9461,8 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
     char *nodeset = NULL;
     int ret = -1;
     virDomainDefPtr def = NULL;
+    bool live = false;
+    virBitmapPtr autoNodeset = NULL;

     virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
                   VIR_DOMAIN_AFFECT_CONFIG |
@@ -9473,9 +9475,12 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
     if (virDomainGetNumaParametersEnsureACL(dom->conn, vm->def) < 0)
         goto cleanup;

-    if (!(def = virDomainObjGetOneDef(vm, flags)))
+    if (!(def = virDomainObjGetOneDefState(vm, flags, &live)))
         goto cleanup;

+    if (live)
+        autoNodeset = priv->autoNodeset;
+
     if ((*nparams) == 0) {
         *nparams = QEMU_NB_NUMA_PARAM;
         ret = 0;
@@ -9496,8 +9501,7 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
             break;

         case 1: /* fill numa nodeset here */
-            nodeset = virDomainNumatuneFormatNodeset(def->numa,
-                                                     priv->autoNodeset, -1);
+            nodeset = virDomainNumatuneFormatNodeset(def->numa, autoNodeset, -1);
             if (!nodeset ||
                 virTypedParameterAssign(param, VIR_DOMAIN_NUMA_NODESET,
                                         VIR_TYPED_PARAM_STRING, nodeset) < 0)
-- 
2.12.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: numa: Don't return automatic nodeset for inactive domain
Posted by Erik Skultety 6 years, 11 months ago
On Wed, Apr 26, 2017 at 03:05:00PM +0200, Peter Krempa wrote:
> qemuDomainGetNumaParameters would return the automatic nodeset even for
> the persistent config if the domain was running. This is incorrect since
> the automatic nodeset will be re-queried upon starting the vm.
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1445325
> ---
>  src/qemu/qemu_driver.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index e39de625d..1ba3e0943 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -9461,6 +9461,8 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
>      char *nodeset = NULL;
>      int ret = -1;
>      virDomainDefPtr def = NULL;
> +    bool live = false;
> +    virBitmapPtr autoNodeset = NULL;
>
>      virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
>                    VIR_DOMAIN_AFFECT_CONFIG |
> @@ -9473,9 +9475,12 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
>      if (virDomainGetNumaParametersEnsureACL(dom->conn, vm->def) < 0)
>          goto cleanup;
>
> -    if (!(def = virDomainObjGetOneDef(vm, flags)))
> +    if (!(def = virDomainObjGetOneDefState(vm, flags, &live)))
>          goto cleanup;
>
> +    if (live)
> +        autoNodeset = priv->autoNodeset;
> +
>      if ((*nparams) == 0) {
>          *nparams = QEMU_NB_NUMA_PARAM;
>          ret = 0;
> @@ -9496,8 +9501,7 @@ qemuDomainGetNumaParameters(virDomainPtr dom,
>              break;
>
>          case 1: /* fill numa nodeset here */
> -            nodeset = virDomainNumatuneFormatNodeset(def->numa,
> -                                                     priv->autoNodeset, -1);
> +            nodeset = virDomainNumatuneFormatNodeset(def->numa, autoNodeset, -1);
>              if (!nodeset ||
>                  virTypedParameterAssign(param, VIR_DOMAIN_NUMA_NODESET,
>                                          VIR_TYPED_PARAM_STRING, nodeset) < 0)

ACK

Erik

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list