[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 01/12] macfb: handle errors that occur during realize
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v2 01/12] macfb: handle errors that occur during realize |
Date: |
Mon, 4 Oct 2021 22:19:17 +0100 |
Make sure any errors that occur within the macfb realize chain are detected
and handled correctly to prevent crashes and to ensure that error messages are
reported back to the user.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
hw/display/macfb.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/hw/display/macfb.c b/hw/display/macfb.c
index 76808b69cc..2ec25c5d6f 100644
--- a/hw/display/macfb.c
+++ b/hw/display/macfb.c
@@ -343,14 +343,14 @@ static const GraphicHwOps macfb_ops = {
.gfx_update = macfb_update_display,
};
-static void macfb_common_realize(DeviceState *dev, MacfbState *s, Error **errp)
+static bool macfb_common_realize(DeviceState *dev, MacfbState *s, Error **errp)
{
DisplaySurface *surface;
if (s->depth != 1 && s->depth != 2 && s->depth != 4 && s->depth != 8 &&
s->depth != 16 && s->depth != 24) {
error_setg(errp, "unknown guest depth %d", s->depth);
- return;
+ return false;
}
s->con = graphic_console_init(dev, 0, &macfb_ops, s);
@@ -359,18 +359,20 @@ static void macfb_common_realize(DeviceState *dev,
MacfbState *s, Error **errp)
if (surface_bits_per_pixel(surface) != 32) {
error_setg(errp, "unknown host depth %d",
surface_bits_per_pixel(surface));
- return;
+ return false;
}
memory_region_init_io(&s->mem_ctrl, OBJECT(dev), &macfb_ctrl_ops, s,
"macfb-ctrl", 0x1000);
memory_region_init_ram_nomigrate(&s->mem_vram, OBJECT(s), "macfb-vram",
- MACFB_VRAM_SIZE, errp);
+ MACFB_VRAM_SIZE, &error_abort);
s->vram = memory_region_get_ram_ptr(&s->mem_vram);
s->vram_bit_mask = MACFB_VRAM_SIZE - 1;
vmstate_register_ram(&s->mem_vram, dev);
memory_region_set_coalescing(&s->mem_vram);
+
+ return true;
}
static void macfb_sysbus_realize(DeviceState *dev, Error **errp)
@@ -378,7 +380,10 @@ static void macfb_sysbus_realize(DeviceState *dev, Error
**errp)
MacfbSysBusState *s = MACFB(dev);
MacfbState *ms = &s->macfb;
- macfb_common_realize(dev, ms, errp);
+ if (!macfb_common_realize(dev, ms, errp)) {
+ return;
+ }
+
sysbus_init_mmio(SYS_BUS_DEVICE(s), &ms->mem_ctrl);
sysbus_init_mmio(SYS_BUS_DEVICE(s), &ms->mem_vram);
}
@@ -391,8 +396,14 @@ static void macfb_nubus_realize(DeviceState *dev, Error
**errp)
MacfbState *ms = &s->macfb;
ndc->parent_realize(dev, errp);
+ if (*errp) {
+ return;
+ }
+
+ if (!macfb_common_realize(dev, ms, errp)) {
+ return;
+ }
- macfb_common_realize(dev, ms, errp);
memory_region_add_subregion(&nd->slot_mem, DAFB_BASE, &ms->mem_ctrl);
memory_region_add_subregion(&nd->slot_mem, VIDEO_BASE, &ms->mem_vram);
}
--
2.20.1
- [PATCH v2 00/12] macfb: fixes for booting MacOS, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 01/12] macfb: handle errors that occur during realize,
Mark Cave-Ayland <=
- [PATCH v2 02/12] macfb: fix invalid object reference in macfb_common_realize(), Mark Cave-Ayland, 2021/10/04
- [PATCH v2 03/12] macfb: fix overflow of color_palette array, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 04/12] macfb: use memory_region_init_ram() in macfb_common_realize() for the framebuffer, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 05/12] macfb: add trace events for reading and writing the control registers, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 06/12] macfb: implement mode sense to allow display type to be detected, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 07/12] macfb: add qdev property to specify display type, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 10/12] macfb: fix 24-bit RGB pixel encoding, Mark Cave-Ayland, 2021/10/04
- [PATCH v2 08/12] macfb: add common monitor modes supported by the MacOS toolbox ROM, Mark Cave-Ayland, 2021/10/04