From patchwork Mon Feb 8 11:19:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Apfelbaum X-Patchwork-Id: 580236 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 13335140BA7 for ; Mon, 8 Feb 2016 22:20:19 +1100 (AEDT) Received: from localhost ([::1]:43599 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSjrd-00065J-3h for incoming@patchwork.ozlabs.org; Mon, 08 Feb 2016 06:20:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37725) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSjr5-0005H0-SX for qemu-devel@nongnu.org; Mon, 08 Feb 2016 06:19:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aSjr2-0002JN-HE for qemu-devel@nongnu.org; Mon, 08 Feb 2016 06:19:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:55238) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSjr2-0002JJ-BZ; Mon, 08 Feb 2016 06:19:40 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id CD035C0C2344; Mon, 8 Feb 2016 11:19:39 +0000 (UTC) Received: from work.redhat.com (vpn1-5-195.ams2.redhat.com [10.36.5.195]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u18BJaQC027200; Mon, 8 Feb 2016 06:19:37 -0500 From: Marcel Apfelbaum To: qemu-devel@nongnu.org Date: Mon, 8 Feb 2016 13:19:36 +0200 Message-Id: <1454930376-16548-1-git-send-email-marcel@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 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 V3] 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 restoring the error location and also extracted the code dealing with machine options into a separate function. Reported-by: Michael S. Tsirkin Reviewed-by: Laszlo Ersek Signed-off-by: Marcel Apfelbaum --- v2 -> v3: - fixed commit message and called qemu_get_machine_opts only once. (thanks Laszlo) 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 now 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 Thanks, Marcel vl.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/vl.c b/vl.c index c581e39..5873248 100644 --- a/vl.c +++ b/vl.c @@ -2748,6 +2748,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(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) @@ -4028,17 +4054,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);