The <vcpu cpuset=...> attribute has been available since commit e193b5dd, but without documentation or RNG validation. * docs/schemas/domain.rng (vcpu): Further validate cpuset. * docs/formatdomain.html.in: Document it. * src/conf/domain_conf.c: Fix typos. --- docs/formatdomain.html.in | 12 ++++++++++-- docs/schemas/domain.rng | 9 ++++++++- src/conf/domain_conf.c | 6 +++--- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 5e56dae..9f077eb 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -194,7 +194,7 @@ <memoryBacking> <hugepages/> </memoryBacking> - <vcpu>1</vcpu> + <vcpu cpuset="1-4,^3,6">2</vcpu> ...</pre> <dl> @@ -213,7 +213,15 @@ hugepages instead of the normal native page size.</dd> <dt><code>vcpu</code></dt> <dd>The content of this element defines the number of virtual - CPUs allocated for the guest OS.</dd> + CPUs allocated for the guest OS, which must be between 1 and + the maximum supported by the hypervisor. <span class="since">Since + 0.4.4</span>, this element can contain an optional + <code>cpuset</code> attribute, which is a comma-separated + list of physical CPU numbers that virtual CPUs can be pinned + to. Each element in that list is either a single CPU number, + a range of CPU numbers, or a caret followed by a CPU number to + be excluded from a previous range. + </dd> </dl> <h3><a name="elementsCPU">CPU model and topology</a></h3> diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index ccb8cf3..2e0457b 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -302,7 +302,9 @@ <optional> <element name="vcpu"> <optional> - <attribute name="cpuset"/> + <attribute name="cpuset"> + <ref name="cpuset"/> + </attribute> </optional> <ref name="countCPU"/> </element> @@ -1785,6 +1787,11 @@ <param name="pattern">[0-9]+</param> </data> </define> + <define name="cpuset"> + <data type="string"> + <param name="pattern">([0-9]+(-[0-9]+)?|\^[0-9]+)(,([0-9]+(-[0-9]+)?|\^[0-9]+))*</param> + </data> + </define> <define name="countCPU"> <data type="unsignedShort"> <param name="pattern">[0-9]+</param> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e05d5d7..afb06e8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5270,7 +5270,7 @@ virDomainCpuNumberParse(const char **str, int maxcpu) * * Serialize the cpuset to a string * - * Returns the new string NULL in case of error. The string need to be + * Returns the new string NULL in case of error. The string needs to be * freed by the caller. */ char * @@ -5329,8 +5329,8 @@ virDomainCpuSetFormat(char *cpuset, int maxcpu) * @maxcpu: number of elements available in @cpuset * * Parse the cpu set, it will set the value for enabled CPUs in the @cpuset - * to 1, and 0 otherwise. The syntax allows coma separated entries each - * can be either a CPU number, ^N to unset that CPU or N-M for ranges. + * to 1, and 0 otherwise. The syntax allows comma separated entries; each + * can be either a CPU number, ^N to unset that CPU, or N-M for ranges. * * Returns the number of CPU found in that set, or -1 in case of error. * @cpuset is modified accordingly to the value parsed. -- 1.7.2.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list