[libvirt] [PATCH v1 3/4] libxl: implement virConnectCompareCPU

Michal Privoznik mprivozn at redhat.com
Mon Sep 12 10:50:44 UTC 2016


On 20.07.2016 21:08, Joao Martins wrote:
> Implement support for "virsh cpu-compare" so that we can calculate
> common cpu element between a pool of hosts, which had a requirement
> of providing host cpu description.
> 
> Signed-off-by: Joao Martins <joao.m.martins at oracle.com>
> ---
>  src/libxl/libxl_driver.c | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index f153f69..977e9b5 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -5770,6 +5770,43 @@ libxlConnectGetDomainCapabilities(virConnectPtr conn,
>  }
>  

You need to include cpu.h in this patch otherwise cpuCompareXML() which
is used below is left undefined.

>  
> +static int
> +libxlConnectCompareCPU(virConnectPtr conn,
> +                       const char *xmlDesc,
> +                       unsigned int flags)
> +{
> +    libxlDriverPrivatePtr driver = conn->privateData;
> +    libxlDriverConfigPtr cfg;
> +    int ret = VIR_CPU_COMPARE_ERROR;
> +    bool failIncompatible;
> +
> +    virCheckFlags(VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE,
> +                  VIR_CPU_COMPARE_ERROR);
> +
> +    if (virConnectCompareCPUEnsureACL(conn) < 0)
> +        return ret;
> +
> +    failIncompatible = !!(flags & VIR_CONNECT_COMPARE_CPU_FAIL_INCOMPATIBLE);
> +
> +    cfg = libxlDriverConfigGet(driver);
> +
> +    if (!cfg->caps->host.cpu ||
> +        !cfg->caps->host.cpu->model) {
> +        if (failIncompatible) {
> +            virReportError(VIR_ERR_CPU_INCOMPATIBLE, "%s",
> +                           _("cannot get host CPU capabilities"));
> +        } else {
> +            VIR_WARN("cannot get host CPU capabilities");
> +            ret = VIR_CPU_COMPARE_INCOMPATIBLE;
> +        }
> +    } else {
> +        ret = cpuCompareXML(cfg->caps->host.cpu, xmlDesc, failIncompatible);
> +    }
> +
> +    virObjectUnref(cfg);
> +    return ret;
> +}
> +
>  static virHypervisorDriver libxlHypervisorDriver = {
>      .name = LIBXL_DRIVER_NAME,
>      .connectOpen = libxlConnectOpen, /* 0.9.0 */
> @@ -5872,6 +5909,7 @@ static virHypervisorDriver libxlHypervisorDriver = {
>      .nodeGetSecurityModel = libxlNodeGetSecurityModel, /* 1.2.16 */
>      .domainInterfaceAddresses = libxlDomainInterfaceAddresses, /* 1.3.5 */
>      .connectGetDomainCapabilities = libxlConnectGetDomainCapabilities, /* 2.0.0 */
> +    .connectCompareCPU = libxlConnectCompareCPU, /* 2.1.0 */
>  };

Actually, 2.3.0 now, sorry for such delay.

Michal




More information about the libvir-list mailing list