On Tue, 27 Oct 2020 14:21:18 -0400 Paolo Bonzini <pbonz...@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 <pbonz...@redhat.com> Reviewed-by: Igor Mammedov <imamm...@redhat.com> Tested-by: Igor Mammedov <imamm...@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;