Markus Armbruster <arm...@redhat.com> writes: > Marcel Apfelbaum <mar...@redhat.com> writes: > >> On 02/15/2016 12:20 PM, Markus Armbruster wrote: >>> Eduardo Habkost <ehabk...@redhat.com> writes: >>> >>>> From: Marcel Apfelbaum <mar...@redhat.com> >>>> >>>> Commit e1ce0c3cb (vl.c: fix regression when reading machine type >>>> from config file) fixed the error message when the machine type >>>> was supplied inside the config file. However now the option name >>>> is not displayed correctly if the error happens when the machine >>>> is specified at command line. >>>> >>>> Running >>>> ./x86_64-softmmu/qemu-system-x86_64 -M q35-1.5 -redir tcp:8022::22 >>>> will result in the error message: >>>> qemu-system-x86_64: -redir tcp:8022::22: unsupported machine type >>>> Use -machine help to list supported machines >>>> >>>> Fixed it by restoring the error location and also extracted the code >>>> dealing with machine options into a separate function. >>>> >>>> Reported-by: Michael S. Tsirkin <m...@redhat.com> >>>> Reviewed-by: Laszlo Ersek <ler...@redhat.com> >>>> Signed-off-by: Marcel Apfelbaum <mar...@redhat.com> >>>> Reviewed-by: Eduardo Habkost <ehabk...@redhat.com> >>>> Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> >>>> --- >>>> vl.c | 37 ++++++++++++++++++++++++++----------- >>>> 1 file changed, 26 insertions(+), 11 deletions(-) >>>> >>>> diff --git a/vl.c b/vl.c >>>> index 175ebcc..afbf13f 100644 >>>> --- a/vl.c >>>> +++ b/vl.c >>>> @@ -2748,6 +2748,31 @@ static const QEMUOption *lookup_opt(int argc, char >>>> **argv, >>>> return popt; >>>> } >>>> >>>> +static void set_machine_options(MachineClass **machine_class) >>>> +{ >>>> + const char *optarg; >>>> + QemuOpts *opts; >>>> + Location loc; >>>> + >>>> + loc_push_none(&loc); >>>> + >>>> + opts = qemu_get_machine_opts(); >>>> + qemu_opts_loc_restore(opts); >>>> + >>>> + optarg = qemu_opt_get(opts, "type"); >>>> + if (optarg) { >>>> + *machine_class = machine_parse(optarg); >>>> + } >>>> + >>>> + if (*machine_class == NULL) { >>>> + error_report("No machine specified, and there is no default"); >>>> + error_printf("Use -machine help to list supported machines\n"); >>>> + exit(1); >>>> + } >>>> + >>>> + loc_pop(&loc); >>>> +} >>>> + >>>> static int machine_set_property(void *opaque, >>>> const char *name, const char *value, >>>> Error **errp) >>>> @@ -4030,17 +4055,7 @@ int main(int argc, char **argv, char **envp) >>>> >>>> replay_configure(icount_opts); >>>> >>>> - opts = qemu_get_machine_opts(); >>>> - optarg = qemu_opt_get(opts, "type"); >>>> - if (optarg) { >>>> - machine_class = machine_parse(optarg); >>>> - } >>>> - >>>> - if (machine_class == NULL) { >>>> - error_report("No machine specified, and there is no default"); >>>> - error_printf("Use -machine help to list supported machines\n"); >>>> - exit(1); >>>> - } >>>> + set_machine_options(&machine_class); >>> >>> Style nit: I'd prefer >>> >>> machine_class = parse_machine_options();
Uh, set_machine_options() also reads machine_class, so this won't do. Better: machine_class = pick_machine(find_default_machine()); but that's a bit more than what I'm willing to do on commit. I'll post a follow-up patch. [...]