[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 1/3] Allow multiple monitor devices
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] Re: [PATCH 1/3] Allow multiple monitor devices |
Date: |
Wed, 08 Apr 2009 16:27:04 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 |
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 <address@hidden>
>
> 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
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, (continued)
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Anthony Liguori, 2009/04/09
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Paul Brook, 2009/04/08
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Avi Kivity, 2009/04/09
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Anthony Liguori, 2009/04/09
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Jamie Lokier, 2009/04/09
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Zachary Amsden, 2009/04/08
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Daniel P. Berrange, 2009/04/09
- Re: [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Jamie Lokier, 2009/04/09
- [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Gerd Hoffmann, 2009/04/09
- [Qemu-devel] Re: [libvirt] Re: [PATCH 2/3] Introduce monitor 'wait' command, Anthony Liguori, 2009/04/09
[Qemu-devel] Re: [PATCH 1/3] Allow multiple monitor devices,
Jan Kiszka <=