Re: [libvirt] [PATCH 2/2] numatune: move up verification codes in virNumaSetupMemoryPolicy

2014-09-23 Thread Chen, Fan
On Tue, 2014-09-23 at 14:42 +0200, Michal Privoznik wrote: 
> On 23.09.2014 11:34, Chen Fan wrote:
> > use virDomainNumatuneNodeSetIsAvailable() to verify momory.nodeset
> > whether is out of range. and move up the verification.
> >
> > Signed-off-by: Chen Fan 
> > ---
> >   src/conf/numatune_conf.c |  3 +++
> >   src/util/virnuma.c   | 15 ---
> >   2 files changed, 3 insertions(+), 15 deletions(-)
> 
> I'd expect a test case for this.
Ok, I will add it.

thanks,
Chen

> 
> >
> > diff --git a/src/conf/numatune_conf.c b/src/conf/numatune_conf.c
> > index a9b20aa..8b43167 100644
> > --- a/src/conf/numatune_conf.c
> > +++ b/src/conf/numatune_conf.c
> > @@ -278,6 +278,9 @@ virDomainNumatuneParseXML(virDomainNumatunePtr 
> > *numatunePtr,
> >nodeset) < 0)
> >   goto cleanup;
> >
> > +if (!virDomainNumatuneNodeSetIsAvailable(*numatunePtr, -1))
> > +goto cleanup;
> > +
> >   if (virDomainNumatuneNodeParseXML(numatunePtr, ncells, ctxt) < 0)
> >   goto cleanup;
> >
> > diff --git a/src/util/virnuma.c b/src/util/virnuma.c
> > index 1a34398..4766f16 100644
> > --- a/src/util/virnuma.c
> > +++ b/src/util/virnuma.c
> > @@ -95,31 +95,16 @@ virNumaSetupMemoryPolicy(virDomainNumatunePtr numatune,
> >   int ret = -1;
> >   int bit = 0;
> >   size_t i;
> > -int maxnode = 0;
> >   virBitmapPtr tmp_nodemask = NULL;
> >
> >   tmp_nodemask = virDomainNumatuneGetNodeset(numatune, nodemask, -1);
> >   if (!tmp_nodemask)
> >   return 0;
> >
> > -if (numa_available() < 0) {
> > -virReportError(VIR_ERR_INTERNAL_ERROR,
> > -   "%s", _("Host kernel is not aware of NUMA."));
> > -return -1;
> > -}
> > -
> > -maxnode = numa_max_node();
> > -maxnode = maxnode < NUMA_NUM_NODES ? maxnode : NUMA_NUM_NODES;
> > -
> >   /* Convert nodemask to NUMA bitmask. */
> >   nodemask_zero(&mask);
> >   bit = -1;
> >   while ((bit = virBitmapNextSetBit(tmp_nodemask, bit)) >= 0) {
> > -if (bit > maxnode) {
> > -virReportError(VIR_ERR_INTERNAL_ERROR,
> > -   _("NUMA node %d is out of range"), bit);
> > -return -1;
> > -}
> >   nodemask_set(&mask, bit);
> >   }
> >
> >
> 
> Yet again, this suffers the same problem that 1/2 does: domain may be lost.
> 
> Michal


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


Re: [libvirt] [PATCH 2/2] numatune: move up verification codes in virNumaSetupMemoryPolicy

2014-09-23 Thread Michal Privoznik

On 23.09.2014 11:34, Chen Fan wrote:

use virDomainNumatuneNodeSetIsAvailable() to verify momory.nodeset
whether is out of range. and move up the verification.

Signed-off-by: Chen Fan 
---
  src/conf/numatune_conf.c |  3 +++
  src/util/virnuma.c   | 15 ---
  2 files changed, 3 insertions(+), 15 deletions(-)


I'd expect a test case for this.



diff --git a/src/conf/numatune_conf.c b/src/conf/numatune_conf.c
index a9b20aa..8b43167 100644
--- a/src/conf/numatune_conf.c
+++ b/src/conf/numatune_conf.c
@@ -278,6 +278,9 @@ virDomainNumatuneParseXML(virDomainNumatunePtr *numatunePtr,
   nodeset) < 0)
  goto cleanup;

