[libvirt] [PATCH 3/5] conf: Split out NUMA topology formatting to simplify access to data

Martin Kletzander mkletzan at redhat.com
Mon Jan 21 08:53:42 UTC 2013


On 01/19/2013 12:06 AM, Peter Krempa wrote:
> ---
>  src/conf/capabilities.c | 43 +++++++++++++++++++++++++------------------
>  1 file changed, 25 insertions(+), 18 deletions(-)
> 
> diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
> index 365c511..0d2512e 100644
> --- a/src/conf/capabilities.c
> +++ b/src/conf/capabilities.c
> @@ -678,6 +678,28 @@ virCapabilitiesDefaultGuestEmulator(virCapsPtr caps,
>      return NULL;
>  }
> 
> +static void
> +virCapabilitiesFormatNUMATopology(virBufferPtr xml,
> +                                  size_t ncells,
> +                                  virCapsHostNUMACellPtr *cells)
> +{
> +    int i;
> +    int j;
> +
> +    virBufferAddLit(xml, "    <topology>\n");
> +    virBufferAsprintf(xml, "      <cells num='%zu'>\n", ncells);
> +    for (i = 0; i < ncells; i++) {
> +        virBufferAsprintf(xml, "        <cell id='%d'>\n", cells[i]->num);
> +        virBufferAsprintf(xml, "          <cpus num='%d'>\n", cells[i]->ncpus);
> +        for (j = 0; j < cells[i]->ncpus; j++)
> +            virBufferAsprintf(xml, "            <cpu id='%d'/>\n",
> +                              cells[i]->cpus[j]);
> +        virBufferAddLit(xml, "          </cpus>\n");
> +        virBufferAddLit(xml, "        </cell>\n");
> +    }
> +    virBufferAddLit(xml, "      </cells>\n");
> +    virBufferAddLit(xml, "    </topology>\n");
> +}
> 
>  /**
>   * virCapabilitiesFormatXML:
> @@ -752,24 +774,9 @@ virCapabilitiesFormatXML(virCapsPtr caps)
>          virBufferAddLit(&xml, "    </migration_features>\n");
>      }
> 
> -    if (caps->host.nnumaCell) {
> -        virBufferAddLit(&xml, "    <topology>\n");
> -        virBufferAsprintf(&xml, "      <cells num='%zu'>\n",
> -                          caps->host.nnumaCell);
> -        for (i = 0 ; i < caps->host.nnumaCell ; i++) {
> -            virBufferAsprintf(&xml, "        <cell id='%d'>\n",
> -                              caps->host.numaCell[i]->num);
> -            virBufferAsprintf(&xml, "          <cpus num='%d'>\n",
> -                              caps->host.numaCell[i]->ncpus);
> -            for (j = 0 ; j < caps->host.numaCell[i]->ncpus ; j++)
> -                virBufferAsprintf(&xml, "            <cpu id='%d'/>\n",
> -                                  caps->host.numaCell[i]->cpus[j]);
> -            virBufferAddLit(&xml, "          </cpus>\n");
> -            virBufferAddLit(&xml, "        </cell>\n");
> -        }
> -        virBufferAddLit(&xml, "      </cells>\n");
> -        virBufferAddLit(&xml, "    </topology>\n");
> -    }
> +    if (caps->host.nnumaCell)
> +        virCapabilitiesFormatNUMATopology(&xml, caps->host.nnumaCell,
> +                                          caps->host.numaCell);
> 
>      for (i = 0; i < caps->host.nsecModels; i++) {
>          virBufferAddLit(&xml, "    <secmodel>\n");
> 

ACK,

Martin




More information about the libvir-list mailing list