[libvirt] [v5][PATCH 2/4] PowerPC : Add support for launching VMs in 'compat' mode.

Michal Privoznik mprivozn at redhat.com
Mon Nov 3 09:27:50 UTC 2014


On 31.10.2014 10:51, Prerna Saxena wrote:
>
> From: Prerna Saxena <prerna at linux.vnet.ibm.com>
> Date: Tue, 28 Oct 2014 15:05:59 +0530
>
> PowerISA allows processors to run VMs in binary compatibility ("compat")
> mode supporting an older version of ISA. QEMU has recently added support to
> explicitly denote a VM running in compatibility mode through commit 6d9412ea
> & 8dfa3a5e85.
> Now, a "compat" mode VM can be run by invoking this qemu commandline on a
> POWER8 host:  -cpu host,compat=power7.
>
> This patch allows libvirt to exploit cpu mode 'host-model' to describe this
> new mode for PowerKVM guests. As an example:
> When a user wants to request a power7 vm to run in compatibility mode on
> a Power8 host, this can be described in XML as follows :
>    <cpu mode='host-model'>
>      <model>power7</model>
>    </cpu>

So I guess we've agreement on this.

>
> Signed-off-by: Prerna Saxena <prerna at linux.vnet.ibm.com>
> Signed-off-by: Li Zhang <zhlcindy at linux.vnet.ibm.com>
> Signed-off-by: Pradipta Kr. Banerjee <bpradip at in.ibm.com>
> ---
>   src/conf/cpu_conf.c     |  1 +
>   src/cpu/cpu_powerpc.c   | 11 ++---------
>   src/qemu/qemu_command.c | 10 +++++++++-
>   3 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index 9b7fbb0..0e7a979 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -619,6 +619,7 @@ virCPUDefFormatBuf(virBufferPtr buf,
>           return 0;
>
>       formatModel = (def->mode == VIR_CPU_MODE_CUSTOM ||
> +                   def->mode == VIR_CPU_MODE_HOST_MODEL ||
>                      (flags & VIR_DOMAIN_XML_UPDATE_CPU));
>       formatFallback = (def->type == VIR_CPU_TYPE_GUEST &&
>                         (def->mode == VIR_CPU_MODE_HOST_MODEL ||
> diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
> index d591c18..4ea1835 100644
> --- a/src/cpu/cpu_powerpc.c
> +++ b/src/cpu/cpu_powerpc.c
> @@ -562,8 +562,8 @@ ppcUpdate(virCPUDefPtr guest,
>   static virCPUDefPtr
>   ppcBaseline(virCPUDefPtr *cpus,
>               unsigned int ncpus,
> -            const char **models,
> -            unsigned int nmodels,
> +            const char **models ATTRIBUTE_UNUSED,
> +            unsigned int nmodels ATTRIBUTE_UNUSED,
>               unsigned int flags)
>   {
>       struct ppc_map *map = NULL;
> @@ -583,13 +583,6 @@ ppcBaseline(virCPUDefPtr *cpus,
>           goto error;
>       }
>
> -    if (!cpuModelIsAllowed(model->name, models, nmodels)) {
> -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> -                        _("CPU model %s is not supported by hypervisor"),
> -                        model->name);
> -        goto error;
> -    }
> -
>       for (i = 0; i < ncpus; i++) {
>           const struct ppc_vendor *vnd;
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index d60f274..34f6535 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -6221,7 +6221,9 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
>           *hasHwVirt = hasSVM > 0 ? true : false;
>       }
>
> -    if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
> +    if ((cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) ||
> +        ((cpu->mode == VIR_CPU_MODE_HOST_MODEL) &&
> +          ARCH_IS_PPC64(def->os.arch))) {
>           const char *mode = virCPUModeTypeToString(cpu->mode);
>           if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
>               virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> @@ -6236,6 +6238,12 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
>               goto cleanup;
>           }
>           virBufferAddLit(buf, "host");
> +
> +        if (ARCH_IS_PPC64(def->os.arch) &&
> +            cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
> +            virBufferAsprintf(buf, ",compat=%s", def->cpu->model);
> +        }
> +
>       } else {
>           if (VIR_ALLOC(guest) < 0)
>               goto cleanup;
>

ACK then.

Michal




More information about the libvir-list mailing list