diff options
author | Gerd Hoffmann | 2020-04-29 13:52:34 +0200 |
---|---|---|
committer | Gerd Hoffmann | 2020-05-18 15:43:35 +0200 |
commit | 19aaee2a65a26693fe0a30b5a0746f967774e278 (patch) | |
tree | 81ac04311310b6792cbbfa1f0b22d538bd4b6cd3 | |
parent | ramfb: drop leftover debug message (diff) | |
download | qemu-19aaee2a65a26693fe0a30b5a0746f967774e278.tar.gz qemu-19aaee2a65a26693fe0a30b5a0746f967774e278.tar.xz qemu-19aaee2a65a26693fe0a30b5a0746f967774e278.zip |
ramfb: don't update RAMFBState on errors
Store width & height & surface in local variables. Update RAMFBState
with the new values only in case the ramfb_create_display_surface() call
succeeds.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Message-id: 20200429115236.28709-5-kraxel@redhat.com
-rw-r--r-- | hw/display/ramfb.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index 228defee56..1a20bdec41 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -71,18 +71,26 @@ static DisplaySurface *ramfb_create_display_surface(int width, int height, static void ramfb_fw_cfg_write(void *dev, off_t offset, size_t len) { RAMFBState *s = dev; - uint32_t fourcc, format; + DisplaySurface *surface; + uint32_t fourcc, format, width, height; hwaddr stride, addr; - s->width = be32_to_cpu(s->cfg.width); - s->height = be32_to_cpu(s->cfg.height); - stride = be32_to_cpu(s->cfg.stride); - fourcc = be32_to_cpu(s->cfg.fourcc); - addr = be64_to_cpu(s->cfg.addr); - format = qemu_drm_format_to_pixman(fourcc); + width = be32_to_cpu(s->cfg.width); + height = be32_to_cpu(s->cfg.height); + stride = be32_to_cpu(s->cfg.stride); + fourcc = be32_to_cpu(s->cfg.fourcc); + addr = be64_to_cpu(s->cfg.addr); + format = qemu_drm_format_to_pixman(fourcc); + + surface = ramfb_create_display_surface(width, height, + format, stride, addr); + if (!surface) { + return; + } - s->ds = ramfb_create_display_surface(s->width, s->height, - format, stride, addr); + s->width = width; + s->height = height; + s->ds = surface; } void ramfb_display_update(QemuConsole *con, RAMFBState *s) |