From: "Alex Bennée" <alex.bennee@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, patches@linaro.org,
"Igor Mammedov" <imammedo@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: Re: [PATCH v3 3/6] target/arm: Add "-cpu max" support
Date: Thu, 08 Mar 2018 18:58:43 +0000 [thread overview]
Message-ID: <876066l7h8.fsf@linaro.org> (raw)
In-Reply-To: <20180308130626.12393-4-peter.maydell@linaro.org>
Peter Maydell <peter.maydell@linaro.org> writes:
> Add support for "-cpu max" for ARM guests. This CPU type behaves
> like "-cpu host" when KVM is enabled, and like a system CPU with
> the maximum possible feature set otherwise. (Note that this means
> it won't be migratable across versions, as we will likely add
> features to it in future.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/arm/cpu-qom.h | 2 ++
> target/arm/cpu.c | 24 ++++++++++++++++++++++++
> target/arm/cpu64.c | 21 +++++++++++++++++++++
> 3 files changed, 47 insertions(+)
>
> diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
> index a42495bac9..d135ff8e06 100644
> --- a/target/arm/cpu-qom.h
> +++ b/target/arm/cpu-qom.h
> @@ -33,6 +33,8 @@ struct arm_boot_info;
> #define ARM_CPU_GET_CLASS(obj) \
> OBJECT_GET_CLASS(ARMCPUClass, (obj), TYPE_ARM_CPU)
>
> +#define TYPE_ARM_MAX_CPU "max-" TYPE_ARM_CPU
> +
> /**
> * ARMCPUClass:
> * @parent_realize: The parent class' realize handler.
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index 1a58a2c094..e46ddcc613 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -1697,6 +1697,27 @@ static void pxa270c5_initfn(Object *obj)
> cpu->reset_sctlr = 0x00000078;
> }
>
> +#ifndef TARGET_AARCH64
> +/* -cpu max: if KVM is enabled, like -cpu host (best possible with this host);
> + * otherwise, a CPU with as many features enabled as our emulation supports.
> + * The version of '-cpu max' for qemu-system-aarch64 is defined in cpu64.c;
> + * this only needs to handle 32 bits.
> + */
> +static void arm_max_initfn(Object *obj)
> +{
> + ARMCPU *cpu = ARM_CPU(obj);
> +
> + if (kvm_enabled()) {
> + kvm_arm_set_cpu_features_from_host(cpu);
> + } else {
> + cortex_a15_initfn(obj);
> + /* In future we might add feature bits here even if the
> + * real-world A15 doesn't implement them.
> + */
> + }
> +}
> +#endif
> +
> #ifdef CONFIG_USER_ONLY
> static void arm_any_initfn(Object *obj)
> {
> @@ -1764,6 +1785,9 @@ static const ARMCPUInfo arm_cpus[] = {
> { .name = "pxa270-b1", .initfn = pxa270b1_initfn },
> { .name = "pxa270-c0", .initfn = pxa270c0_initfn },
> { .name = "pxa270-c5", .initfn = pxa270c5_initfn },
> +#ifndef TARGET_AARCH64
> + { .name = "max", .initfn = arm_max_initfn },
> +#endif
> #ifdef CONFIG_USER_ONLY
> { .name = "any", .initfn = arm_any_initfn },
> #endif
> diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
> index 4228713b19..9042d3dfd1 100644
> --- a/target/arm/cpu64.c
> +++ b/target/arm/cpu64.c
> @@ -28,6 +28,7 @@
> #include "hw/arm/arm.h"
> #include "sysemu/sysemu.h"
> #include "sysemu/kvm.h"
> +#include "kvm_arm.h"
>
> static inline void set_feature(CPUARMState *env, int feature)
> {
> @@ -212,6 +213,25 @@ static void aarch64_a53_initfn(Object *obj)
> define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);
> }
>
> +/* -cpu max: if KVM is enabled, like -cpu host (best possible with this host);
> + * otherwise, a CPU with as many features enabled as our emulation supports.
> + * The version of '-cpu max' for qemu-system-arm is defined in cpu.c;
> + * this only needs to handle 64 bits.
> + */
> +static void aarch64_max_initfn(Object *obj)
> +{
> + ARMCPU *cpu = ARM_CPU(obj);
> +
> + if (kvm_enabled()) {
> + kvm_arm_set_cpu_features_from_host(cpu);
> + } else {
> + aarch64_a57_initfn(obj);
> + /* In future we might add feature bits here even if the
> + * real-world A57 doesn't implement them.
> + */
> + }
> +}
> +
> #ifdef CONFIG_USER_ONLY
> static void aarch64_any_initfn(Object *obj)
> {
> @@ -247,6 +267,7 @@ typedef struct ARMCPUInfo {
> static const ARMCPUInfo aarch64_cpus[] = {
> { .name = "cortex-a57", .initfn = aarch64_a57_initfn },
> { .name = "cortex-a53", .initfn = aarch64_a53_initfn },
> + { .name = "max", .initfn = aarch64_max_initfn },
> #ifdef CONFIG_USER_ONLY
> { .name = "any", .initfn = aarch64_any_initfn },
> #endif
--
Alex Bennée
WARNING: multiple messages have this Message-ID (diff)
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, patches@linaro.org,
"Igor Mammedov" <imammedo@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: Re: [Qemu-devel] [PATCH v3 3/6] target/arm: Add "-cpu max" support
Date: Thu, 08 Mar 2018 18:58:43 +0000 [thread overview]
Message-ID: <876066l7h8.fsf@linaro.org> (raw)
In-Reply-To: <20180308130626.12393-4-peter.maydell@linaro.org>
Peter Maydell <peter.maydell@linaro.org> writes:
> Add support for "-cpu max" for ARM guests. This CPU type behaves
> like "-cpu host" when KVM is enabled, and like a system CPU with
> the maximum possible feature set otherwise. (Note that this means
> it won't be migratable across versions, as we will likely add
> features to it in future.)
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> target/arm/cpu-qom.h | 2 ++
> target/arm/cpu.c | 24 ++++++++++++++++++++++++
> target/arm/cpu64.c | 21 +++++++++++++++++++++
> 3 files changed, 47 insertions(+)
>
> diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
> index a42495bac9..d135ff8e06 100644
> --- a/target/arm/cpu-qom.h
> +++ b/target/arm/cpu-qom.h
> @@ -33,6 +33,8 @@ struct arm_boot_info;
> #define ARM_CPU_GET_CLASS(obj) \
> OBJECT_GET_CLASS(ARMCPUClass, (obj), TYPE_ARM_CPU)
>
> +#define TYPE_ARM_MAX_CPU "max-" TYPE_ARM_CPU
> +
> /**
> * ARMCPUClass:
> * @parent_realize: The parent class' realize handler.
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index 1a58a2c094..e46ddcc613 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -1697,6 +1697,27 @@ static void pxa270c5_initfn(Object *obj)
> cpu->reset_sctlr = 0x00000078;
> }
>
> +#ifndef TARGET_AARCH64
> +/* -cpu max: if KVM is enabled, like -cpu host (best possible with this host);
> + * otherwise, a CPU with as many features enabled as our emulation supports.
> + * The version of '-cpu max' for qemu-system-aarch64 is defined in cpu64.c;
> + * this only needs to handle 32 bits.
> + */
> +static void arm_max_initfn(Object *obj)
> +{
> + ARMCPU *cpu = ARM_CPU(obj);
> +
> + if (kvm_enabled()) {
> + kvm_arm_set_cpu_features_from_host(cpu);
> + } else {
> + cortex_a15_initfn(obj);
> + /* In future we might add feature bits here even if the
> + * real-world A15 doesn't implement them.
> + */
> + }
> +}
> +#endif
> +
> #ifdef CONFIG_USER_ONLY
> static void arm_any_initfn(Object *obj)
> {
> @@ -1764,6 +1785,9 @@ static const ARMCPUInfo arm_cpus[] = {
> { .name = "pxa270-b1", .initfn = pxa270b1_initfn },
> { .name = "pxa270-c0", .initfn = pxa270c0_initfn },
> { .name = "pxa270-c5", .initfn = pxa270c5_initfn },
> +#ifndef TARGET_AARCH64
> + { .name = "max", .initfn = arm_max_initfn },
> +#endif
> #ifdef CONFIG_USER_ONLY
> { .name = "any", .initfn = arm_any_initfn },
> #endif
> diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
> index 4228713b19..9042d3dfd1 100644
> --- a/target/arm/cpu64.c
> +++ b/target/arm/cpu64.c
> @@ -28,6 +28,7 @@
> #include "hw/arm/arm.h"
> #include "sysemu/sysemu.h"
> #include "sysemu/kvm.h"
> +#include "kvm_arm.h"
>
> static inline void set_feature(CPUARMState *env, int feature)
> {
> @@ -212,6 +213,25 @@ static void aarch64_a53_initfn(Object *obj)
> define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);
> }
>
> +/* -cpu max: if KVM is enabled, like -cpu host (best possible with this host);
> + * otherwise, a CPU with as many features enabled as our emulation supports.
> + * The version of '-cpu max' for qemu-system-arm is defined in cpu.c;
> + * this only needs to handle 64 bits.
> + */
> +static void aarch64_max_initfn(Object *obj)
> +{
> + ARMCPU *cpu = ARM_CPU(obj);
> +
> + if (kvm_enabled()) {
> + kvm_arm_set_cpu_features_from_host(cpu);
> + } else {
> + aarch64_a57_initfn(obj);
> + /* In future we might add feature bits here even if the
> + * real-world A57 doesn't implement them.
> + */
> + }
> +}
> +
> #ifdef CONFIG_USER_ONLY
> static void aarch64_any_initfn(Object *obj)
> {
> @@ -247,6 +267,7 @@ typedef struct ARMCPUInfo {
> static const ARMCPUInfo aarch64_cpus[] = {
> { .name = "cortex-a57", .initfn = aarch64_a57_initfn },
> { .name = "cortex-a53", .initfn = aarch64_a53_initfn },
> + { .name = "max", .initfn = aarch64_max_initfn },
> #ifdef CONFIG_USER_ONLY
> { .name = "any", .initfn = aarch64_any_initfn },
> #endif
--
Alex Bennée
next prev parent reply other threads:[~2018-03-08 18:58 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-08 13:06 [PATCH v3 0/6] arm: support -cpu max (and gic-version=max) Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-08 13:06 ` [PATCH v3 1/6] target/arm: Query host CPU features on-demand at instance init Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-08 15:53 ` Alex Bennée
2018-03-08 15:53 ` [Qemu-devel] " Alex Bennée
2018-03-08 13:06 ` [PATCH v3 2/6] target/arm: Move definition of 'host' cpu type into cpu.c Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-08 15:55 ` Alex Bennée
2018-03-08 15:55 ` [Qemu-devel] " Alex Bennée
2018-03-08 13:06 ` [PATCH v3 3/6] target/arm: Add "-cpu max" support Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-08 18:58 ` Alex Bennée [this message]
2018-03-08 18:58 ` Alex Bennée
2018-03-09 16:07 ` Philippe Mathieu-Daudé
2018-03-09 16:07 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-03-08 13:06 ` [PATCH v3 4/6] target/arm: Make 'any' CPU just an alias for 'max' Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-09 13:45 ` Alex Bennée
2018-03-09 13:45 ` [Qemu-devel] " Alex Bennée
2018-03-09 16:48 ` Philippe Mathieu-Daudé
2018-03-09 16:48 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-03-08 13:06 ` [PATCH v3 5/6] hw/arm/virt: Add "max" to the list of CPU types "virt" supports Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-09 13:46 ` Alex Bennée
2018-03-09 13:46 ` [Qemu-devel] " Alex Bennée
2018-03-09 16:49 ` Philippe Mathieu-Daudé
2018-03-09 16:49 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-03-08 13:06 ` [PATCH v3 6/6] hw/arm/virt: Support -machine gic-version=max Peter Maydell
2018-03-08 13:06 ` [Qemu-devel] " Peter Maydell
2018-03-09 13:50 ` Alex Bennée
2018-03-09 13:50 ` [Qemu-devel] " Alex Bennée
2018-03-09 13:53 ` Peter Maydell
2018-03-09 13:53 ` [Qemu-devel] " Peter Maydell
2018-03-09 13:52 ` [PATCH v3 0/6] arm: support -cpu max (and gic-version=max) Alex Bennée
2018-03-09 13:52 ` [Qemu-devel] " Alex Bennée
2018-03-09 13:55 ` Peter Maydell
2018-03-09 13:55 ` [Qemu-devel] " Peter Maydell
2018-03-09 16:59 ` Alex Bennée
2018-03-09 16:59 ` [Qemu-devel] " Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=876066l7h8.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=f4bug@amsat.org \
--cc=imammedo@redhat.com \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.