cpu: Add generic cpu_list()
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> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20231114235628.534334-7-gshan@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
445946f4dd
commit
dfa4753131
@ -378,10 +378,7 @@ int main(int argc, char **argv)
|
||||
} else if (!strcmp(r, "cpu")) {
|
||||
cpu_model = argv[optind++];
|
||||
if (is_help_option(cpu_model)) {
|
||||
/* XXX: implement xxx_cpu_list for targets that still miss it */
|
||||
#if defined(cpu_list)
|
||||
cpu_list();
|
||||
#endif
|
||||
list_cpus();
|
||||
exit(1);
|
||||
}
|
||||
} else if (!strcmp(r, "B")) {
|
||||
|
29
cpu-target.c
29
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);
|
||||
}
|
||||
}
|
||||
|
||||
static void cpu_list(void)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
list = object_class_get_list_sorted(TYPE_CPU, false);
|
||||
qemu_printf("Available CPUs:\n");
|
||||
g_slist_foreach(list, cpu_list_entry, NULL);
|
||||
g_slist_free(list);
|
||||
}
|
||||
#endif
|
||||
|
||||
void list_cpus(void)
|
||||
{
|
||||
/* XXX: implement xxx_cpu_list for targets that still miss it */
|
||||
#if defined(cpu_list)
|
||||
cpu_list();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
|
Loading…
Reference in New Issue
Block a user