machine: Add a valid_cpu_types property
This patch add a MachineClass element that can be set in the machine C code to specify a list of supported CPU types. If the supported CPU types are specified the user enter CPU (by -cpu at runtime) is checked against the supported types and QEMU exits if they aren't supported. Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Message-Id: <b8474e9d2e0a219d9bac901342f983b13d009301.1507059418.git.alistair.francis@xilinx.com> [ehabkost: removed assert(), rewrote comment] Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
8301ea444a
commit
c9cf636d48
@ -758,6 +758,38 @@ void machine_run_board_init(MachineState *machine)
|
||||
if (nb_numa_nodes) {
|
||||
machine_numa_finish_init(machine);
|
||||
}
|
||||
|
||||
/* If the machine supports the valid_cpu_types check and the user
|
||||
* specified a CPU with -cpu check here that the user CPU is supported.
|
||||
*/
|
||||
if (machine_class->valid_cpu_types && machine->cpu_type) {
|
||||
ObjectClass *class = object_class_by_name(machine->cpu_type);
|
||||
int i;
|
||||
|
||||
for (i = 0; machine_class->valid_cpu_types[i]; i++) {
|
||||
if (object_class_dynamic_cast(class,
|
||||
machine_class->valid_cpu_types[i])) {
|
||||
/* The user specificed CPU is in the valid field, we are
|
||||
* good to go.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!machine_class->valid_cpu_types[i]) {
|
||||
/* The user specified CPU is not valid */
|
||||
error_report("Invalid CPU type: %s", machine->cpu_type);
|
||||
error_printf("The valid types are: %s",
|
||||
machine_class->valid_cpu_types[0]);
|
||||
for (i = 1; machine_class->valid_cpu_types[i]; i++) {
|
||||
error_printf(", %s", machine_class->valid_cpu_types[i]);
|
||||
}
|
||||
error_printf("\n");
|
||||
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
machine_class->init(machine);
|
||||
}
|
||||
|
||||
|
@ -191,6 +191,7 @@ struct MachineClass {
|
||||
bool has_hotpluggable_cpus;
|
||||
bool ignore_memory_transaction_failures;
|
||||
int numa_mem_align_shift;
|
||||
const char **valid_cpu_types;
|
||||
void (*numa_auto_assign_ram)(MachineClass *mc, NodeInfo *nodes,
|
||||
int nb_nodes, ram_addr_t size);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user