aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/hw/boards.h6
-rw-r--r--vl.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 7f044d101d..6b67adaef6 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -125,6 +125,10 @@ typedef struct {
* Caller is responsible for freeing returned list.
* @has_hotpluggable_cpus:
* If true, board supports CPUs creation with -device/device_add.
+ * @default_cpu_type:
+ * specifies default CPU_TYPE, which will be used for parsing target
+ * specific features and for creating CPUs if CPU name wasn't provided
+ * explicitly at CLI
* @minimum_page_bits:
* If non-zero, the board promises never to create a CPU with a page size
* smaller than this, so QEMU can use a more efficient larger page
@@ -177,6 +181,7 @@ struct MachineClass {
GArray *compat_props;
const char *hw_version;
ram_addr_t default_ram_size;
+ const char *default_cpu_type;
bool option_rom_has_mr;
bool rom_file_has_mr;
int minimum_page_bits;
@@ -231,6 +236,7 @@ struct MachineState {
char *kernel_cmdline;
char *initrd_filename;
const char *cpu_model;
+ const char *cpu_type;
AccelState *accelerator;
CPUArchIdList *possible_cpus;
};
diff --git a/vl.c b/vl.c
index ad49314608..9bb5058c3a 100644
--- a/vl.c
+++ b/vl.c
@@ -4716,6 +4716,16 @@ int main(int argc, char **argv, char **envp)
current_machine->boot_order = boot_order;
current_machine->cpu_model = cpu_model;
+
+ /* parse features once if machine provides default cpu_type */
+ if (machine_class->default_cpu_type) {
+ current_machine->cpu_type = machine_class->default_cpu_type;
+ if (cpu_model) {
+ current_machine->cpu_type =
+ cpu_parse_cpu_model(machine_class->default_cpu_type, cpu_model);
+ }
+ }
+
machine_run_board_init(current_machine);
realtime_init();