+if (!virDomainNumatuneNodeSetIsAvailable(*numatunePtr, -1))
+goto cleanup;
+
  if (virDomainNumatuneNodeParseXML(numatunePtr, ncells, ctxt) < 0)
  goto cleanup;

diff --git a/src/util/virnuma.c b/src/util/virnuma.c
index 1a34398..4766f16 100644
--- a/src/util/virnuma.c
+++ b/src/util/virnuma.c
@@ -95,31 +95,16 @@ virNumaSetupMemoryPolicy(virDomainNumatunePtr numatune,
  int ret = -1;
  int bit = 0;
  size_t i;
-int maxnode = 0;
  virBitmapPtr tmp_nodemask = NULL;

  tmp_nodemask = virDomainNumatuneGetNodeset(numatune, nodemask, -1);
  if (!tmp_nodemask)
  return 0;

-if (numa_available() < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   "%s", _("Host kernel is not aware of NUMA."));
-return -1;
-}
-
-maxnode = numa_max_node();
-maxnode = maxnode < NUMA_NUM_NODES ? maxnode : NUMA_NUM_NODES;
-
  /* Convert nodemask to NUMA bitmask. */
  nodemask_zero(&mask);
  bit = -1;
  while ((bit = virBitmapNextSetBit(tmp_nodemask, bit)) >= 0) {
-if (bit > maxnode) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("NUMA node %d is out of range"), bit);
-return -1;
-}
  nodemask_set(&mask, bit);
  }




Yet again, this suffers the same problem that 1/2 does: domain may be lost.

Michal

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


[libvirt] [PATCH 2/2] numatune: move up verification codes in virNumaSetupMemoryPolicy

2014-09-23 Thread Chen Fan
use virDomainNumatuneNodeSetIsAvailable() to verify momory.nodeset
whether is out of range. and move up the verification.

Signed-off-by: Chen Fan 
---
 src/conf/numatune_conf.c |  3 +++
 src/util/virnuma.c   | 15 ---
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git a/src/conf/numatune_conf.c b/src/conf/numatune_conf.c
index a9b20aa..8b43167 100644
--- a/src/conf/numatune_conf.c
+++ b/src/conf/numatune_conf.c
@@ -278,6 +278,9 @@ virDomainNumatuneParseXML(virDomainNumatunePtr *numatunePtr,
  nodeset) < 0)
 goto cleanup;
 
+if (!virDomainNumatuneNodeSetIsAvailable(*numatunePtr, -1))
+goto cleanup;
+
 if (virDomainNumatuneNodeParseXML(numatunePtr, ncells, ctxt) < 0)
 goto cleanup;
 
diff --git a/src/util/virnuma.c b/src/util/virnuma.c
index 1a34398..4766f16 100644
--- a/src/util/virnuma.c
+++ b/src/util/virnuma.c
@@ -95,31 +95,16 @@ virNumaSetupMemoryPolicy(virDomainNumatunePtr numatune,
 int ret = -1;
 int bit = 0;
 size_t i;
-int maxnode = 0;
 virBitmapPtr tmp_nodemask = NULL;
 
 tmp_nodemask = virDomainNumatuneGetNodeset(numatune, nodemask, -1);
 if (!tmp_nodemask)
 return 0;
 
-if (numa_available() < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   "%s", _("Host kernel is not aware of NUMA."));
-return -1;
-}
-
-maxnode = numa_max_node();
-maxnode = maxnode < NUMA_NUM_NODES ? maxnode : NUMA_NUM_NODES;
-
 /* Convert nodemask to NUMA bitmask. */
 nodemask_zero(&mask);
 bit = -1;
 while ((bit = virBitmapNextSetBit(tmp_nodemask, bit)) >= 0) {
-if (bit > maxnode) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("NUMA node %d is out of range"), bit);
-return -1;
-}
 nodemask_set(&mask, bit);
 }
 
-- 
1.9.3

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