qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: libvir-list@redhat.com, qemu-devel@nongnu.org,
	Hollis Blanchard <hollisb@us.ibm.com>
Subject: [Qemu-devel] Re: [PATCH 1/3] Allow multiple monitor devices
Date: Wed, 08 Apr 2009 16:27:04 +0200	[thread overview]
Message-ID: <49DCB438.2070803@siemens.com> (raw)
In-Reply-To: <1239200204-4934-1-git-send-email-aliguori@us.ibm.com>

Anthony Liguori wrote:
> Right now only one monitor device can be enabled at a time.  In order to support

I guess you are talking about -monitor provided instances here. There
can already be multiple instances (multiplexed ones or the one provided
via gdb).

> asynchronous notification of events, I would like to introduce a 'wait' command
> that waits for an event to occur.  This implies that we need an additional
> monitor session to allow commands to still be executed while waiting for an
> asynchronous notification.

Need to have a closer look at the actual patch later, but the
description confuses me. 'wait' itself makes sense, though.

Jan

> 
> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
> 
> diff --git a/vl.c b/vl.c
> index 4bd173f..f78cabb 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -184,6 +184,9 @@ int main(int argc, char **argv)
>  /* Max number of bluetooth switches on the commandline.  */
>  #define MAX_BT_CMDLINE 10
>  
> +/* Maximum number of monitor devices */
> +#define MAX_MONITOR_DEVICES 10
> +
>  /* XXX: use a two level table to limit memory usage */
>  #define MAX_IOPORTS 65536
>  
> @@ -4252,8 +4255,9 @@ int main(int argc, char **argv, char **envp)
>      int hda_index;
>      int optind;
>      const char *r, *optarg;
> -    CharDriverState *monitor_hd = NULL;
> -    const char *monitor_device;
> +    CharDriverState *monitor_hds[MAX_MONITOR_DEVICES];
> +    const char *monitor_devices[MAX_MONITOR_DEVICES];
> +    int monitor_device_index;
>      const char *serial_devices[MAX_SERIAL_PORTS];
>      int serial_device_index;
>      const char *parallel_devices[MAX_PARALLEL_PORTS];
> @@ -4324,7 +4328,6 @@ int main(int argc, char **argv, char **envp)
>      kernel_cmdline = "";
>      cyls = heads = secs = 0;
>      translation = BIOS_ATA_TRANSLATION_AUTO;
> -    monitor_device = "vc:80Cx24C";
>  
>      serial_devices[0] = "vc:80Cx24C";
>      for(i = 1; i < MAX_SERIAL_PORTS; i++)
> @@ -4340,6 +4343,11 @@ int main(int argc, char **argv, char **envp)
>          virtio_consoles[i] = NULL;
>      virtio_console_index = 0;
>  
> +    monitor_devices[0] = "vc:80Cx24C";
> +    for (i = 1; i < MAX_MONITOR_DEVICES; i++)
> +        monitor_devices[i] = NULL;
> +    monitor_device_index = 0;
> +
>      usb_devices_index = 0;
>  
>      nb_net_clients = 0;
> @@ -4723,7 +4731,12 @@ int main(int argc, char **argv, char **envp)
>                      break;
>                  }
>              case QEMU_OPTION_monitor:
> -                monitor_device = optarg;
> +                if (monitor_device_index >= MAX_MONITOR_DEVICES) {
> +                    fprintf(stderr, "qemu: too many monitor devices\n");
> +                    exit(1);
> +                }
> +                monitor_devices[monitor_device_index] = optarg;
> +                monitor_device_index++;
>                  break;
>              case QEMU_OPTION_serial:
>                  if (serial_device_index >= MAX_SERIAL_PORTS) {
> @@ -4974,8 +4987,8 @@ int main(int argc, char **argv, char **envp)
>             serial_devices[0] = "stdio";
>         if (parallel_device_index == 0)
>             parallel_devices[0] = "null";
> -       if (strncmp(monitor_device, "vc", 2) == 0)
> -           monitor_device = "stdio";
> +       if (strncmp(monitor_devices[0], "vc", 2) == 0)
> +           monitor_devices[0] = "stdio";
>      }
>  
>  #ifndef _WIN32
> @@ -5184,14 +5197,14 @@ int main(int argc, char **argv, char **envp)
>  #endif
>  
>      /* Maintain compatibility with multiple stdio monitors */
> -    if (!strcmp(monitor_device,"stdio")) {
> +    if (!strcmp(monitor_devices[0],"stdio")) {
>          for (i = 0; i < MAX_SERIAL_PORTS; i++) {
>              const char *devname = serial_devices[i];
>              if (devname && !strcmp(devname,"mon:stdio")) {
> -                monitor_device = NULL;
> +                monitor_devices[0] = NULL;
>                  break;
>              } else if (devname && !strcmp(devname,"stdio")) {
> -                monitor_device = NULL;
> +                monitor_devices[0] = NULL;
>                  serial_devices[i] = "mon:stdio";
>                  break;
>              }
> @@ -5208,11 +5221,20 @@ int main(int argc, char **argv, char **envp)
>          }
>      }
>  
> -    if (monitor_device) {
> -        monitor_hd = qemu_chr_open("monitor", monitor_device, NULL);
> -        if (!monitor_hd) {
> -            fprintf(stderr, "qemu: could not open monitor device '%s'\n", monitor_device);
> -            exit(1);
> +    for (i = 0; i < MAX_MONITOR_DEVICES; i++) {
> +        const char *devname = monitor_devices[i];
> +        if (devname && strcmp(devname, "none")) {
> +            char label[32];
> +            if (i == 0)
> +                snprintf(label, sizeof(label), "monitor");
> +            else
> +                snprintf(label, sizeof(label), "monitor%d", i);
> +            monitor_hds[i] = qemu_chr_open(label, devname, NULL);
> +            if (!monitor_hds[i]) {
> +                fprintf(stderr, "qemu: could not open monitor device '%s'\n",
> +                        devname);
> +                exit(1);
> +            }
>          }
>      }
>  
> @@ -5335,8 +5357,13 @@ int main(int argc, char **argv, char **envp)
>      text_consoles_set_display(display_state);
>      qemu_chr_initial_reset();
>  
> -    if (monitor_device && monitor_hd)
> -        monitor_init(monitor_hd, MONITOR_USE_READLINE | MONITOR_IS_DEFAULT);
> +    for (i = 0; i < MAX_MONITOR_DEVICES; i++) {
> +        if (monitor_devices[i] && monitor_hds[i]) {
> +            monitor_init(monitor_hds[i],
> +                         MONITOR_USE_READLINE |
> +                         ((i == 0) ? MONITOR_IS_DEFAULT : 0));
> +        }
> +    }
>  
>      for(i = 0; i < MAX_SERIAL_PORTS; i++) {
>          const char *devname = serial_devices[i];

-- 
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux

      parent reply	other threads:[~2009-04-08 14:27 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-08 14:16 [Qemu-devel] [PATCH 1/3] Allow multiple monitor devices Anthony Liguori
2009-04-08 14:16 ` [Qemu-devel] [PATCH 2/3] Introduce monitor 'wait' command Anthony Liguori
2009-04-08 14:33   ` [Qemu-devel] " Daniel P. Berrange
2009-04-08 14:39     ` Anthony Liguori
2009-04-08 15:03     ` [Qemu-devel] Re: [libvirt] " Gerd Hoffmann
2009-04-08 15:25       ` Jan Kiszka
2009-04-08 17:44       ` Anthony Liguori
2009-04-08 19:06         ` Jamie Lokier
2009-04-08 19:35           ` Anthony Liguori
2009-04-08 20:28             ` Hollis Blanchard
2009-04-08 21:14               ` Anthony Liguori
2009-04-08 21:31                 ` Hollis Blanchard
2009-04-09 13:59                   ` Anthony Liguori
2009-04-08 21:39                 ` Paul Brook
2009-04-09  8:24                   ` Avi Kivity
2009-04-09 13:56                   ` Anthony Liguori
2009-04-09 17:12                     ` Jamie Lokier
2009-04-08 21:27             ` Zachary Amsden
2009-04-09  9:55           ` Daniel P. Berrange
2009-04-09 17:13             ` Jamie Lokier
2009-04-09  9:44         ` Gerd Hoffmann
2009-04-09 13:31           ` Anthony Liguori
2009-04-08 14:16 ` [Qemu-devel] [PATCH 3/3] Implement vm-state notifications Anthony Liguori
2009-04-08 14:27 ` Jan Kiszka [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=49DCB438.2070803@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=aliguori@us.ibm.com \
    --cc=hollisb@us.ibm.com \
    --cc=libvir-list@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).