[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 20/22] ramfb: add migration support
|
From: |
Cédric Le Goater |
|
Subject: |
[PULL 20/22] ramfb: add migration support |
|
Date: |
Wed, 18 Oct 2023 11:45:29 +0200 |
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Implementing RAMFB migration is quite straightforward. One caveat is to
treat the whole RAMFBCfg as a blob, since that's what is exposed to the
guest directly. This avoid having to fiddle with endianness issues if we
were to migrate fields individually as integers.
The devices using RAMFB will have to include ramfb_vmstate in their
migration description.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
---
include/hw/display/ramfb.h | 4 ++++
hw/display/ramfb.c | 19 +++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/include/hw/display/ramfb.h b/include/hw/display/ramfb.h
index
b33a2c467b28824dd4aa392b9e3d76b8cdaa7673..a7e00191445e17522e978c50e135ad2c722dafc7
100644
--- a/include/hw/display/ramfb.h
+++ b/include/hw/display/ramfb.h
@@ -1,11 +1,15 @@
#ifndef RAMFB_H
#define RAMFB_H
+#include "migration/vmstate.h"
+
/* ramfb.c */
typedef struct RAMFBState RAMFBState;
void ramfb_display_update(QemuConsole *con, RAMFBState *s);
RAMFBState *ramfb_setup(Error **errp);
+extern const VMStateDescription ramfb_vmstate;
+
/* ramfb-standalone.c */
#define TYPE_RAMFB_DEVICE "ramfb"
diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c
index
c2b002d53480c14e48a07880d3c20969dccb52ed..477ef7272ab71a279ad8ed8a6dc59e1f66b778f9
100644
--- a/hw/display/ramfb.c
+++ b/hw/display/ramfb.c
@@ -28,6 +28,8 @@ struct QEMU_PACKED RAMFBCfg {
uint32_t stride;
};
+typedef struct RAMFBCfg RAMFBCfg;
+
struct RAMFBState {
DisplaySurface *ds;
uint32_t width, height;
@@ -116,6 +118,23 @@ void ramfb_display_update(QemuConsole *con, RAMFBState *s)
dpy_gfx_update_full(con);
}
+static int ramfb_post_load(void *opaque, int version_id)
+{
+ ramfb_fw_cfg_write(opaque, 0, 0);
+ return 0;
+}
+
+const VMStateDescription ramfb_vmstate = {
+ .name = "ramfb",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .post_load = ramfb_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_BUFFER_UNSAFE(cfg, RAMFBState, 0, sizeof(RAMFBCfg)),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
RAMFBState *ramfb_setup(Error **errp)
{
FWCfgState *fw_cfg = fw_cfg_find();
--
2.41.0
- [PULL 03/22] vfio/common: Move IOMMU agnostic helpers to a separate file, (continued)
- [PULL 03/22] vfio/common: Move IOMMU agnostic helpers to a separate file, Cédric Le Goater, 2023/10/18
- [PULL 12/22] vfio/common: Introduce a per container device list, Cédric Le Goater, 2023/10/18
- [PULL 17/22] vfio/ap: Remove pointless apdev variable, Cédric Le Goater, 2023/10/18
- [PULL 11/22] vfio/common: Move VFIO reset handler registration to a group agnostic function, Cédric Le Goater, 2023/10/18
- [PULL 14/22] vfio/common: Introduce a global VFIODevice list, Cédric Le Goater, 2023/10/18
- [PULL 08/22] vfio/platform: Use vfio_[attach/detach]_device, Cédric Le Goater, 2023/10/18
- [PULL 09/22] vfio/ap: Use vfio_[attach/detach]_device, Cédric Le Goater, 2023/10/18
- [PULL 10/22] vfio/ccw: Use vfio_[attach/detach]_device, Cédric Le Goater, 2023/10/18
- [PULL 18/22] vfio/ccw: Remove redundant definition of TYPE_VFIO_CCW, Cédric Le Goater, 2023/10/18
- [PULL 19/22] vfio/pci: Remove vfio_detach_device from vfio_realize error path, Cédric Le Goater, 2023/10/18
- [PULL 20/22] ramfb: add migration support,
Cédric Le Goater <=
- [PULL 15/22] vfio/common: Move legacy VFIO backend code into separate container.c, Cédric Le Goater, 2023/10/18
- [PULL 22/22] hw/vfio: add ramfb migration support, Cédric Le Goater, 2023/10/18
- [PULL 21/22] ramfb-standalone: add migration support, Cédric Le Goater, 2023/10/18
- Re: [PULL 00/22] vfio queue, Stefan Hajnoczi, 2023/10/18