Message ID | 20201027182144.3315885-4-pbonzini@redhat.com |
---|---|
State | Accepted |
Commit | 3df8c4f31a60101c61d7f49ce0a3635690bed579 |
Headers | show |
Series | cleanup qemu_init and make sense of command line processing | expand |
On Tue, 27 Oct 2020 14:21:18 -0400 Paolo Bonzini <pbonzini@redhat.com> wrote: > Once smp_parse is done, the validation operates on the MachineState. > There is no reason for that code to be in vl.c. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Tested-by: Igor Mammedov <imammedo@redhat.com> > --- > hw/core/machine.c | 23 +++++++++++++++++++++++ > include/hw/boards.h | 1 + > softmmu/vl.c | 20 ++------------------ > 3 files changed, 26 insertions(+), 18 deletions(-) > > diff --git a/hw/core/machine.c b/hw/core/machine.c > index c5e0e79e6d..baea4e8613 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -1072,6 +1072,29 @@ MemoryRegion *machine_consume_memdev(MachineState *machine, > return ret; > } > > +bool machine_smp_parse(MachineState *ms, QemuOpts *opts, Error **errp) > +{ > + MachineClass *mc = MACHINE_GET_CLASS(ms); > + > + mc->smp_parse(ms, opts); > + > + /* sanity-check smp_cpus and max_cpus against mc */ > + if (ms->smp.cpus < mc->min_cpus) { > + error_setg(errp, "Invalid SMP CPUs %d. The min CPUs " > + "supported by machine '%s' is %d", > + ms->smp.cpus, > + mc->name, mc->min_cpus); > + return false; > + } else if (ms->smp.max_cpus > mc->max_cpus) { > + error_setg(errp, "Invalid SMP CPUs %d. The max CPUs " > + "supported by machine '%s' is %d", > + current_machine->smp.max_cpus, > + mc->name, mc->max_cpus); > + return false; > + } > + return true; > +} > + > void machine_run_board_init(MachineState *machine) > { > MachineClass *machine_class = MACHINE_GET_CLASS(machine); > diff --git a/include/hw/boards.h b/include/hw/boards.h > index a49e3a6b44..4537cfb5c6 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -26,6 +26,7 @@ OBJECT_DECLARE_TYPE(MachineState, MachineClass, MACHINE) > extern MachineState *current_machine; > > void machine_run_board_init(MachineState *machine); > +bool machine_smp_parse(MachineState *ms, QemuOpts *opts, Error **errp); > bool machine_usb(MachineState *machine); > int machine_phandle_start(MachineState *machine); > bool machine_dump_guest_core(MachineState *machine); > diff --git a/softmmu/vl.c b/softmmu/vl.c > index b0ccfd750a..7f39ebdfee 100644 > --- a/softmmu/vl.c > +++ b/softmmu/vl.c > @@ -3971,24 +3971,8 @@ void qemu_init(int argc, char **argv, char **envp) > exit(0); > } > > - machine_class->smp_parse(current_machine, > - qemu_opts_find(qemu_find_opts("smp-opts"), NULL)); > - > - /* sanity-check smp_cpus and max_cpus against machine_class */ > - if (current_machine->smp.cpus < machine_class->min_cpus) { > - error_report("Invalid SMP CPUs %d. The min CPUs " > - "supported by machine '%s' is %d", > - current_machine->smp.cpus, > - machine_class->name, machine_class->min_cpus); > - exit(1); > - } > - if (current_machine->smp.max_cpus > machine_class->max_cpus) { > - error_report("Invalid SMP CPUs %d. The max CPUs " > - "supported by machine '%s' is %d", > - current_machine->smp.max_cpus, > - machine_class->name, machine_class->max_cpus); > - exit(1); > - } > + machine_smp_parse(current_machine, > + qemu_opts_find(qemu_find_opts("smp-opts"), NULL), &error_fatal); > > if (mem_prealloc) { > char *val;
diff --git a/hw/core/machine.c b/hw/core/machine.c index c5e0e79e6d..baea4e8613 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -1072,6 +1072,29 @@ MemoryRegion *machine_consume_memdev(MachineState *machine, return ret; } +bool machine_smp_parse(MachineState *ms, QemuOpts *opts, Error **errp) +{ + MachineClass *mc = MACHINE_GET_CLASS(ms); + + mc->smp_parse(ms, opts); + + /* sanity-check smp_cpus and max_cpus against mc */ + if (ms->smp.cpus < mc->min_cpus) { + error_setg(errp, "Invalid SMP CPUs %d. The min CPUs " + "supported by machine '%s' is %d", + ms->smp.cpus, + mc->name, mc->min_cpus); + return false; + } else if (ms->smp.max_cpus > mc->max_cpus) { + error_setg(errp, "Invalid SMP CPUs %d. The max CPUs " + "supported by machine '%s' is %d", + current_machine->smp.max_cpus, + mc->name, mc->max_cpus); + return false; + } + return true; +} + void machine_run_board_init(MachineState *machine) { MachineClass *machine_class = MACHINE_GET_CLASS(machine); diff --git a/include/hw/boards.h b/include/hw/boards.h index a49e3a6b44..4537cfb5c6 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -26,6 +26,7 @@ OBJECT_DECLARE_TYPE(MachineState, MachineClass, MACHINE) extern MachineState *current_machine; void machine_run_board_init(MachineState *machine); +bool machine_smp_parse(MachineState *ms, QemuOpts *opts, Error **errp); bool machine_usb(MachineState *machine); int machine_phandle_start(MachineState *machine); bool machine_dump_guest_core(MachineState *machine); diff --git a/softmmu/vl.c b/softmmu/vl.c index b0ccfd750a..7f39ebdfee 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -3971,24 +3971,8 @@ void qemu_init(int argc, char **argv, char **envp) exit(0); } - machine_class->smp_parse(current_machine, - qemu_opts_find(qemu_find_opts("smp-opts"), NULL)); - - /* sanity-check smp_cpus and max_cpus against machine_class */ - if (current_machine->smp.cpus < machine_class->min_cpus) { - error_report("Invalid SMP CPUs %d. The min CPUs " - "supported by machine '%s' is %d", - current_machine->smp.cpus, - machine_class->name, machine_class->min_cpus); - exit(1); - } - if (current_machine->smp.max_cpus > machine_class->max_cpus) { - error_report("Invalid SMP CPUs %d. The max CPUs " - "supported by machine '%s' is %d", - current_machine->smp.max_cpus, - machine_class->name, machine_class->max_cpus); - exit(1); - } + machine_smp_parse(current_machine, + qemu_opts_find(qemu_find_opts("smp-opts"), NULL), &error_fatal); if (mem_prealloc) { char *val;
Once smp_parse is done, the validation operates on the MachineState. There is no reason for that code to be in vl.c. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/core/machine.c | 23 +++++++++++++++++++++++ include/hw/boards.h | 1 + softmmu/vl.c | 20 ++------------------ 3 files changed, 26 insertions(+), 18 deletions(-)