Warn user if the vga flag is passed but no vga device is created

A global boolean variable "vga_interface_created"(declared in softmmu/globals.c)
has been used to track the creation of vga interface. If the vga flag is passed
in the command line "default_vga"(declared in softmmu/vl.c) variable is set to 0.
To warn user, the condition checks if vga_interface_created is false
and default_vga is equal to 0. If "-vga none" is passed, this patch will not warn the
user regarding the creation of VGA device.

The warning "A -vga option was passed but this
machine type does not use that option; no VGA device has been created"
is logged if vga flag is passed but no vga device is created.

This patch has been tested for x86_64, i386, sparc, sparc64 and arm boards.

Signed-off-by: Gautam Agrawal <gautamnagrawal@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/581
Message-Id: <20220501122505.29202-1-gautamnagrawal@gmail.com>
[thuth: Fix wrong warning with "-device" in some cases as reported by Paolo]
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Gautam Agrawal 2022-05-01 17:55:05 +05:30 committed by Thomas Huth
parent 26f0ee7ddb
commit f9bcb2d684
11 changed files with 18 additions and 0 deletions

View file

@ -265,6 +265,7 @@ static void machine_hppa_init(MachineState *machine)
/* Graphics setup. */ /* Graphics setup. */
if (machine->enable_graphics && vga_interface_type != VGA_NONE) { if (machine->enable_graphics && vga_interface_type != VGA_NONE) {
vga_interface_created = true;
dev = qdev_new("artist"); dev = qdev_new("artist");
s = SYS_BUS_DEVICE(dev); s = SYS_BUS_DEVICE(dev);
sysbus_realize_and_unref(s, &error_fatal); sysbus_realize_and_unref(s, &error_fatal);

View file

@ -166,6 +166,7 @@ bool isa_realize_and_unref(ISADevice *dev, ISABus *bus, Error **errp)
ISADevice *isa_vga_init(ISABus *bus) ISADevice *isa_vga_init(ISABus *bus)
{ {
vga_interface_created = true;
switch (vga_interface_type) { switch (vga_interface_type) {
case VGA_CIRRUS: case VGA_CIRRUS:
return isa_create_simple(bus, "isa-cirrus-vga"); return isa_create_simple(bus, "isa-cirrus-vga");

View file

@ -320,6 +320,7 @@ static void mips_fuloong2e_init(MachineState *machine)
/* GPU */ /* GPU */
if (vga_interface_type != VGA_NONE) { if (vga_interface_type != VGA_NONE) {
vga_interface_created = true;
pci_dev = pci_new(-1, "ati-vga"); pci_dev = pci_new(-1, "ati-vga");
dev = DEVICE(pci_dev); dev = DEVICE(pci_dev);
qdev_prop_set_uint32(dev, "vgamem_mb", 16); qdev_prop_set_uint32(dev, "vgamem_mb", 16);

View file

@ -2037,6 +2037,7 @@ PCIDevice *pci_nic_init_nofail(NICInfo *nd, PCIBus *rootbus,
PCIDevice *pci_vga_init(PCIBus *bus) PCIDevice *pci_vga_init(PCIBus *bus)
{ {
vga_interface_created = true;
switch (vga_interface_type) { switch (vga_interface_type) {
case VGA_CIRRUS: case VGA_CIRRUS:
return pci_create_simple(bus, -1, "cirrus-vga"); return pci_create_simple(bus, -1, "cirrus-vga");

View file

@ -1742,6 +1742,7 @@ static void spapr_rtc_create(SpaprMachineState *spapr)
/* Returns whether we want to use VGA or not */ /* Returns whether we want to use VGA or not */
static bool spapr_vga_init(PCIBus *pci_bus, Error **errp) static bool spapr_vga_init(PCIBus *pci_bus, Error **errp)
{ {
vga_interface_created = true;
switch (vga_interface_type) { switch (vga_interface_type) {
case VGA_NONE: case VGA_NONE:
return false; return false;

View file

@ -920,6 +920,7 @@ static void sun4m_hw_init(MachineState *machine)
/* sbus irq 5 */ /* sbus irq 5 */
cg3_init(hwdef->tcx_base, slavio_irq[11], 0x00100000, cg3_init(hwdef->tcx_base, slavio_irq[11], 0x00100000,
graphic_width, graphic_height, graphic_depth); graphic_width, graphic_height, graphic_depth);
vga_interface_created = true;
} else { } else {
/* If no display specified, default to TCX */ /* If no display specified, default to TCX */
if (graphic_depth != 8 && graphic_depth != 24) { if (graphic_depth != 8 && graphic_depth != 24) {
@ -935,6 +936,7 @@ static void sun4m_hw_init(MachineState *machine)
tcx_init(hwdef->tcx_base, slavio_irq[11], 0x00100000, tcx_init(hwdef->tcx_base, slavio_irq[11], 0x00100000,
graphic_width, graphic_height, graphic_depth); graphic_width, graphic_height, graphic_depth);
vga_interface_created = true;
} }
} }

View file

@ -632,6 +632,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
switch (vga_interface_type) { switch (vga_interface_type) {
case VGA_STD: case VGA_STD:
pci_create_simple(pci_busA, PCI_DEVFN(2, 0), "VGA"); pci_create_simple(pci_busA, PCI_DEVFN(2, 0), "VGA");
vga_interface_created = true;
break; break;
case VGA_NONE: case VGA_NONE:
break; break;

View file

@ -63,6 +63,7 @@ static void xen_init_pv(MachineState *machine)
if (vga_interface_type == VGA_XENFB) { if (vga_interface_type == VGA_XENFB) {
xen_config_dev_vfb(0, "vnc"); xen_config_dev_vfb(0, "vnc");
xen_config_dev_vkbd(0); xen_config_dev_vkbd(0);
vga_interface_created = true;
} }
/* configure disks */ /* configure disks */

View file

@ -34,6 +34,7 @@ typedef enum {
} VGAInterfaceType; } VGAInterfaceType;
extern int vga_interface_type; extern int vga_interface_type;
extern bool vga_interface_created;
extern int graphic_width; extern int graphic_width;
extern int graphic_height; extern int graphic_height;

View file

@ -40,6 +40,7 @@ int nb_nics;
NICInfo nd_table[MAX_NICS]; NICInfo nd_table[MAX_NICS];
int autostart = 1; int autostart = 1;
int vga_interface_type = VGA_NONE; int vga_interface_type = VGA_NONE;
bool vga_interface_created;
Chardev *parallel_hds[MAX_PARALLEL_PORTS]; Chardev *parallel_hds[MAX_PARALLEL_PORTS];
int win2k_install_hack; int win2k_install_hack;
int singlestep; int singlestep;

View file

@ -1353,6 +1353,7 @@ static void qemu_disable_default_devices(void)
if (!vga_model && !default_vga) { if (!vga_model && !default_vga) {
vga_interface_type = VGA_DEVICE; vga_interface_type = VGA_DEVICE;
vga_interface_created = true;
} }
if (!has_defaults || machine_class->no_serial) { if (!has_defaults || machine_class->no_serial) {
default_serial = 0; default_serial = 0;
@ -2736,6 +2737,12 @@ static void qemu_machine_creation_done(void)
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) { if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
exit(1); exit(1);
} }
if (!vga_interface_created && !default_vga &&
vga_interface_type != VGA_NONE) {
warn_report("A -vga option was passed but this machine "
"type does not use that option; "
"No VGA device has been created");
}
} }
void qmp_x_exit_preconfig(Error **errp) void qmp_x_exit_preconfig(Error **errp)