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
prev 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).