* [Qemu-devel] [PATCH 01/10] chardev: move greeting into vc backend.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 02/10] vc: colorize chardev title line with blue background Gerd Hoffmann
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Make the 'vc' chardev backend print a title line with the chardev name
after initialization, using CharDriverState->label.
This replaces the banner printing code in vl.c.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
console.c | 8 ++++++++
vl.c | 24 ------------------------
2 files changed, 8 insertions(+), 24 deletions(-)
diff --git a/console.c b/console.c
index 82ddbe4..2aeb5b3 100644
--- a/console.c
+++ b/console.c
@@ -1384,6 +1384,14 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds, QemuOpt
s->t_attrib = s->t_attrib_default;
text_console_resize(s);
+ if (chr->label) {
+ char msg[128];
+ int len;
+
+ len = snprintf(msg, sizeof(msg), "%s console\r\n", chr->label);
+ console_puts(chr, (uint8_t*)msg, len);
+ }
+
qemu_chr_generic_open(chr);
if (chr->init)
chr->init(chr);
diff --git a/vl.c b/vl.c
index ee43808..6fb1858 100644
--- a/vl.c
+++ b/vl.c
@@ -5800,30 +5800,6 @@ int main(int argc, char **argv, char **envp)
}
}
- for(i = 0; i < MAX_SERIAL_PORTS; i++) {
- const char *devname = serial_devices[i];
- if (devname && strcmp(devname, "none")) {
- if (strstart(devname, "vc", 0))
- qemu_chr_printf(serial_hds[i], "serial%d console\r\n", i);
- }
- }
-
- for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
- const char *devname = parallel_devices[i];
- if (devname && strcmp(devname, "none")) {
- if (strstart(devname, "vc", 0))
- qemu_chr_printf(parallel_hds[i], "parallel%d console\r\n", i);
- }
- }
-
- for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
- const char *devname = virtio_consoles[i];
- if (virtcon_hds[i] && devname) {
- if (strstart(devname, "vc", 0))
- qemu_chr_printf(virtcon_hds[i], "virtio console%d\r\n", i);
- }
- }
-
if (gdbstub_dev && gdbserver_start(gdbstub_dev) < 0) {
fprintf(stderr, "qemu: could not open gdbserver on device '%s'\n",
gdbstub_dev);
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 02/10] vc: colorize chardev title line with blue background.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 01/10] chardev: move greeting into vc backend Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 03/10] default devices: core code & serial lines Gerd Hoffmann
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
console.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/console.c b/console.c
index 2aeb5b3..8086bd6 100644
--- a/console.c
+++ b/console.c
@@ -1388,8 +1388,10 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds, QemuOpt
char msg[128];
int len;
+ s->t_attrib.bgcol = COLOR_BLUE;
len = snprintf(msg, sizeof(msg), "%s console\r\n", chr->label);
console_puts(chr, (uint8_t*)msg, len);
+ s->t_attrib = s->t_attrib_default;
}
qemu_chr_generic_open(chr);
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 03/10] default devices: core code & serial lines.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 01/10] chardev: move greeting into vc backend Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 02/10] vc: colorize chardev title line with blue background Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 04/10] default devices: parallel port Gerd Hoffmann
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Qemu creates a default serial line for you in case you didn't specify
one on the command line. Right now this is tied to the '-serial
<chardev>' command line switch, which in turn causes trouble if you are
creating your serial line via '-device isa-serial,<props>'.
This patch adds a variable default_serial which says whenever a default
serial line should be added. It is enabled by default. It is cleared
when qemu finds '-serial' or '-device isa-serial' on the command line.
Part of the patch is some infrastructure for the '-device $driver'
checking (default_driver_check function) which will also be used by the
other patches of this series.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 122 +++++++++++++++++++++++++++++++++++++++++++----------------------
1 files changed, 81 insertions(+), 41 deletions(-)
diff --git a/vl.c b/vl.c
index 6fb1858..474e688 100644
--- a/vl.c
+++ b/vl.c
@@ -272,6 +272,30 @@ uint8_t qemu_uuid[16];
static QEMUBootSetHandler *boot_set_handler;
static void *boot_set_opaque;
+static int default_serial = 1;
+
+static struct {
+ const char *driver;
+ int *flag;
+} default_list[] = {
+ { .driver = "isa-serial", .flag = &default_serial },
+};
+
+static int default_driver_check(QemuOpts *opts, void *opaque)
+{
+ const char *driver = qemu_opt_get(opts, "driver");
+ int i;
+
+ if (!driver)
+ return 0;
+ for (i = 0; i < ARRAY_SIZE(default_list); i++) {
+ if (strcmp(default_list[i].driver, driver) != 0)
+ continue;
+ *(default_list[i].flag) = 0;
+ }
+ return 0;
+}
+
/***********************************************************/
/* x86 ISA bus support */
@@ -4543,6 +4567,7 @@ struct device_config {
enum {
DEV_USB, /* -usbdevice */
DEV_BT, /* -bt */
+ DEV_SERIAL, /* -serial */
} type;
const char *cmdline;
QTAILQ_ENTRY(device_config) next;
@@ -4574,6 +4599,50 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline))
return 0;
}
+static void serial_monitor_mux(const char *monitor_devices[])
+{
+ struct device_config *serial;
+ const char *devname;
+
+ if (strcmp(monitor_devices[0],"stdio") != 0)
+ return;
+ QTAILQ_FOREACH(serial, &device_configs, next) {
+ if (serial->type != DEV_SERIAL)
+ continue;
+ devname = serial->cmdline;
+ if (devname && !strcmp(devname,"mon:stdio")) {
+ monitor_devices[0] = NULL;
+ break;
+ } else if (devname && !strcmp(devname,"stdio")) {
+ monitor_devices[0] = NULL;
+ serial->cmdline = "mon:stdio";
+ break;
+ }
+ }
+}
+
+static int serial_parse(const char *devname)
+{
+ static int index = 0;
+ char label[32];
+
+ if (strcmp(devname, "none") == 0)
+ return 0;
+ if (index == MAX_SERIAL_PORTS) {
+ fprintf(stderr, "qemu: too many serial ports\n");
+ exit(1);
+ }
+ snprintf(label, sizeof(label), "serial%d", index);
+ serial_hds[index] = qemu_chr_open(label, devname, NULL);
+ if (!serial_hds[index]) {
+ fprintf(stderr, "qemu: could not open serial device '%s': %s\n",
+ devname, strerror(errno));
+ return -1;
+ }
+ index++;
+ return 0;
+}
+
int main(int argc, char **argv, char **envp)
{
const char *gdbstub_dev = NULL;
@@ -4592,8 +4661,6 @@ int main(int argc, char **argv, char **envp)
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];
int parallel_device_index;
const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
@@ -4663,11 +4730,6 @@ int main(int argc, char **argv, char **envp)
cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO;
- serial_devices[0] = "vc:80Cx24C";
- for(i = 1; i < MAX_SERIAL_PORTS; i++)
- serial_devices[i] = NULL;
- serial_device_index = 0;
-
parallel_devices[0] = "vc:80Cx24C";
for(i = 1; i < MAX_PARALLEL_PORTS; i++)
parallel_devices[i] = NULL;
@@ -5114,12 +5176,8 @@ int main(int argc, char **argv, char **envp)
}
break;
case QEMU_OPTION_serial:
- if (serial_device_index >= MAX_SERIAL_PORTS) {
- fprintf(stderr, "qemu: too many serial ports\n");
- exit(1);
- }
- serial_devices[serial_device_index] = optarg;
- serial_device_index++;
+ add_device_config(DEV_SERIAL, optarg);
+ default_serial = 0;
break;
case QEMU_OPTION_watchdog:
if (watchdog) {
@@ -5420,14 +5478,19 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
+ qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
+
if (display_type == DT_NOGRAPHIC) {
- if (serial_device_index == 0)
- serial_devices[0] = "stdio";
+ if (default_serial)
+ add_device_config(DEV_SERIAL, "stdio");
if (parallel_device_index == 0)
parallel_devices[0] = "null";
if (strncmp(monitor_devices[0], "vc", 2) == 0) {
monitor_devices[0] = "stdio";
}
+ } else {
+ if (default_serial)
+ add_device_config(DEV_SERIAL, "vc:80Cx24C");
}
#ifndef _WIN32
@@ -5573,19 +5636,7 @@ int main(int argc, char **argv, char **envp)
ram_load, NULL);
/* Maintain compatibility with multiple stdio monitors */
- 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_devices[0] = NULL;
- break;
- } else if (devname && !strcmp(devname,"stdio")) {
- monitor_devices[0] = NULL;
- serial_devices[i] = "mon:stdio";
- break;
- }
- }
- }
+ serial_monitor_mux(monitor_devices);
if (nb_numa_nodes > 0) {
int i;
@@ -5647,19 +5698,8 @@ int main(int argc, char **argv, char **envp)
}
}
- for(i = 0; i < MAX_SERIAL_PORTS; i++) {
- const char *devname = serial_devices[i];
- if (devname && strcmp(devname, "none")) {
- char label[32];
- snprintf(label, sizeof(label), "serial%d", i);
- serial_hds[i] = qemu_chr_open(label, devname, NULL);
- if (!serial_hds[i]) {
- fprintf(stderr, "qemu: could not open serial device '%s': %s\n",
- devname, strerror(errno));
- exit(1);
- }
- }
- }
+ if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
+ exit(1);
for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
const char *devname = parallel_devices[i];
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 04/10] default devices: parallel port.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (2 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 03/10] default devices: core code & serial lines Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 05/10] default devices: qemu monitor Gerd Hoffmann
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Qemu creates a default parallel port for you in case you didn't specify
one on the command line. Right now this is tied to the '-parallel
<chardev>' command line switch, which in turn causes trouble if you are
creating your parallel port via '-device isa-parallel,<props>'.
This patch adds a variable default_parallel which says whenever a default
parallel port should be added. It is enabled by default. It is cleared
when qemu finds '-parallel' or '-device isa-parallel' on the command line.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 64 ++++++++++++++++++++++++++++++++++------------------------------
1 files changed, 34 insertions(+), 30 deletions(-)
diff --git a/vl.c b/vl.c
index 474e688..ca0af9d 100644
--- a/vl.c
+++ b/vl.c
@@ -273,12 +273,14 @@ static QEMUBootSetHandler *boot_set_handler;
static void *boot_set_opaque;
static int default_serial = 1;
+static int default_parallel = 1;
static struct {
const char *driver;
int *flag;
} default_list[] = {
- { .driver = "isa-serial", .flag = &default_serial },
+ { .driver = "isa-serial", .flag = &default_serial },
+ { .driver = "isa-parallel", .flag = &default_parallel },
};
static int default_driver_check(QemuOpts *opts, void *opaque)
@@ -4568,6 +4570,7 @@ struct device_config {
DEV_USB, /* -usbdevice */
DEV_BT, /* -bt */
DEV_SERIAL, /* -serial */
+ DEV_PARALLEL, /* -parallel */
} type;
const char *cmdline;
QTAILQ_ENTRY(device_config) next;
@@ -4643,6 +4646,28 @@ static int serial_parse(const char *devname)
return 0;
}
+static int parallel_parse(const char *devname)
+{
+ static int index = 0;
+ char label[32];
+
+ if (strcmp(devname, "none") == 0)
+ return 0;
+ if (index == MAX_PARALLEL_PORTS) {
+ fprintf(stderr, "qemu: too many parallel ports\n");
+ exit(1);
+ }
+ snprintf(label, sizeof(label), "parallel%d", index);
+ parallel_hds[index] = qemu_chr_open(label, devname, NULL);
+ if (!parallel_hds[index]) {
+ fprintf(stderr, "qemu: could not open parallel device '%s': %s\n",
+ devname, strerror(errno));
+ return -1;
+ }
+ index++;
+ return 0;
+}
+
int main(int argc, char **argv, char **envp)
{
const char *gdbstub_dev = NULL;
@@ -4661,8 +4686,6 @@ int main(int argc, char **argv, char **envp)
CharDriverState *monitor_hds[MAX_MONITOR_DEVICES];
const char *monitor_devices[MAX_MONITOR_DEVICES];
int monitor_device_index;
- const char *parallel_devices[MAX_PARALLEL_PORTS];
- int parallel_device_index;
const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
int virtio_console_index;
const char *loadvm = NULL;
@@ -4730,11 +4753,6 @@ int main(int argc, char **argv, char **envp)
cyls = heads = secs = 0;
translation = BIOS_ATA_TRANSLATION_AUTO;
- parallel_devices[0] = "vc:80Cx24C";
- for(i = 1; i < MAX_PARALLEL_PORTS; i++)
- parallel_devices[i] = NULL;
- parallel_device_index = 0;
-
for(i = 0; i < MAX_VIRTIO_CONSOLES; i++)
virtio_consoles[i] = NULL;
virtio_console_index = 0;
@@ -5202,12 +5220,8 @@ int main(int argc, char **argv, char **envp)
virtio_console_index++;
break;
case QEMU_OPTION_parallel:
- if (parallel_device_index >= MAX_PARALLEL_PORTS) {
- fprintf(stderr, "qemu: too many parallel ports\n");
- exit(1);
- }
- parallel_devices[parallel_device_index] = optarg;
- parallel_device_index++;
+ add_device_config(DEV_PARALLEL, optarg);
+ default_parallel = 0;
break;
case QEMU_OPTION_loadvm:
loadvm = optarg;
@@ -5483,14 +5497,16 @@ int main(int argc, char **argv, char **envp)
if (display_type == DT_NOGRAPHIC) {
if (default_serial)
add_device_config(DEV_SERIAL, "stdio");
- if (parallel_device_index == 0)
- parallel_devices[0] = "null";
+ if (default_parallel)
+ add_device_config(DEV_PARALLEL, "null");
if (strncmp(monitor_devices[0], "vc", 2) == 0) {
monitor_devices[0] = "stdio";
}
} else {
if (default_serial)
add_device_config(DEV_SERIAL, "vc:80Cx24C");
+ if (default_parallel)
+ add_device_config(DEV_PARALLEL, "vc:80Cx24C");
}
#ifndef _WIN32
@@ -5700,20 +5716,8 @@ int main(int argc, char **argv, char **envp)
if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
exit(1);
-
- for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
- const char *devname = parallel_devices[i];
- if (devname && strcmp(devname, "none")) {
- char label[32];
- snprintf(label, sizeof(label), "parallel%d", i);
- parallel_hds[i] = qemu_chr_open(label, devname, NULL);
- if (!parallel_hds[i]) {
- fprintf(stderr, "qemu: could not open parallel device '%s': %s\n",
- devname, strerror(errno));
- exit(1);
- }
- }
- }
+ if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
+ exit(1);
for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
const char *devname = virtio_consoles[i];
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 05/10] default devices: qemu monitor.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (3 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 04/10] default devices: parallel port Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 06/10] zap serial_monitor_mux Gerd Hoffmann
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
This patch makes the monitor default device configuration work like the
default serial and parallel port devices. It adds a variable
default_monitor which says whenever a default monitor should be added.
It is enabled by default. It is cleared when qemu finds '-monitor' on
the command line.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 94 +++++++++++++++++++++++++++++++++++-------------------------------
1 files changed, 50 insertions(+), 44 deletions(-)
diff --git a/vl.c b/vl.c
index ca0af9d..15f2357 100644
--- a/vl.c
+++ b/vl.c
@@ -212,6 +212,7 @@ int no_quit = 0;
CharDriverState *serial_hds[MAX_SERIAL_PORTS];
CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
CharDriverState *virtcon_hds[MAX_VIRTIO_CONSOLES];
+CharDriverState *monitor_hds[MAX_MONITOR_DEVICES];
#ifdef TARGET_I386
int win2k_install_hack = 0;
int rtc_td_hack = 0;
@@ -274,6 +275,7 @@ static void *boot_set_opaque;
static int default_serial = 1;
static int default_parallel = 1;
+static int default_monitor = 1;
static struct {
const char *driver;
@@ -4571,6 +4573,7 @@ struct device_config {
DEV_BT, /* -bt */
DEV_SERIAL, /* -serial */
DEV_PARALLEL, /* -parallel */
+ DEV_MONITOR, /* -monitor */
} type;
const char *cmdline;
QTAILQ_ENTRY(device_config) next;
@@ -4602,22 +4605,27 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline))
return 0;
}
-static void serial_monitor_mux(const char *monitor_devices[])
+static void serial_monitor_mux(void)
{
- struct device_config *serial;
+ struct device_config *mon0, *serial;
const char *devname;
- if (strcmp(monitor_devices[0],"stdio") != 0)
- return;
+ QTAILQ_FOREACH(mon0, &device_configs, next) {
+ if (mon0->type != DEV_MONITOR)
+ continue;
+ if (strcmp(mon0->cmdline,"stdio") != 0)
+ return;
+ break;
+ }
QTAILQ_FOREACH(serial, &device_configs, next) {
if (serial->type != DEV_SERIAL)
continue;
devname = serial->cmdline;
if (devname && !strcmp(devname,"mon:stdio")) {
- monitor_devices[0] = NULL;
+ QTAILQ_REMOVE(&device_configs, mon0, next);
break;
} else if (devname && !strcmp(devname,"stdio")) {
- monitor_devices[0] = NULL;
+ QTAILQ_REMOVE(&device_configs, mon0, next);
serial->cmdline = "mon:stdio";
break;
}
@@ -4668,6 +4676,32 @@ static int parallel_parse(const char *devname)
return 0;
}
+static int monitor_parse(const char *devname)
+{
+ static int index = 0;
+ char label[32];
+
+ if (strcmp(devname, "none") == 0)
+ return 0;
+ if (index == MAX_MONITOR_DEVICES) {
+ fprintf(stderr, "qemu: too many monitor devices\n");
+ exit(1);
+ }
+ if (index == 0) {
+ snprintf(label, sizeof(label), "monitor");
+ } else {
+ snprintf(label, sizeof(label), "monitor%d", index);
+ }
+ monitor_hds[index] = qemu_chr_open(label, devname, NULL);
+ if (!monitor_hds[index]) {
+ fprintf(stderr, "qemu: could not open monitor device '%s'\n",
+ devname);
+ return -1;
+ }
+ index++;
+ return 0;
+}
+
int main(int argc, char **argv, char **envp)
{
const char *gdbstub_dev = NULL;
@@ -4683,9 +4717,6 @@ int main(int argc, char **argv, char **envp)
QemuOpts *hda_opts = NULL, *opts;
int optind;
const char *r, *optarg;
- CharDriverState *monitor_hds[MAX_MONITOR_DEVICES];
- const char *monitor_devices[MAX_MONITOR_DEVICES];
- int monitor_device_index;
const char *virtio_consoles[MAX_VIRTIO_CONSOLES];
int virtio_console_index;
const char *loadvm = NULL;
@@ -4757,12 +4788,6 @@ 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;
-
for (i = 0; i < MAX_NODES; i++) {
node_mem[i] = 0;
node_cpumask[i] = 0;
@@ -5176,12 +5201,8 @@ int main(int argc, char **argv, char **envp)
break;
}
case QEMU_OPTION_monitor:
- 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++;
+ add_device_config(DEV_MONITOR, optarg);
+ default_monitor = 0;
break;
case QEMU_OPTION_chardev:
opts = qemu_opts_parse(&qemu_chardev_opts, optarg, "backend");
@@ -5499,14 +5520,15 @@ int main(int argc, char **argv, char **envp)
add_device_config(DEV_SERIAL, "stdio");
if (default_parallel)
add_device_config(DEV_PARALLEL, "null");
- if (strncmp(monitor_devices[0], "vc", 2) == 0) {
- monitor_devices[0] = "stdio";
- }
+ if (default_monitor)
+ add_device_config(DEV_MONITOR, "stdio");
} else {
if (default_serial)
add_device_config(DEV_SERIAL, "vc:80Cx24C");
if (default_parallel)
add_device_config(DEV_PARALLEL, "vc:80Cx24C");
+ if (default_monitor)
+ add_device_config(DEV_MONITOR, "vc:80Cx24C");
}
#ifndef _WIN32
@@ -5652,7 +5674,7 @@ int main(int argc, char **argv, char **envp)
ram_load, NULL);
/* Maintain compatibility with multiple stdio monitors */
- serial_monitor_mux(monitor_devices);
+ serial_monitor_mux();
if (nb_numa_nodes > 0) {
int i;
@@ -5696,24 +5718,8 @@ int main(int argc, char **argv, char **envp)
}
}
- 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);
- }
- }
- }
-
+ if (foreach_device_config(DEV_MONITOR, monitor_parse) < 0)
+ exit(1);
if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
exit(1);
if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
@@ -5837,7 +5843,7 @@ int main(int argc, char **argv, char **envp)
text_consoles_set_display(display_state);
for (i = 0; i < MAX_MONITOR_DEVICES; i++) {
- if (monitor_devices[i] && monitor_hds[i]) {
+ if (monitor_hds[i]) {
monitor_init(monitor_hds[i],
MONITOR_USE_READLINE |
((i == 0) ? MONITOR_IS_DEFAULT : 0));
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 06/10] zap serial_monitor_mux
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (4 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 05/10] default devices: qemu monitor Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 07/10] default devices: vga adapter Gerd Hoffmann
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
The logic in this code obviously predates the multiple monitor
capability of qemu and looks increasingly silly these days.
I think the intention of this piece of code is to get a reasonable
default for the -nographic case: have monitor and serial line muxed
on stdio.
With the new default_serial and default_monitor variables we have now
doing just that became much easier ;)
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 42 ++++++++----------------------------------
1 files changed, 8 insertions(+), 34 deletions(-)
diff --git a/vl.c b/vl.c
index 15f2357..e3d2ea3 100644
--- a/vl.c
+++ b/vl.c
@@ -4605,33 +4605,6 @@ static int foreach_device_config(int type, int (*func)(const char *cmdline))
return 0;
}
-static void serial_monitor_mux(void)
-{
- struct device_config *mon0, *serial;
- const char *devname;
-
- QTAILQ_FOREACH(mon0, &device_configs, next) {
- if (mon0->type != DEV_MONITOR)
- continue;
- if (strcmp(mon0->cmdline,"stdio") != 0)
- return;
- break;
- }
- QTAILQ_FOREACH(serial, &device_configs, next) {
- if (serial->type != DEV_SERIAL)
- continue;
- devname = serial->cmdline;
- if (devname && !strcmp(devname,"mon:stdio")) {
- QTAILQ_REMOVE(&device_configs, mon0, next);
- break;
- } else if (devname && !strcmp(devname,"stdio")) {
- QTAILQ_REMOVE(&device_configs, mon0, next);
- serial->cmdline = "mon:stdio";
- break;
- }
- }
-}
-
static int serial_parse(const char *devname)
{
static int index = 0;
@@ -5516,12 +5489,16 @@ int main(int argc, char **argv, char **envp)
qemu_opts_foreach(&qemu_device_opts, default_driver_check, NULL, 0);
if (display_type == DT_NOGRAPHIC) {
- if (default_serial)
- add_device_config(DEV_SERIAL, "stdio");
if (default_parallel)
add_device_config(DEV_PARALLEL, "null");
- if (default_monitor)
- add_device_config(DEV_MONITOR, "stdio");
+ if (default_serial && default_monitor) {
+ add_device_config(DEV_SERIAL, "mon:stdio");
+ } else {
+ if (default_serial)
+ add_device_config(DEV_SERIAL, "stdio");
+ if (default_monitor)
+ add_device_config(DEV_MONITOR, "stdio");
+ }
} else {
if (default_serial)
add_device_config(DEV_SERIAL, "vc:80Cx24C");
@@ -5673,9 +5650,6 @@ int main(int argc, char **argv, char **envp)
register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL,
ram_load, NULL);
- /* Maintain compatibility with multiple stdio monitors */
- serial_monitor_mux();
-
if (nb_numa_nodes > 0) {
int i;
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 07/10] default devices: vga adapter.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (5 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 06/10] zap serial_monitor_mux Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 08/10] default devices: add global cmd line option Gerd Hoffmann
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Qemu creates a vga display for you in case you didn't specify one on the
command line. Right now this is tied to the '-vga <type>' command line
switch, which in turn causes trouble if you are creating your gfx card
using '-device VGA,<props>'.
This patch adds a variable default_vga which says whenever a default
serial line should be added. It is enabled by default. It is cleared
when qemu finds '-vga' or '-device {VGA,Cirrus VGA,QEMUware SVGA}' on
the command line.
'-device VGA' still doesn't work though due to a initialization order
issue (vga must init before calling i440fx_init_memory_mappings).
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/vl.c b/vl.c
index e3d2ea3..eb1d23e 100644
--- a/vl.c
+++ b/vl.c
@@ -194,7 +194,7 @@ int autostart;
static int rtc_utc = 1;
static int rtc_date_offset = -1; /* -1 means no change */
QEMUClock *rtc_clock;
-int vga_interface_type = VGA_CIRRUS;
+int vga_interface_type = VGA_NONE;
#ifdef TARGET_SPARC
int graphic_width = 1024;
int graphic_height = 768;
@@ -276,6 +276,7 @@ static void *boot_set_opaque;
static int default_serial = 1;
static int default_parallel = 1;
static int default_monitor = 1;
+static int default_vga = 1;
static struct {
const char *driver;
@@ -283,6 +284,9 @@ static struct {
} default_list[] = {
{ .driver = "isa-serial", .flag = &default_serial },
{ .driver = "isa-parallel", .flag = &default_parallel },
+ { .driver = "VGA", .flag = &default_vga },
+ { .driver = "Cirrus VGA", .flag = &default_vga },
+ { .driver = "QEMUware SVGA", .flag = &default_vga },
};
static int default_driver_check(QemuOpts *opts, void *opaque)
@@ -4326,6 +4330,7 @@ static void select_vgahw (const char *p)
{
const char *opts;
+ default_vga = 0;
vga_interface_type = VGA_NONE;
if (strstart(p, "std", &opts)) {
vga_interface_type = VGA_STD;
@@ -5507,6 +5512,8 @@ int main(int argc, char **argv, char **envp)
if (default_monitor)
add_device_config(DEV_MONITOR, "vc:80Cx24C");
}
+ if (default_vga)
+ vga_interface_type = VGA_CIRRUS;
#ifndef _WIN32
if (daemonize) {
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 08/10] default devices: add global cmd line option.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (6 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 07/10] default devices: vga adapter Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 09/10] default devices: network Gerd Hoffmann
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add global command line option to disable default devices.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
qemu-options.hx | 5 +++++
vl.c | 6 ++++++
2 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/qemu-options.hx b/qemu-options.hx
index b65fd74..70929fa 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1878,6 +1878,11 @@ DEF("incoming", HAS_ARG, QEMU_OPTION_incoming, \
STEXI
ETEXI
+DEF("nodefaults", 0, QEMU_OPTION_nodefaults, \
+ "-nodefaults don't create default devices.\n")
+STEXI
+ETEXI
+
#ifndef _WIN32
DEF("chroot", HAS_ARG, QEMU_OPTION_chroot, \
"-chroot dir Chroot to dir just before starting the VM.\n")
diff --git a/vl.c b/vl.c
index eb1d23e..6b00c2c 100644
--- a/vl.c
+++ b/vl.c
@@ -5413,6 +5413,12 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_incoming:
incoming = optarg;
break;
+ case QEMU_OPTION_nodefaults:
+ default_serial = 0;
+ default_parallel = 0;
+ default_monitor = 0;
+ default_vga = 0;
+ break;
#ifndef _WIN32
case QEMU_OPTION_chroot:
chroot_dir = optarg;
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 09/10] default devices: network
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (7 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 08/10] default devices: add global cmd line option Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 8:58 ` [Qemu-devel] [PATCH 10/10] default devices: drives Gerd Hoffmann
2009-11-24 9:50 ` [Qemu-devel] [PATCH 00/10] default devices: qdev integration Markus Armbruster
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add a default_net variable which specified whenever a default network
should be created. It is cleared in case any -net option is specified
and it is also added to the new -nodefaults switch.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
net.c | 5 ++++-
net.h | 1 +
vl.c | 1 +
3 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/net.c b/net.c
index 9ea66e3..9375351 100644
--- a/net.c
+++ b/net.c
@@ -112,6 +112,8 @@
static QTAILQ_HEAD(, VLANState) vlans;
static QTAILQ_HEAD(, VLANClientState) non_vlan_clients;
+int default_net = 1;
+
/***********************************************************/
/* network device redirectors */
@@ -2834,7 +2836,7 @@ static int net_init_netdev(QemuOpts *opts, void *dummy)
int net_init_clients(void)
{
- if (QTAILQ_EMPTY(&qemu_net_opts.head)) {
+ if (default_net) {
/* if no clients, we use a default config */
qemu_opts_set(&qemu_net_opts, NULL, "type", "nic");
#ifdef CONFIG_SLIRP
@@ -2887,5 +2889,6 @@ int net_client_parse(QemuOptsList *opts_list, const char *optarg)
return -1;
}
+ default_net = 0;
return 0;
}
diff --git a/net.h b/net.h
index 4ffce91..3611d10 100644
--- a/net.h
+++ b/net.h
@@ -133,6 +133,7 @@ struct NICInfo {
extern int nb_nics;
extern NICInfo nd_table[MAX_NICS];
+extern int default_net;
/* BT HCI info */
diff --git a/vl.c b/vl.c
index 6b00c2c..960d2f6 100644
--- a/vl.c
+++ b/vl.c
@@ -5418,6 +5418,7 @@ int main(int argc, char **argv, char **envp)
default_parallel = 0;
default_monitor = 0;
default_vga = 0;
+ default_net = 0;
break;
#ifndef _WIN32
case QEMU_OPTION_chroot:
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [Qemu-devel] [PATCH 10/10] default devices: drives
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (8 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 09/10] default devices: network Gerd Hoffmann
@ 2009-11-24 8:58 ` Gerd Hoffmann
2009-11-24 9:50 ` [Qemu-devel] [PATCH 00/10] default devices: qdev integration Markus Armbruster
10 siblings, 0 replies; 12+ messages in thread
From: Gerd Hoffmann @ 2009-11-24 8:58 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
Add a default_drive variable which specified whenever the default drives
(cdrom, floppy, sd) should be created. It is cleared when the new
-nodefaults switch is specified on the command line.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
vl.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/vl.c b/vl.c
index 960d2f6..cefafaf 100644
--- a/vl.c
+++ b/vl.c
@@ -277,6 +277,7 @@ static int default_serial = 1;
static int default_parallel = 1;
static int default_monitor = 1;
static int default_vga = 1;
+static int default_drive = 1;
static struct {
const char *driver;
@@ -5419,6 +5420,7 @@ int main(int argc, char **argv, char **envp)
default_monitor = 0;
default_vga = 0;
default_net = 0;
+ default_drive = 0;
break;
#ifndef _WIN32
case QEMU_OPTION_chroot:
@@ -5645,14 +5647,16 @@ int main(int argc, char **argv, char **envp)
blk_mig_init();
- /* we always create the cdrom drive, even if no disk is there */
- drive_add(NULL, CDROM_ALIAS);
+ if (default_drive) {
+ /* we always create the cdrom drive, even if no disk is there */
+ drive_add(NULL, CDROM_ALIAS);
- /* we always create at least one floppy */
- drive_add(NULL, FD_ALIAS, 0);
+ /* we always create at least one floppy */
+ drive_add(NULL, FD_ALIAS, 0);
- /* we always create one sd slot, even if no card is in it */
- drive_add(NULL, SD_ALIAS);
+ /* we always create one sd slot, even if no card is in it */
+ drive_add(NULL, SD_ALIAS);
+ }
/* open the virtual block devices */
if (snapshot)
--
1.6.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Qemu-devel] [PATCH 00/10] default devices: qdev integration.
2009-11-24 8:58 [Qemu-devel] [PATCH 00/10] default devices: qdev integration Gerd Hoffmann
` (9 preceding siblings ...)
2009-11-24 8:58 ` [Qemu-devel] [PATCH 10/10] default devices: drives Gerd Hoffmann
@ 2009-11-24 9:50 ` Markus Armbruster
10 siblings, 0 replies; 12+ messages in thread
From: Markus Armbruster @ 2009-11-24 9:50 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: qemu-devel
Gerd Hoffmann <kraxel@redhat.com> writes:
> Hi,
>
> Qemu creates a bunch of default devices (serial, parallel, vga, ...) if
> the user didn't specify one on the command line. Unfortunaly this
> doesn't work well with the qdev way of doing things because this logic
> is tied to the -serial, -parallel, ... command line switches. Devices
> created via -device are ignored. This patch set fixes this. It also
> adds a command line switch to disable all default devices and does a few
> cleanups in the code touched anyway.
>
> cheers,
> Gerd
Looks good.
^ permalink raw reply [flat|nested] 12+ messages in thread