Patchwork [FOR,0.12,v4,22/22] Set default console to virtio on S390x

login
register
mail settings
Submitter Gerd Hoffmann
Date Dec. 8, 2009, 12:11 p.m.
Message ID <1260274314-2906-23-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/40629/
State New
Headers show

Comments

Gerd Hoffmann - Dec. 8, 2009, 12:11 p.m.
All "normal" system emulation targets in qemu I'm aware of display
output on either VGA or serial output.

Our S390x virtio machine doesn't have such kind of legacy hardware. So
instead we need to default to a virtio console.

Add flags to QEMUMachine to indicate which kind of default devices make
sense for the machine in question.  Use it for S390x: enable virtcon,
disable serial, parallel and vga.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/boards.h      |    4 ++++
 hw/s390-virtio.c |    4 ++++
 vl.c             |   19 ++++++++++++++++++-
 3 files changed, 26 insertions(+), 1 deletions(-)
Markus Armbruster - Dec. 10, 2009, 8:36 a.m.
Gerd Hoffmann <kraxel@redhat.com> writes:

> All "normal" system emulation targets in qemu I'm aware of display
> output on either VGA or serial output.
>
> Our S390x virtio machine doesn't have such kind of legacy hardware. So
> instead we need to default to a virtio console.
>
> Add flags to QEMUMachine to indicate which kind of default devices make
> sense for the machine in question.  Use it for S390x: enable virtcon,
> disable serial, parallel and vga.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/boards.h      |    4 ++++
>  hw/s390-virtio.c |    4 ++++
>  vl.c             |   19 ++++++++++++++++++-
>  3 files changed, 26 insertions(+), 1 deletions(-)
>
> diff --git a/hw/boards.h b/hw/boards.h
> index 7a0f20f..8fe0fbc 100644
> --- a/hw/boards.h
> +++ b/hw/boards.h
> @@ -19,6 +19,10 @@ typedef struct QEMUMachine {
>      QEMUMachineInitFunc *init;
>      int use_scsi;
>      int max_cpus;
> +    int no_serial:1,
> +        no_parallel:1,
> +        use_virtcon:1,
> +        no_vga:1;
>      int is_default;
>      GlobalProperty *compat_props;
>      struct QEMUMachine *next;

Funny indentation.

> diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c
> index cc21ee6..51c032a 100644
> --- a/hw/s390-virtio.c
> +++ b/hw/s390-virtio.c
> @@ -243,6 +243,10 @@ static QEMUMachine s390_machine = {
>      .alias = "s390",
>      .desc = "VirtIO based S390 machine",
>      .init = s390_init,
> +    .no_serial = 1,
> +    .no_parallel = 1,
> +    .use_virtcon = 1.
> +    .no_vga = 1,
>      .max_cpus = 255,
>      .is_default = 1,
>  };
> diff --git a/vl.c b/vl.c
> index b4138be..d028931 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -270,7 +270,7 @@ static void *boot_set_opaque;
>  
>  static int default_serial = 1;
>  static int default_parallel = 1;
> -static int default_virtcon = 0;
> +static int default_virtcon = 1;
>  static int default_monitor = 1;
>  static int default_vga = 1;
>  static int default_drive = 1;
> @@ -5629,14 +5629,31 @@ int main(int argc, char **argv, char **envp)
>  
>      qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
>  
> +    if (machine->no_serial) {
> +        default_serial = 0;
> +    }
> +    if (machine->no_parallel) {
> +        default_parallel = 0;
> +    }
> +    if (!machine->use_virtcon) {
> +        default_virtcon = 0;
> +    }
> +    if (machine->no_vga) {
> +        default_vga = 0;
> +    }
> +
>      if (display_type == DT_NOGRAPHIC) {
>          if (default_parallel)
>              add_device_config(DEV_PARALLEL, "null");
>          if (default_serial && default_monitor) {
>              add_device_config(DEV_SERIAL, "mon:stdio");
> +        } else if (default_virtcon && default_monitor) {
> +            add_device_config(DEV_VIRTCON, "mon:stdio");
>          } else {
>              if (default_serial)
>                  add_device_config(DEV_SERIAL, "stdio");
> +            if (default_virtcon)
> +                add_device_config(DEV_VIRTCON, "stdio");
>              if (default_monitor)
>                  monitor_parse("stdio", "readline");
>          }

The other default devices could use per-machine suppression, too, but
that can be left for another day.
Gerd Hoffmann - Dec. 10, 2009, 9:34 a.m.
>
> The other default devices could use per-machine suppression, too, but
> that can be left for another day.
>

Indeed.  default_drive should probably be splitted so 
sd-card/floppy/cdrom can be set separately, then we can start disabling 
them for machine types which don't use them.  Probably most boards have 
either sdcard (embedded) or cdrom (normal computers), but rarely both ...

I didn't want to grow the patch series even more though and I don't 
think this is a must-have for 0.12 ...

cheers,
   Gerd
Markus Armbruster - Dec. 10, 2009, 9:44 a.m.
Gerd Hoffmann <kraxel@redhat.com> writes:

>>
>> The other default devices could use per-machine suppression, too, but
>> that can be left for another day.
>>
>
> Indeed.  default_drive should probably be splitted so
> sd-card/floppy/cdrom can be set separately, then we can start
> disabling them for machine types which don't use them.  Probably most
> boards have either sdcard (embedded) or cdrom (normal computers), but
> rarely both ...
>
> I didn't want to grow the patch series even more though and I don't
> think this is a must-have for 0.12 ...

Agreed.

Patch

diff --git a/hw/boards.h b/hw/boards.h
index 7a0f20f..8fe0fbc 100644
--- a/hw/boards.h
+++ b/hw/boards.h
@@ -19,6 +19,10 @@  typedef struct QEMUMachine {
     QEMUMachineInitFunc *init;
     int use_scsi;
     int max_cpus;
+    int no_serial:1,
+        no_parallel:1,
+        use_virtcon:1,
+        no_vga:1;
     int is_default;
     GlobalProperty *compat_props;
     struct QEMUMachine *next;
diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c
index cc21ee6..51c032a 100644
--- a/hw/s390-virtio.c
+++ b/hw/s390-virtio.c
@@ -243,6 +243,10 @@  static QEMUMachine s390_machine = {
     .alias = "s390",
     .desc = "VirtIO based S390 machine",
     .init = s390_init,
+    .no_serial = 1,
+    .no_parallel = 1,
+    .use_virtcon = 1.
+    .no_vga = 1,
     .max_cpus = 255,
     .is_default = 1,
 };
diff --git a/vl.c b/vl.c
index b4138be..d028931 100644
--- a/vl.c
+++ b/vl.c
@@ -270,7 +270,7 @@  static void *boot_set_opaque;
 
 static int default_serial = 1;
 static int default_parallel = 1;
-static int default_virtcon = 0;
+static int default_virtcon = 1;
 static int default_monitor = 1;
 static int default_vga = 1;
 static int default_drive = 1;
@@ -5629,14 +5629,31 @@  int main(int argc, char **argv, char **envp)
 
     qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
 
+    if (machine->no_serial) {
+        default_serial = 0;
+    }
+    if (machine->no_parallel) {
+        default_parallel = 0;
+    }
+    if (!machine->use_virtcon) {
+        default_virtcon = 0;
+    }
+    if (machine->no_vga) {
+        default_vga = 0;
+    }
+
     if (display_type == DT_NOGRAPHIC) {
         if (default_parallel)
             add_device_config(DEV_PARALLEL, "null");
         if (default_serial && default_monitor) {
             add_device_config(DEV_SERIAL, "mon:stdio");
+        } else if (default_virtcon && default_monitor) {
+            add_device_config(DEV_VIRTCON, "mon:stdio");
         } else {
             if (default_serial)
                 add_device_config(DEV_SERIAL, "stdio");
+            if (default_virtcon)
+                add_device_config(DEV_VIRTCON, "stdio");
             if (default_monitor)
                 monitor_parse("stdio", "readline");
         }