qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RESEND][PATCH v3] Generalize -machine command line opt


From: Anthony Liguori
Subject: Re: [Qemu-devel] [RESEND][PATCH v3] Generalize -machine command line option
Date: Sat, 23 Jul 2011 10:43:24 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10

On 07/23/2011 05:38 AM, Jan Kiszka wrote:
From: Jan Kiszka<address@hidden>

-machine somehow suggests that it selects the machine, but it doesn't.
Fix that before this command is set in stone.

Actually, -machine should supersede -M and allow to introduce arbitrary
per-machine options to the command line. That will change the internal
realization again, but we will be able to keep the user interface
stable.

Tested-by: Ian Campbell<address@hidden>
Signed-off-by: Jan Kiszka<address@hidden>

Applied.  Thanks.

Regards,

Anthony Liguori

---

NOTE: This patch is a MUST HAVE for 0.15 as we otherwise set a half
done command line interface into stone!

Changes in v3:
  - fix regression of default machine options handling, -machine xenfv
    selects accel=xen again
    (I really hope we can clean up the defaults, make them more
    generally useful when switching to some QCFG.)

Changes in v2:
  - fix regression of -M my factoring out machine_parse and using it for
    both old and new command.

  qemu-config.c   |    5 +++++
  qemu-options.hx |   20 +++++++++++++++-----
  vl.c            |   43 ++++++++++++++++++++++++++-----------------
  3 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/qemu-config.c b/qemu-config.c
index 93d20c6..b2ec40b 100644
--- a/qemu-config.c
+++ b/qemu-config.c
@@ -464,9 +464,14 @@ QemuOptsList qemu_option_rom_opts = {

  static QemuOptsList qemu_machine_opts = {
      .name = "machine",
+    .implied_opt_name = "type",
      .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
      .desc = {
          {
+            .name = "type",
+            .type = QEMU_OPT_STRING,
+            .help = "emulated machine"
+        }, {
              .name = "accel",
              .type = QEMU_OPT_STRING,
              .help = "accelerator list",
diff --git a/qemu-options.hx b/qemu-options.hx
index 64114dd..195943b 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -2075,13 +2075,23 @@ if KVM support is enabled when compiling.
  ETEXI

  DEF("machine", HAS_ARG, QEMU_OPTION_machine, \
-    "-machine accel=accel1[:accel2]    use an accelerator (kvm,xen,tcg), default is 
tcg\n", QEMU_ARCH_ALL)
+    "-machine [type=]name[,prop[=value][,...]]\n"
+    "                selects emulated machine (-machine ? for list)\n"
+    "                property accel=accel1[:accel2[:...]] selects 
accelerator\n"
+    "                supported accelerators are kvm, xen, tcg (default: 
tcg)\n",
+    QEMU_ARCH_ALL)
  STEXI
address@hidden -machine address@hidden
address@hidden -machine address@hidden,address@hidden,...]]
  @findex -machine
-This is use to enable an accelerator, in kvm,xen,tcg.
-By default, it use only tcg. If there a more than one accelerator
-specified, the next one is used if the first don't work.
+Select the emulated machine by @var{name}. Use @code{-machine ?} to list
+available machines. Supported machine properties are:
address@hidden @option
address@hidden address@hidden:@var{accels2}[:...]]
+This is used to enable an accelerator. Depending on the target architecture,
+kvm, xen, or tcg can be available. By default, tcg is used. If there is more
+than one accelerator specified, the next one is used if the previous one fails
+to initialize.
address@hidden table
  ETEXI

  DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid,
diff --git a/vl.c b/vl.c
index fcd7395..acfff85 100644
--- a/vl.c
+++ b/vl.c
@@ -1899,6 +1899,27 @@ static int debugcon_parse(const char *devname)
      return 0;
  }

+static QEMUMachine *machine_parse(const char *name)
+{
+    QEMUMachine *m, *machine = NULL;
+
+    if (name) {
+        machine = find_machine(name);
+    }
+    if (machine) {
+        return machine;
+    }
+    printf("Supported machines are:\n");
+    for (m = first_machine; m != NULL; m = m->next) {
+        if (m->alias) {
+            printf("%-10s %s (alias of %s)\n", m->alias, m->desc, m->name);
+        }
+        printf("%-10s %s%s\n", m->name, m->desc,
+               m->is_default ? " (default)" : "");
+    }
+    exit(!name || *name != '?');
+}
+
  static int tcg_init(void)
  {
      return 0;
@@ -2155,20 +2176,7 @@ int main(int argc, char **argv, char **envp)
              }
              switch(popt->index) {
              case QEMU_OPTION_M:
-                machine = find_machine(optarg);
-                if (!machine) {
-                    QEMUMachine *m;
-                    printf("Supported machines are:\n");
-                    for(m = first_machine; m != NULL; m = m->next) {
-                        if (m->alias)
-                            printf("%-10s %s (alias of %s)\n",
-                                   m->alias, m->desc, m->name);
-                        printf("%-10s %s%s\n",
-                               m->name, m->desc,
-                               m->is_default ? " (default)" : "");
-                    }
-                    exit(*optarg != '?');
-                }
+                machine = machine_parse(optarg);
                  break;
              case QEMU_OPTION_cpu:
                  /* hw initialization will check this */
@@ -2698,11 +2706,12 @@ int main(int argc, char **argv, char **envp)
              case QEMU_OPTION_machine:
                  olist = qemu_find_opts("machine");
                  qemu_opts_reset(olist);
-                opts = qemu_opts_parse(olist, optarg, 0);
+                opts = qemu_opts_parse(olist, optarg, 1);
                  if (!opts) {
                      fprintf(stderr, "parse error: %s\n", optarg);
                      exit(1);
                  }
+                machine = machine_parse(qemu_opt_get(opts, "type"));
                  break;
              case QEMU_OPTION_usb:
                  usb_enabled = 1;
@@ -2976,8 +2985,8 @@ int main(int argc, char **argv, char **envp)
              p = qemu_opt_get(QTAILQ_FIRST(&list->head), "accel");
          }
          if (p == NULL) {
-            opts = qemu_opts_parse(qemu_find_opts("machine"),
-                                   machine->default_machine_opts, 0);
+            qemu_opts_reset(list);
+            opts = qemu_opts_parse(list, machine->default_machine_opts, 0);
              if (!opts) {
                  fprintf(stderr, "parse error for machine %s: %s\n",
                          machine->name, machine->default_machine_opts);






reply via email to

[Prev in Thread] Current Thread [Next in Thread]