diff options
author | Jose R. Ziviani <jziviani@suse.de> | 2021-08-17 16:26:29 -0300 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2021-08-31 14:32:28 +0200 |
commit | 7852a77f598635a67a222b6c1463c8b46098aed2 (patch) | |
tree | 8101e5c096c53f2d64bc0f2e48d9f55d8c9b4a4c /hw | |
parent | b956577af1b88e950bf2aa5f77be6c8aee04e879 (diff) | |
download | qemu-7852a77f598635a67a222b6c1463c8b46098aed2.zip qemu-7852a77f598635a67a222b6c1463c8b46098aed2.tar.gz qemu-7852a77f598635a67a222b6c1463c8b46098aed2.tar.bz2 |
vga: don't abort when adding a duplicate isa-vga device
If users try to add an isa-vga device that was already registered,
still in command line, qemu will crash:
$ qemu-system-mips64el -M pica61 -device isa-vga
RAMBlock "vga.vram" already registered, abort!
Aborted (core dumped)
That particular board registers the device automaticaly, so it's
not obvious that a VGA device already exists. This patch changes
this behavior by displaying a message and exiting without crashing.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/44
Signed-off-by: Jose R. Ziviani <jziviani@suse.de>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20210817192629.12755-1-jziviani@suse.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/display/vga-isa.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index 90851e7..8cea84f 100644 --- a/hw/display/vga-isa.c +++ b/hw/display/vga-isa.c @@ -33,6 +33,7 @@ #include "hw/loader.h" #include "hw/qdev-properties.h" #include "qom/object.h" +#include "qapi/error.h" #define TYPE_ISA_VGA "isa-vga" OBJECT_DECLARE_SIMPLE_TYPE(ISAVGAState, ISA_VGA) @@ -61,6 +62,15 @@ static void vga_isa_realizefn(DeviceState *dev, Error **errp) MemoryRegion *vga_io_memory; const MemoryRegionPortio *vga_ports, *vbe_ports; + /* + * make sure this device is not being added twice, if so + * exit without crashing qemu + */ + if (object_resolve_path_type("", TYPE_ISA_VGA, NULL)) { + error_setg(errp, "at most one %s device is permitted", TYPE_ISA_VGA); + return; + } + s->global_vmstate = true; vga_common_init(s, OBJECT(dev)); s->legacy_address_space = isa_address_space(isadev); |