[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 01/10] macfb: add VMStateDescription for MacfbNubusState and M
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v3 01/10] macfb: add VMStateDescription for MacfbNubusState and MacfbSysBusState |
Date: |
Sat, 5 Mar 2022 15:55:21 +0000 |
Currently when QEMU tries to migrate the macfb framebuffer it crashes randomly
because the opaque provided by the DeviceClass vmsd property for both devices
is set to MacfbState rather than MacfbNubusState or MacfbSysBusState as
appropriate.
Resolve the issue by adding new VMStateDescriptions for MacfbNubusState and
MacfbSysBusState which embed the existing vmstate_macfb VMStateDescription
within them using VMSTATE_STRUCT.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
hw/display/macfb.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/hw/display/macfb.c b/hw/display/macfb.c
index c9b468c10e..66ceacf1ae 100644
--- a/hw/display/macfb.c
+++ b/hw/display/macfb.c
@@ -746,6 +746,16 @@ static Property macfb_sysbus_properties[] = {
DEFINE_PROP_END_OF_LIST(),
};
+static const VMStateDescription vmstate_macfb_sysbus = {
+ .name = "macfb-sysbus",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_STRUCT(macfb, MacfbSysBusState, 1, vmstate_macfb, MacfbState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static Property macfb_nubus_properties[] = {
DEFINE_PROP_UINT32("width", MacfbNubusState, macfb.width, 640),
DEFINE_PROP_UINT32("height", MacfbNubusState, macfb.height, 480),
@@ -755,6 +765,16 @@ static Property macfb_nubus_properties[] = {
DEFINE_PROP_END_OF_LIST(),
};
+static const VMStateDescription vmstate_macfb_nubus = {
+ .name = "macfb-nubus",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_STRUCT(macfb, MacfbNubusState, 1, vmstate_macfb, MacfbState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static void macfb_sysbus_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -762,7 +782,7 @@ static void macfb_sysbus_class_init(ObjectClass *klass,
void *data)
dc->realize = macfb_sysbus_realize;
dc->desc = "SysBus Macintosh framebuffer";
dc->reset = macfb_sysbus_reset;
- dc->vmsd = &vmstate_macfb;
+ dc->vmsd = &vmstate_macfb_sysbus;
device_class_set_props(dc, macfb_sysbus_properties);
}
@@ -777,7 +797,7 @@ static void macfb_nubus_class_init(ObjectClass *klass, void
*data)
&ndc->parent_unrealize);
dc->desc = "Nubus Macintosh framebuffer";
dc->reset = macfb_nubus_reset;
- dc->vmsd = &vmstate_macfb;
+ dc->vmsd = &vmstate_macfb_nubus;
set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
device_class_set_props(dc, macfb_nubus_properties);
}
--
2.20.1
- [PATCH v3 00/10] q800: migration fixes, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 01/10] macfb: add VMStateDescription for MacfbNubusState and MacfbSysBusState,
Mark Cave-Ayland <=
- [PATCH v3 02/10] macfb: don't use special irq_state and irq_mask variables in MacfbState, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 03/10] macfb: increase number of registers saved in MacfbState, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 04/10] macfb: add VMStateDescription fields for display type and VBL timer, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 05/10] macfb: set initial value of mode control registers in macfb_common_realize(), Mark Cave-Ayland, 2022/03/05
- [PATCH v3 06/10] esp: introduce esp_set_pdma_cb() function, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 07/10] esp: introduce esp_pdma_cb() function, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 09/10] esp: include the current PDMA callback in the migration stream, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 08/10] esp: convert ESPState pdma_cb from a function pointer to an integer, Mark Cave-Ayland, 2022/03/05
- [PATCH v3 10/10] esp: recreate ESPState current_req after migration, Mark Cave-Ayland, 2022/03/05