diff options
author | Peter Maydell | 2022-03-19 12:28:54 +0100 |
---|---|---|
committer | Peter Maydell | 2022-03-19 12:28:54 +0100 |
commit | 2058fdbe81e2985c226a026851dd26b146d3395c (patch) | |
tree | 2a9ad1887e77a9e0de8ff52ae28d7b5e23940f09 /hw/display/vga.c | |
parent | Merge tag 'trivial-branch-for-7.0-pull-request' of https://gitlab.com/laurent... (diff) | |
parent | hw/display/vga: Report a proper error when adding a 2nd ISA VGA (diff) | |
download | qemu-2058fdbe81e2985c226a026851dd26b146d3395c.tar.gz qemu-2058fdbe81e2985c226a026851dd26b146d3395c.tar.xz qemu-2058fdbe81e2985c226a026851dd26b146d3395c.zip |
Merge tag 'fixes-20220318-pull-request' of git://git.kraxel.org/qemu into staging
bugfixes for vga, audio, vnc
# gpg: Signature made Fri 18 Mar 2022 13:56:22 GMT
# gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full]
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full]
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full]
# Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138
* tag 'fixes-20220318-pull-request' of git://git.kraxel.org/qemu:
hw/display/vga: Report a proper error when adding a 2nd ISA VGA
hw/display: Allow vga_common_init() to return errors
hw/display/cirrus_vga: Clean up indentation in pci_cirrus_vga_realize()
audio/mixeng: Do not declare unused variables
ui: avoid unnecessary memory operations in vnc_refresh_server_surface()
ui/gtk: Ignore 2- and 3-button press events
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/display/vga.c')
-rw-r--r-- | hw/display/vga.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/hw/display/vga.c b/hw/display/vga.c index 9d1f66af40..a7a291fa20 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -2168,9 +2168,10 @@ static inline uint32_t uint_clamp(uint32_t val, uint32_t vmin, uint32_t vmax) return val; } -void vga_common_init(VGACommonState *s, Object *obj) +bool vga_common_init(VGACommonState *s, Object *obj, Error **errp) { int i, j, v, b; + Error *local_err = NULL; for(i = 0;i < 256; i++) { v = 0; @@ -2205,8 +2206,18 @@ void vga_common_init(VGACommonState *s, Object *obj) s->vbe_size_mask = s->vbe_size - 1; s->is_vbe_vmstate = 1; + + if (s->global_vmstate && qemu_ram_block_by_name("vga.vram")) { + error_setg(errp, "Only one global VGA device can be used at a time"); + return false; + } + memory_region_init_ram_nomigrate(&s->vram, obj, "vga.vram", s->vram_size, - &error_fatal); + &local_err); + if (local_err) { + error_propagate(errp, local_err); + return false; + } vmstate_register_ram(&s->vram, s->global_vmstate ? NULL : DEVICE(obj)); xen_register_framebuffer(&s->vram); s->vram_ptr = memory_region_get_ram_ptr(&s->vram); @@ -2237,6 +2248,8 @@ void vga_common_init(VGACommonState *s, Object *obj) s->default_endian_fb = false; #endif vga_dirty_log_start(s); + + return true; } static const MemoryRegionPortio vga_portio_list[] = { |