On 05.05.2015 12:13, Luyao Huang wrote:
>
https://bugzilla.redhat.com/show_bug.cgi?id=1176020
>
> We had a check for the vcpu count total number in <numa>
> before, however this check is not good enough. There are
> some examples:
>
> 1. one of cpu id is out of maxvcpus, can set success(cpu count = 5 < 10):
>
> <vcpu placement='static'>10</vcpu>
> <cell id='0' cpus='0-3,100' memory='512000'
unit='KiB'/>
>
> 2. use the same cpu in 2 cell, can set success(cpu count = 8 < 10):
> <vcpu placement='static'>10</vcpu>
> <cell id='0' cpus='0-3' memory='512000'
unit='KiB'/>
> <cell id='1' cpus='0-3' memory='512000'
unit='KiB'/>
>
> 3. use the same cpu in 2 cell, cannot set success(cpu count = 11 > 10):
> <vcpu placement='static'>10</vcpu>
> <cell id='0' cpus='0-6' memory='512000'
unit='KiB'/>
> <cell id='1' cpus='0-3' memory='512000'
unit='KiB'/>
>
> Add a check for numa cpus, check if duplicate use one cpu in more
> than one cell.
>
> Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
> ---
> v3: remove the max vcpu check, just add a check when
> parse the numa settings, and change the subject.
>
> src/conf/numa_conf.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/src/conf/numa_conf.c b/src/conf/numa_conf.c
> index 7ad3f66..e25d7a8 100644
> --- a/src/conf/numa_conf.c
> +++ b/src/conf/numa_conf.c
> @@ -738,6 +738,15 @@ virDomainNumaDefCPUParseXML(virDomainNumaPtr def,
> }
> VIR_FREE(tmp);
>
> + for (j = 0; j < i; j++) {
> + if (virBitmapOverlaps(def->mem_nodes[j].cpumask,
> + def->mem_nodes[i].cpumask)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("NUMA cells %zu and %zu have overlapping vCPU
ids"), i, j);
> + goto cleanup;
> + }
> + }
> +
> ctxt->node = nodes[i];
> if (virDomainParseMemory("./@memory", "./@unit", ctxt,
> &def->mem_nodes[cur_cell].mem, true, false)
< 0)
>
Even though this does not compile, I'm squashing in the obvious fix,
ACKing and pushing.