From d44229c54f7477035c7e914dd12c84e01bbd4123 Mon Sep 17 00:00:00 2001 From: Mark Wu Date: Mon, 10 Mar 2014 22:37:40 +0800 Subject: Fix vga_interface_type for command line argument '-device VGA' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some machine (like pseries) initialization code determines if it has graphics according to vga_interface_type. In the original code, vga_interface_type is evaluated to VGA_NONE even if a VGA is added via '-device VGA'. It causes the machine not aware of the graphics device configured. Add a new VGA device type to indicate that it has a VGA device, which will be initialized in QOM device initialization. Suggested-by: Paolo Bonzini Signed-off-by: Mark Wu Reviewed-by: Paolo Bonzini Signed-off-by: Andreas Färber --- include/sysemu/sysemu.h | 2 +- vl.c | 42 ++++++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index b90df9ada1..c01304d39a 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -104,7 +104,7 @@ extern int autostart; typedef enum { VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL, - VGA_TCX, VGA_CG3, + VGA_TCX, VGA_CG3, VGA_DEVICE } VGAInterfaceType; extern int vga_interface_type; diff --git a/vl.c b/vl.c index 862cf20f3c..98f6460890 100644 --- a/vl.c +++ b/vl.c @@ -213,6 +213,7 @@ uint32_t xen_domid; enum xen_mode xen_mode = XEN_EMULATE; static int tcg_tb_size; +static int has_defaults = 1; static int default_serial = 1; static int default_parallel = 1; static int default_virtcon = 1; @@ -2122,7 +2123,7 @@ static void select_vgahw (const char *p) { const char *opts; - vga_interface_type = VGA_NONE; + assert(vga_interface_type == VGA_NONE); if (strstart(p, "std", &opts)) { if (vga_available()) { vga_interface_type = VGA_STD; @@ -2912,7 +2913,7 @@ int main(int argc, char **argv, char **envp) MachineClass *machine_class; QEMUMachine *machine; const char *cpu_model; - const char *vga_model = "none"; + const char *vga_model = NULL; const char *qtest_chrdev = NULL; const char *qtest_log = NULL; const char *pid_file = NULL; @@ -3762,16 +3763,7 @@ int main(int argc, char **argv, char **envp) runstate_set(RUN_STATE_INMIGRATE); break; case QEMU_OPTION_nodefaults: - default_serial = 0; - default_parallel = 0; - default_virtcon = 0; - default_sclp = 0; - default_monitor = 0; - default_net = 0; - default_floppy = 0; - default_cdrom = 0; - default_sdcard = 0; - default_vga = 0; + has_defaults = 0; break; case QEMU_OPTION_xen_domid: if (!(xen_available())) { @@ -4004,27 +3996,35 @@ int main(int argc, char **argv, char **envp) qemu_opts_foreach(qemu_find_opts("device"), default_driver_check, NULL, 0); qemu_opts_foreach(qemu_find_opts("global"), default_driver_check, NULL, 0); - if (machine->no_serial) { + if (!vga_model && !default_vga) { + vga_interface_type = VGA_DEVICE; + } + if (!has_defaults || machine->no_serial) { default_serial = 0; } - if (machine->no_parallel) { + if (!has_defaults || machine->no_parallel) { default_parallel = 0; } - if (!machine->use_virtcon) { + if (!has_defaults || !machine->use_virtcon) { default_virtcon = 0; } - if (!machine->use_sclp) { + if (!has_defaults || !machine->use_sclp) { default_sclp = 0; } - if (machine->no_floppy) { + if (!has_defaults || machine->no_floppy) { default_floppy = 0; } - if (machine->no_cdrom) { + if (!has_defaults || machine->no_cdrom) { default_cdrom = 0; } - if (machine->no_sdcard) { + if (!has_defaults || machine->no_sdcard) { default_sdcard = 0; } + if (!has_defaults) { + default_monitor = 0; + default_net = 0; + default_vga = 0; + } if (is_daemonized()) { /* According to documentation and historically, -nographic redirects @@ -4329,7 +4329,9 @@ int main(int argc, char **argv, char **envp) vga_model = "std"; } } - select_vgahw(vga_model); + if (vga_model) { + select_vgahw(vga_model); + } if (watchdog) { i = select_watchdog(watchdog); -- cgit v1.2.1 From 7effdaa32198b7077c51e29621dfca3d1b14e420 Mon Sep 17 00:00:00 2001 From: Mark Wu Date: Mon, 10 Mar 2014 22:37:41 +0800 Subject: spapr: Fix return value of vga initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before spapr_vga_init will returned false if the vga is specified by the command '-device VGA' because vga_interface_type was evaluated to VGA_NONE. With the change in previous patch of this series, spapr_vga_init should return true if it's told that the vga will be initialized in flow of the generic devices initialization. To keep '-nodefaults' have the semantics of bare minimum, it adds a check of 'has_defaults' in usb_enabled() to avoid that a USB controller is added by '-nodefautls, -device VGA' implicitly. This patch also makes two cleanups: 1. skip initialization for VGA_NONE 2. remove the useless 'break' Suggested-by: Paolo Bonzini Signed-off-by: Mark Wu Reviewed-by: Paolo Bonzini Signed-off-by: Andreas Färber --- hw/ppc/spapr.c | 4 +++- vl.c | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index bf46c380ec..5c9a154d6a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -781,13 +781,15 @@ static int spapr_vga_init(PCIBus *pci_bus) { switch (vga_interface_type) { case VGA_NONE: + return false; + case VGA_DEVICE: + return true; case VGA_STD: return pci_vga_init(pci_bus) != NULL; default: fprintf(stderr, "This vga model is not supported," "currently it only supports -vga std\n"); exit(0); - break; } } diff --git a/vl.c b/vl.c index 98f6460890..842e897d75 100644 --- a/vl.c +++ b/vl.c @@ -974,7 +974,8 @@ static void parse_name(QemuOpts *opts) bool usb_enabled(bool default_usb) { - return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", default_usb); + return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", + has_defaults && default_usb); } #ifndef _WIN32 -- cgit v1.2.1