[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v5 06/31] cpu: Add generic cpu_list()
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v5 06/31] cpu: Add generic cpu_list() |
Date: |
Thu, 16 Nov 2023 11:19:18 +0100 |
User-agent: |
Mozilla Thunderbird |
On 16/11/23 08:51, Philippe Mathieu-Daudé wrote:
On 16/11/23 08:39, Philippe Mathieu-Daudé wrote:
Hi Gavin,
On 15/11/23 00:56, Gavin Shan wrote:
Add generic cpu_list() to replace the individual target's implementation
in the subsequent commits. Currently, there are 3 targets with no
cpu_list()
implementation: microblaze and nios2. With this applied, those two
targets
switch to the generic cpu_list().
[gshan@gshan q]$ ./build/qemu-system-microblaze -cpu ?
Available CPUs:
microblaze-cpu
[gshan@gshan q]$ ./build/qemu-system-nios2 -cpu ?
Available CPUs:
nios2-cpu
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Gavin Shan <gshan@redhat.com>
---
bsd-user/main.c | 5 +----
cpu-target.c | 29 ++++++++++++++++++++++++++---
2 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/cpu-target.c b/cpu-target.c
index c078c0e91b..acfc654b95 100644
--- a/cpu-target.c
+++ b/cpu-target.c
@@ -24,6 +24,7 @@
#include "hw/qdev-core.h"
#include "hw/qdev-properties.h"
#include "qemu/error-report.h"
+#include "qemu/qemu-print.h"
#include "migration/vmstate.h"
#ifdef CONFIG_USER_ONLY
#include "qemu.h"
@@ -283,12 +284,34 @@ const char *parse_cpu_option(const char
*cpu_option)
return cpu_type;
}
+#ifndef cpu_list
+static void cpu_list_entry(gpointer data, gpointer user_data)
+{
+ CPUClass *cc = CPU_CLASS(OBJECT_CLASS(data));
+ const char *typename = object_class_get_name(OBJECT_CLASS(data));
+ g_autofree char *model = cpu_model_from_type(typename);
+
+ if (cc->deprecation_note) {
+ qemu_printf(" %s (deprecated)\n", model);
+ } else {
+ qemu_printf(" %s\n", model);
Wondering how this scale to heterogeneous emulation. Should we
display the architecture, i.e.:
-- >8 --
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 76ef59de0a..aeff182a37 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -792,6 +792,8 @@ ObjectClass *cpu_class_by_name(const char *typename,
const char *cpu_model);
*/
char *cpu_model_from_type(const char *typename);
+char *cpu_arch_from_type(const char *typename);
+
/**
* cpu_create:
* @typename: The CPU type.
diff --git a/cpu-target.c b/cpu-target.c
index acfc654b95..75412f902f 100644
--- a/cpu-target.c
+++ b/cpu-target.c
@@ -257,6 +257,12 @@ char *cpu_model_from_type(const char *typename)
return g_strdup(typename);
}
+char *cpu_arch_from_type(const char *typename)
+{
+ assert(g_str_has_suffix(CPU_RESOLVING_TYPE, "-cpu"));
+ return g_strndup(CPU_RESOLVING_TYPE, strlen(CPU_RESOLVING_TYPE) -
strlen("-cpu"));
+}
+
const char *parse_cpu_option(const char *cpu_option)
{
ObjectClass *oc;
@@ -290,12 +296,11 @@ static void cpu_list_entry(gpointer data, gpointer
user_data)
CPUClass *cc = CPU_CLASS(OBJECT_CLASS(data));
const char *typename = object_class_get_name(OBJECT_CLASS(data));
g_autofree char *model = cpu_model_from_type(typename);
+ g_autofree char *arch = cpu_arch_from_type(typename);
+ g_autofree char *arch_up = g_ascii_strup(arch, -1);
- if (cc->deprecation_note) {
- qemu_printf(" %s (deprecated)\n", model);
- } else {
- qemu_printf(" %s\n", model);
- }
+ qemu_printf(" %s (%s%s)\n", model, arch_up,
+ cc->deprecation_note ? ", deprecated" : "");
}
---
Produces:
qemu-system-aarch64 -M mps2-an500 -cpu \?
Available CPUs:
a64fx (ARM)
arm1026 (ARM)
arm1136 (ARM)
arm1136-r2 (ARM)
arm1176 (ARM)
arm11mpcore (ARM)
arm926 (ARM)
arm946 (ARM)
cortex-a15 (ARM)
cortex-a35 (ARM)
cortex-a53 (ARM)
cortex-a55 (ARM)
cortex-a57 (ARM)
cortex-a7 (ARM)
cortex-a710 (ARM)
cortex-a72 (ARM)
cortex-a76 (ARM)
cortex-a8 (ARM)
cortex-a9 (ARM)
cortex-m0 (ARM)
cortex-m3 (ARM)
cortex-m33 (ARM)
cortex-m4 (ARM)
cortex-m55 (ARM)
cortex-m7 (ARM)
cortex-r5 (ARM)
cortex-r52 (ARM)
cortex-r5f (ARM)
host (ARM)
max (ARM)
Bah, host/max are meaningless here. We'll need to filter somehow,
or rename them.
- Re: [PATCH v5 02/31] target/hppa: Remove object_class_is_abstract(), (continued)
- [PATCH v5 03/31] cpu: Call object_class_dynamic_cast() once in cpu_class_by_name(), Gavin Shan, 2023/11/14
- [PATCH v5 04/31] target: Remove 'oc == NULL' check, Gavin Shan, 2023/11/14
- [PATCH v5 05/31] cpu: Add helper cpu_model_from_type(), Gavin Shan, 2023/11/14
- [PATCH v5 06/31] cpu: Add generic cpu_list(), Gavin Shan, 2023/11/14
- Re: [PATCH v5 06/31] cpu: Add generic cpu_list(), Gavin Shan, 2023/11/16
- Re: [PATCH v5 06/31] cpu: Add generic cpu_list(), Philippe Mathieu-Daudé, 2023/11/16
[PATCH v5 07/31] target/alpha: Use generic cpu_list(), Gavin Shan, 2023/11/14
[PATCH v5 08/31] target/arm: Use generic cpu_list(), Gavin Shan, 2023/11/14
[PATCH v5 09/31] target/avr: Use generic cpu_list(), Gavin Shan, 2023/11/14