Patchwork [10/22] machine: allow boards to specify default values and use it in isapc

login
register
mail settings
Submitter Anthony Liguori
Date June 7, 2010, 11:51 p.m.
Message ID <1275954730-8196-11-git-send-email-aliguori@us.ibm.com>
Download mbox | patch
Permalink /patch/54907/
State New
Headers show

Comments

Anthony Liguori - June 7, 2010, 11:51 p.m.
Let boards describe default options.  Structuring this way is an important step
in making board definitions readable by a config file.

To use the new mechanism, introduce a pci=on|off option to the pc boards and
unify all of them into a single function.  isapc is now just another pc board
that happens to have different default values.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Gerd Hoffmann - June 8, 2010, 8:03 a.m.
>   static QEMUMachine pc_machine = {
>       .name = "pc-0.13",
>       .alias = "pc",
>       .desc = "Standard PC",
> -    .init = pc_init_pci,
> +    .init = pc_init,
>       .max_cpus = 255,
>       .is_default = 1,
>       .opts_desc = pc_opts_desc,
> +    .opts_default = (QemuOptValue[]) {
> +        {
> +            .name  = "acpi",
> +            .value = "on",
> +        },

Should be moved into a separate struct and just referenced as it is 
identical for pc-0.*

cheers,
   Gerd
Anthony Liguori - June 8, 2010, 1:09 p.m.
On 06/08/2010 03:03 AM, Gerd Hoffmann wrote:
>>   static QEMUMachine pc_machine = {
>>       .name = "pc-0.13",
>>       .alias = "pc",
>>       .desc = "Standard PC",
>> -    .init = pc_init_pci,
>> +    .init = pc_init,
>>       .max_cpus = 255,
>>       .is_default = 1,
>>       .opts_desc = pc_opts_desc,
>> +    .opts_default = (QemuOptValue[]) {
>> +        {
>> +            .name  = "acpi",
>> +            .value = "on",
>> +        },
>
> Should be moved into a separate struct and just referenced as it is 
> identical for pc-0.*

Would need to be macros because in future patches, things get more 
complicated.  That may be worth it though.

Regards,

Anthony Liguori

> cheers,
>   Gerd
>
>
Gerd Hoffmann - June 8, 2010, 1:29 p.m.
On 06/08/10 15:09, Anthony Liguori wrote:
> On 06/08/2010 03:03 AM, Gerd Hoffmann wrote:
>>> + .opts_default = (QemuOptValue[]) {
>>> + {
>>> + .name = "acpi",
>>> + .value = "on",
>>> + },
>>
>> Should be moved into a separate struct and just referenced as it is
>> identical for pc-0.*
>
> Would need to be macros because in future patches, things get more
> complicated. That may be worth it though.

Well, maybe not.  Later patches add the compat properties to that list, 
which are different for the pc-0.* versions, so you would have to split 
again ...

cheers
   Gerd

Patch

diff --git a/hw/boards.h b/hw/boards.h
index 0092557..06b9f73 100644
--- a/hw/boards.h
+++ b/hw/boards.h
@@ -26,6 +26,7 @@  struct QEMUMachine {
     int is_default;
     GlobalProperty *compat_props;
     QemuOptDesc *opts_desc;
+    QemuOptValue *opts_default;
     struct QEMUMachine *next;
 };
 
diff --git a/hw/pc.c b/hw/pc.c
index 48b3730..44f5b62 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -794,15 +794,6 @@  void pc_cpus_init(const char *cpu_model)
 {
     int i;
 
-    /* init CPUs */
-    if (cpu_model == NULL) {
-#ifdef TARGET_X86_64
-        cpu_model = "qemu64";
-#else
-        cpu_model = "qemu32";
-#endif
-    }
-
     for(i = 0; i < smp_cpus; i++) {
         pc_new_cpu(cpu_model);
     }
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 1830aca..0ad1145 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -40,7 +40,7 @@  static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
 static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
 
 /* PC hardware initialisation */
-static void pc_init1(QemuOpts *opts, int pci_enabled)
+static void pc_init(QemuOpts *opts)
 {
     ram_addr_t ram_size = qemu_opt_get_size(opts, "ram_size", 0);
     const char *boot_device = qemu_opt_get(opts, "boot_device");
@@ -48,6 +48,7 @@  static void pc_init1(QemuOpts *opts, int pci_enabled)
     const char *kernel_cmdline = qemu_opt_get(opts, "cmdline");
     const char *initrd_filename = qemu_opt_get(opts, "initrd");
     const char *cpu_model = qemu_opt_get(opts, "cpu");
+    int pci_enabled = qemu_opt_get_bool(opts, "pci", 1);
     int i;
     ram_addr_t below_4g_mem_size, above_4g_mem_size;
     PCIBus *pci_bus;
@@ -161,45 +162,71 @@  static void pc_init1(QemuOpts *opts, int pci_enabled)
     }
 }
 
-static void pc_init_pci(QemuOpts *opts)
-{
-    pc_init1(opts, 1);
-}
-
-static void pc_init_isa(QemuOpts *opts)
-{
-    if (!qemu_opt_get(opts, "cpu")) {
-        qemu_opt_set(opts, "cpu", "486");
-    }
-
-    pc_init1(opts, 0);
-}
-
 static QemuOptDesc pc_opts_desc[] = {
     COMMON_MACHINE_OPTS(),
     {
         .name = "acpi",
         .type = QEMU_OPT_BOOL,
     },
+    {
+        .name = "pci",
+        .type = QEMU_OPT_BOOL,
+    },
     { /* end of list */ },
 };
 
+#ifdef TARGET_X86_64
+#define PC_DEFAULT_CPU_MODEL "qemu64"
+#else
+#define PC_DEFAULT_CPU_MODEL "qemu32"
+#endif
+
 static QEMUMachine pc_machine = {
     .name = "pc-0.13",
     .alias = "pc",
     .desc = "Standard PC",
-    .init = pc_init_pci,
+    .init = pc_init,
     .max_cpus = 255,
     .is_default = 1,
     .opts_desc = pc_opts_desc,
+    .opts_default = (QemuOptValue[]) {
+        {
+            .name  = "acpi",
+            .value = "on",
+        },
+        {
+            .name  = "pci",
+            .value = "on",
+        },
+        {
+            .name = "cpu",
+            .value = PC_DEFAULT_CPU_MODEL,
+        },
+        { /* end of list */ }
+    },
 };
 
 static QEMUMachine pc_machine_v0_12 = {
     .name = "pc-0.12",
     .desc = "Standard PC",
-    .init = pc_init_pci,
+    .init = pc_init,
     .max_cpus = 255,
     .opts_desc = pc_opts_desc,
+    .opts_default = (QemuOptValue[]) {
+        {
+            .name  = "acpi",
+            .value = "on",
+        },
+        {
+            .name  = "pci",
+            .value = "on",
+        },
+        {
+            .name = "cpu",
+            .value = PC_DEFAULT_CPU_MODEL,
+        },
+        { /* end of list */ }
+    },
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-serial-pci",
@@ -217,9 +244,24 @@  static QEMUMachine pc_machine_v0_12 = {
 static QEMUMachine pc_machine_v0_11 = {
     .name = "pc-0.11",
     .desc = "Standard PC, qemu 0.11",
-    .init = pc_init_pci,
+    .init = pc_init,
     .max_cpus = 255,
     .opts_desc = pc_opts_desc,
+    .opts_default = (QemuOptValue[]) {
+        {
+            .name  = "acpi",
+            .value = "on",
+        },
+        {
+            .name  = "pci",
+            .value = "on",
+        },
+        {
+            .name = "cpu",
+            .value = PC_DEFAULT_CPU_MODEL,
+        },
+        { /* end of list */ }
+    },
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-blk-pci",
@@ -253,9 +295,24 @@  static QEMUMachine pc_machine_v0_11 = {
 static QEMUMachine pc_machine_v0_10 = {
     .name = "pc-0.10",
     .desc = "Standard PC, qemu 0.10",
-    .init = pc_init_pci,
+    .init = pc_init,
     .max_cpus = 255,
     .opts_desc = pc_opts_desc,
+    .opts_default = (QemuOptValue[]) {
+        {
+            .name  = "acpi",
+            .value = "on",
+        },
+        {
+            .name  = "pci",
+            .value = "on",
+        },
+        {
+            .name = "cpu",
+            .value = PC_DEFAULT_CPU_MODEL,
+        },
+        { /* end of list */ }
+    },
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-blk-pci",
@@ -301,7 +358,23 @@  static QEMUMachine pc_machine_v0_10 = {
 static QEMUMachine isapc_machine = {
     .name = "isapc",
     .desc = "ISA-only PC",
-    .init = pc_init_isa,
+    .opts_desc = pc_opts_desc,
+    .init = pc_init,
+    .opts_default = (QemuOptValue[]) {
+        {
+            .name  = "acpi",
+            .value = "off",
+        },
+        {
+            .name  = "pci",
+            .value = "off",
+        },
+        {
+            .name = "cpu",
+            .value = "486",
+        },
+        { /* end of list */ }
+    },
     .max_cpus = 1,
 };
 
diff --git a/vl.c b/vl.c
index 398d3b4..a7f0a3d 100644
--- a/vl.c
+++ b/vl.c
@@ -3438,6 +3438,10 @@  int main(int argc, char **argv, char **envp)
         machine = find_machine(qemu_opt_get(machine_opts, "driver"));
     }
 
+    if (machine->opts_default) {
+        qemu_opts_set_defaults(machine_opts, machine->opts_default);
+    }
+
     if (machine->opts_desc) {
         if (qemu_opts_validate(machine_opts, machine->opts_desc) < 0) {
             exit(1);