mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
machine: Introduce helper is_cpu_type_supported()
The logic, to check if the specified CPU type is supported in machine_run_board_init(), is independent enough. Factor it out into helper is_cpu_type_supported(). machine_run_board_init() looks a bit clean with this. Since we're here, @machine_class is renamed to @mc to avoid multiple line spanning of code. The comments are tweaked a bit either. No functional change intended. Signed-off-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20231204004726.483558-3-gshan@redhat.com> [PMD: Only call new helper if machine->cpu_type is not NULL] Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
b9f452142c
commit
acbadc5a29
1 changed files with 46 additions and 38 deletions
|
@ -1399,12 +1399,53 @@ const char *machine_class_default_cpu_type(MachineClass *mc)
|
|||
return mc->default_cpu_type;
|
||||
}
|
||||
|
||||
static bool is_cpu_type_supported(const MachineState *machine, Error **errp)
|
||||
{
|
||||
MachineClass *mc = MACHINE_GET_CLASS(machine);
|
||||
ObjectClass *oc = object_class_by_name(machine->cpu_type);
|
||||
CPUClass *cc;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Check if the user specified CPU type is supported when the valid
|
||||
* CPU types have been determined. Note that the user specified CPU
|
||||
* type is provided through '-cpu' option.
|
||||
*/
|
||||
if (mc->valid_cpu_types) {
|
||||
for (i = 0; mc->valid_cpu_types[i]; i++) {
|
||||
if (object_class_dynamic_cast(oc, mc->valid_cpu_types[i])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The user specified CPU type isn't valid */
|
||||
if (!mc->valid_cpu_types[i]) {
|
||||
error_setg(errp, "Invalid CPU type: %s", machine->cpu_type);
|
||||
error_append_hint(errp, "The valid types are: %s",
|
||||
mc->valid_cpu_types[0]);
|
||||
for (i = 1; mc->valid_cpu_types[i]; i++) {
|
||||
error_append_hint(errp, ", %s", mc->valid_cpu_types[i]);
|
||||
}
|
||||
|
||||
error_append_hint(errp, "\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if CPU type is deprecated and warn if so */
|
||||
cc = CPU_CLASS(oc);
|
||||
if (cc && cc->deprecation_note) {
|
||||
warn_report("CPU model %s is deprecated -- %s",
|
||||
machine->cpu_type, cc->deprecation_note);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void machine_run_board_init(MachineState *machine, const char *mem_path, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
MachineClass *machine_class = MACHINE_GET_CLASS(machine);
|
||||
ObjectClass *oc = object_class_by_name(machine->cpu_type);
|
||||
CPUClass *cc;
|
||||
|
||||
/* This checkpoint is required by replay to separate prior clock
|
||||
reading from the other reads, because timer polling functions query
|
||||
|
@ -1459,42 +1500,9 @@ void machine_run_board_init(MachineState *machine, const char *mem_path, Error *
|
|||
machine->ram = machine_consume_memdev(machine, machine->memdev);
|
||||
}
|
||||
|
||||
/* 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) {
|
||||
int i;
|
||||
|
||||
for (i = 0; machine_class->valid_cpu_types[i]; i++) {
|
||||
if (object_class_dynamic_cast(oc,
|
||||
machine_class->valid_cpu_types[i])) {
|
||||
/* The user specified 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_setg(errp, "Invalid CPU type: %s", machine->cpu_type);
|
||||
error_append_hint(errp, "The valid types are: %s",
|
||||
machine_class->valid_cpu_types[0]);
|
||||
for (i = 1; machine_class->valid_cpu_types[i]; i++) {
|
||||
error_append_hint(errp, ", %s",
|
||||
machine_class->valid_cpu_types[i]);
|
||||
}
|
||||
|
||||
error_append_hint(errp, "\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if CPU type is deprecated and warn if so */
|
||||
cc = CPU_CLASS(oc);
|
||||
if (cc && cc->deprecation_note) {
|
||||
warn_report("CPU model %s is deprecated -- %s", machine->cpu_type,
|
||||
cc->deprecation_note);
|
||||
/* Check if the CPU type is supported */
|
||||
if (machine->cpu_type && !is_cpu_type_supported(machine, errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (machine->cgs) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue