Message ID | 20210816123611.28183-1-jziviani@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] vga: don't abort when adding a duplicate isa-vga device | expand |
On 8/16/21 2:36 PM, Jose R. Ziviani wrote: > 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> > --- > hw/display/vga-isa.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c > index 90851e730b..1fba33b22b 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 (qemu_ram_block_by_name("vga.vram")) { > + error_setg(errp, "vga.vram is already registered"); Maybe "'isa-vga' device already registered" is easier to understand? (vga.vram is about the device model internal). Otherwise: Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > + return; > + } > + > s->global_vmstate = true; > vga_common_init(s, OBJECT(dev)); > s->legacy_address_space = isa_address_space(isadev); >
Hello Philippe! On 16/08/2021 10:01, Philippe Mathieu-Daudé wrote: > On 8/16/21 2:36 PM, Jose R. Ziviani wrote: >> 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> >> --- >> hw/display/vga-isa.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c >> index 90851e730b..1fba33b22b 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 (qemu_ram_block_by_name("vga.vram")) { >> + error_setg(errp, "vga.vram is already registered"); > Maybe "'isa-vga' device already registered" is easier to understand? > (vga.vram is about the device model internal). Much better message, sending a v3 with this improvement. Thank you! > > Otherwise: > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > >> + return; >> + } >> + >> s->global_vmstate = true; >> vga_common_init(s, OBJECT(dev)); >> s->legacy_address_space = isa_address_space(isadev); >>
diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index 90851e730b..1fba33b22b 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 (qemu_ram_block_by_name("vga.vram")) { + error_setg(errp, "vga.vram is already registered"); + return; + } + s->global_vmstate = true; vga_common_init(s, OBJECT(dev)); s->legacy_address_space = isa_address_space(isadev);
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> --- hw/display/vga-isa.c | 10 ++++++++++ 1 file changed, 10 insertions(+)