From patchwork Mon Feb 8 10:09:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Apfelbaum X-Patchwork-Id: 580212 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 36FE4140BA7 for ; Mon, 8 Feb 2016 21:09:59 +1100 (AEDT) Received: from localhost ([::1]:43085 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSilY-0007l8-DQ for incoming@patchwork.ozlabs.org; Mon, 08 Feb 2016 05:09:56 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSilH-0007UF-JQ for qemu-devel@nongnu.org; Mon, 08 Feb 2016 05:09:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aSilC-0001zI-Hb for qemu-devel@nongnu.org; Mon, 08 Feb 2016 05:09:39 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44798) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSilC-0001zE-C9; Mon, 08 Feb 2016 05:09:34 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id ED76AE1B63; Mon, 8 Feb 2016 10:09:33 +0000 (UTC) Received: from work.redhat.com (vpn1-5-195.ams2.redhat.com [10.36.5.195]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u18A9Uao004160; Mon, 8 Feb 2016 05:09:31 -0500 From: Marcel Apfelbaum To: qemu-devel@nongnu.org Date: Mon, 8 Feb 2016 12:09:30 +0200 Message-Id: <1454926170-6915-1-git-send-email-marcel@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: ehabkost@redhat.com, mst@redhat.com, armbru@redhat.com, qemu-stable@nongnu.org, marcel@redhat.com, pbonzini@redhat.com, lersek@redhat.com Subject: [Qemu-devel] [PATCH V2] vl.c: fixed regression in machine error message X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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 saving the error location and also extracted the code dealing with machine options into a separate function. v1 -> v2: - Addressed Laszlo Ersek's comments: - no need to save the machine options location, is saved in opts - rename the extracted method to set_machine_options - added the bug reporter to the CC - tested with and without the config file and the error message is no OK: config file: - qemu-system-x86_64:machine-bug.conf:3: unsupported machine type cli: - qemu-system-x86_64: -M q35-1.5: unsupported machine type Reported-by: Michael S. Tsirkin Signed-off-by: Marcel Apfelbaum Reviewed-by: Laszlo Ersek --- vl.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/vl.c b/vl.c index f043009..dd29807 100644 --- a/vl.c +++ b/vl.c @@ -2751,6 +2751,32 @@ 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(); + loc_push_none(&loc); + qemu_opts_loc_restore(opts); + + optarg = qemu_opt_get(qemu_get_machine_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) @@ -4019,17 +4045,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); set_memory_options(&ram_slots, &maxram_size, machine_class);