[libvirt] [PATCH v3 2/3] PowerPC : Add support for launching VMs in 'compat' mode.
Michal Privoznik
mprivozn at redhat.com
Mon Oct 27 14:40:13 UTC 2014
On 26.10.2014 12:07, Prerna Saxena wrote:
>
>>From c3572e59f1e56322ba92ab35e31da48dd63b7cec Mon Sep 17 00:00:00 2001
> From: Prerna Saxena <prerna at linux.vnet.ibm.com>
> Date: Tue, 21 Oct 2014 01:06:51 -0400
>
> 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 extend the "fallback" semantics of cpu 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 fallback='compat'>power7</model>
> </cpu>
>
> 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>
> ---
> docs/schemas/domaincommon.rng | 1 +
> src/conf/cpu_conf.c | 4 +++-
> src/conf/cpu_conf.h | 1 +
> src/cpu/cpu_powerpc.c | 14 ++++----------
> src/qemu/qemu_command.c | 11 ++++++++++-
> 5 files changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 20d81ae..ebab482 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -4067,6 +4067,7 @@
> <choice>
> <value>allow</value>
> <value>forbid</value>
> + <value>compat</value>
> </choice>
> </attribute>
> </optional>
Each RNG change should go hand in hand with docs change. Therefore I
can't ACK this one.
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index 9b7fbb0..e12d3db 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -47,7 +47,8 @@ VIR_ENUM_IMPL(virCPUMatch, VIR_CPU_MATCH_LAST,
>
> VIR_ENUM_IMPL(virCPUFallback, VIR_CPU_FALLBACK_LAST,
> "allow",
> - "forbid")
> + "forbid",
> + "compat")
>
> VIR_ENUM_IMPL(virCPUFeaturePolicy, VIR_CPU_FEATURE_LAST,
> "force",
> @@ -619,6 +620,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/conf/cpu_conf.h b/src/conf/cpu_conf.h
> index d45210b..69d8584 100644
> --- a/src/conf/cpu_conf.h
> +++ b/src/conf/cpu_conf.h
> @@ -65,6 +65,7 @@ VIR_ENUM_DECL(virCPUMatch)
> typedef enum {
> VIR_CPU_FALLBACK_ALLOW,
> VIR_CPU_FALLBACK_FORBID,
> + VIR_CPU_FALLBACK_COMPAT,
>
> VIR_CPU_FALLBACK_LAST
> } virCPUFallback;
> diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
> index d591c18..ad887fe 100644
> --- a/src/cpu/cpu_powerpc.c
> +++ b/src/cpu/cpu_powerpc.c
> @@ -479,7 +479,8 @@ ppcDecode(virCPUDefPtr cpu,
> goto cleanup;
> }
>
> - if (!cpuModelIsAllowed(model->name, models, nmodels)) {
> + if (cpu->fallback != VIR_CPU_FALLBACK_COMPAT &&
> + !cpuModelIsAllowed(model->name, models, nmodels)) {
Indentation's off.
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> _("CPU model %s is not supported by hypervisor"),
> model->name);
> @@ -562,8 +563,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)
> {
Michal
More information about the libvir-list
mailing list