On Wed, Apr 11, 2012 at 10:40:33PM +0800, Osier Yang wrote: > As explained in previous patch, numad will balance the affinity > dynamically, so reflecting the cpuset from numad at the first > time doesn't make much case, and may just could cause confusion. > --- > docs/formatdomain.html.in | 10 +++++----- > src/conf/domain_conf.c | 28 +++++++++++++++------------- > 2 files changed, 20 insertions(+), 18 deletions(-) > > diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > index a382d30..bb67cd1 100644 > --- a/docs/formatdomain.html.in > +++ b/docs/formatdomain.html.in > @@ -365,11 +365,11 @@ > "auto", defaults to "static" if <code>cpuset</code> is specified, > "auto" indicates the domain process will be pinned to the advisory > nodeset from querying numad, and the value of attribute > - <code>cpuset</code> will be overridden by the advisory nodeset > - from numad if it's specified. If both <code>cpuset</code> and > - <code>placement</code> are not specified, or if <code>placement</code> > - is "static", but no <code>cpuset</code> is specified, the domain > - process will be pinned to all the available physical CPUs. > + <code>cpuset</code> will be ignored if it's specified. If both > + <code>cpuset</code> and <code>placement</code> are not specified, > + or if <code>placement</code> is "static", but no <code>cpuset</code> > + is specified, the domain process will be pinned to all the > + available physical CPUs. > </dd> > </dl> > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index c6b97e1..07dcc89 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -7884,19 +7884,6 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, > } > } > > - tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt); > - if (tmp) { > - char *set = tmp; > - def->cpumasklen = VIR_DOMAIN_CPUMASK_LEN; > - if (VIR_ALLOC_N(def->cpumask, def->cpumasklen) < 0) { > - goto no_memory; > - } > - if (virDomainCpuSetParse(set, 0, def->cpumask, > - def->cpumasklen) < 0) > - goto error; > - VIR_FREE(tmp); > - } > - > tmp = virXPathString("string(./vcpu[1]/@placement)", ctxt); > if (tmp) { > if ((def->placement_mode = > @@ -7913,6 +7900,21 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, > def->placement_mode = VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC; > } > > + if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC) { > + tmp = virXPathString("string(./vcpu[1]/@cpuset)", ctxt); > + if (tmp) { > + char *set = tmp; > + def->cpumasklen = VIR_DOMAIN_CPUMASK_LEN; > + if (VIR_ALLOC_N(def->cpumask, def->cpumasklen) < 0) { > + goto no_memory; > + } > + if (virDomainCpuSetParse(set, 0, def->cpumask, > + def->cpumasklen) < 0) > + goto error; > + VIR_FREE(tmp); > + } > + } > + > /* Extract cpu tunables. */ > if (virXPathULong("string(./cputune/shares[1])", ctxt, > &def->cputune.shares) < 0) Okay since we default to static in case the user didn't explicitely expressed the placement method, I'm fine with this this should not break existing setups. Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list