[libvirt] [PATCH 2/5] conf: Split up virDomainVcpuPinDefParseXML
John Ferlan
jferlan at redhat.com
Tue Apr 14 01:27:02 UTC 2015
On 04/07/2015 02:50 PM, Peter Krempa wrote:
> Extract part that parses iothreads into virDomainIothreadPinDefParseXML
> ---
> src/conf/domain_conf.c | 112 +++++++++++++++++++++++++++++--------------------
> 1 file changed, 66 insertions(+), 46 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index ec7f9c9..10ec17a 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -13153,30 +13153,19 @@ virDomainIdmapDefParseXML(xmlXPathContextPtr ctxt,
> return idmap;
> }
>
> -/* Parse the XML definition for a vcpupin or emulatorpin.
> +/* Parse the XML definition for a vcpupin
[set bikeshed=flog... technically the above would go in patch 1, but
I'm not concerned due to where this is headed... same in about 4 lines ]
> *
> * vcpupin has the form of
> * <vcpupin vcpu='0' cpuset='0'/>
> - *
> - * and emulatorpin has the form of
> - * <emulatorpin cpuset='0'/>
> - *
> - * and an iothreadspin has the form
> - * <iothreadpin iothread='1' cpuset='2'/>
> - *
> - * A vcpuid of -1 is valid and only valid for emulatorpin. So callers
> - * have to check the returned cpuid for validity.
> */
> static virDomainPinDefPtr
> virDomainVcpuPinDefParseXML(xmlNodePtr node,
> xmlXPathContextPtr ctxt,
> - int maxvcpus,
> - bool iothreads)
> + int maxvcpus)
> {
> virDomainPinDefPtr def;
> xmlNodePtr oldnode = ctxt->node;
> int vcpuid = -1;
> - unsigned int iothreadid;
> char *tmp = NULL;
> int ret;
>
> @@ -13185,28 +13174,66 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
>
> ctxt->node = node;
>
> - if (!iothreads) {
> - ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
> - if ((ret == -2) || (vcpuid < -1)) {
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("vcpu id must be an unsigned integer or -1"));
> - goto error;
> - } else if (vcpuid == -1) {
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("vcpu id value -1 is not allowed for vcpupin"));
> - goto error;
> - }
> + ret = virXPathInt("string(./@vcpu)", ctxt, &vcpuid);
> + if ((ret == -2) || (vcpuid < -1)) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("vcpu id must be an unsigned integer or -1"));
> + goto error;
> + } else if (vcpuid == -1) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("vcpu id value -1 is not allowed for vcpupin"));
> + goto error;
> + }
>
> - if (vcpuid >= maxvcpus) {
> + if (vcpuid >= maxvcpus) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("vcpu id must be less than maxvcpus"));
> + goto error;
> + }
> +
> + def->id = vcpuid;
> +
> + if (!(tmp = virXMLPropString(node, "cpuset"))) {
> virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("vcpu id must be less than maxvcpus"));
> - goto error;
> - }
> + _("missing cpuset for vcpupin"));
>
> - def->id = vcpuid;
> + goto error;
> }
>
> - if (iothreads && (tmp = virXPathString("string(./@iothread)", ctxt))) {
> + if (virBitmapParse(tmp, 0, &def->cpumask, VIR_DOMAIN_CPUMASK_LEN) < 0)
> + goto error;
> +
> + cleanup:
> + VIR_FREE(tmp);
> + ctxt->node = oldnode;
> + return def;
> +
> + error:
> + VIR_FREE(def);
> + goto cleanup;
> +}
> +
> +
> +/* Parse the XML definition for a iothreadpin
> + * and an iothreadspin has the form
> + * <iothreadpin iothread='1' cpuset='2'/>
> + */
> +static virDomainPinDefPtr
> +virDomainIothreadPinDefParseXML(xmlNodePtr node,
> + xmlXPathContextPtr ctxt,
> + int iothreads)
s/Iothread/IOThread/
ACK with this
John
> +{
> + virDomainPinDefPtr def;
> + xmlNodePtr oldnode = ctxt->node;
> + unsigned int iothreadid;
> + char *tmp = NULL;
> +
> + if (VIR_ALLOC(def) < 0)
> + return NULL;
> +
> + ctxt->node = node;
> +
> + if ((tmp = virXPathString("string(./@iothread)", ctxt))) {
> if (virStrToLong_uip(tmp, NULL, 10, &iothreadid) < 0) {
> virReportError(VIR_ERR_XML_ERROR,
> _("invalid setting for iothread '%s'"), tmp);
> @@ -13220,11 +13247,9 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
> goto error;
> }
>
> - /* NB: maxvcpus is actually def->iothreads
> - * IOThreads are numbered "iothread1...iothread<n>", where
> - * "n" is the iothreads value
> - */
> - if (iothreadid > maxvcpus) {
> + /* IOThreads are numbered "iothread1...iothread<n>", where
> + * "n" is the iothreads value */
> + if (iothreadid > iothreads) {
> virReportError(VIR_ERR_XML_ERROR, "%s",
> _("iothread id must not exceed iothreads"));
> goto error;
> @@ -13234,13 +13259,8 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
> }
>
> if (!(tmp = virXMLPropString(node, "cpuset"))) {
> - if (iothreads)
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("missing cpuset for iothreadpin"));
> - else
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("missing cpuset for vcpupin"));
> -
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("missing cpuset for iothreadpin"));
> goto error;
> }
>
> @@ -13258,6 +13278,7 @@ virDomainVcpuPinDefParseXML(xmlNodePtr node,
> }
>
>
> +
> /* Parse the XML definition for emulatorpin.
> * emulatorpin has the form of
> * <emulatorpin cpuset='0'/>
> @@ -13970,7 +13991,7 @@ virDomainDefParseXML(xmlDocPtr xml,
> for (i = 0; i < n; i++) {
> virDomainPinDefPtr vcpupin = NULL;
> vcpupin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
> - def->maxvcpus, false);
> + def->maxvcpus);
>
> if (!vcpupin)
> goto error;
> @@ -14057,9 +14078,8 @@ virDomainDefParseXML(xmlDocPtr xml,
>
> for (i = 0; i < n; i++) {
> virDomainPinDefPtr iothreadpin = NULL;
> - iothreadpin = virDomainVcpuPinDefParseXML(nodes[i], ctxt,
> - def->iothreads,
> - true);
> + iothreadpin = virDomainIothreadPinDefParseXML(nodes[i], ctxt,
> + def->iothreads);
> if (!iothreadpin)
> goto error;
>
More information about the libvir-list
mailing list