提交 8a502efd 编写于 作者: H Halil Pasic 提交者: Michael S. Tsirkin

virtio-gpu: convert VMSTATE_VIRTIO_DEVICE

Use the new VMSTATE_VIRTIO_DEVICE macro. The device virtio-gpu is
special because it actually does not adhere to the virtio migration
schema, because device state is last.
Signed-off-by: NHalil Pasic <pasic@linux.vnet.ibm.com>
Reviewed-by: NMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
上级 97eed24f
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
* See the COPYING file in the top-level directory. * See the COPYING file in the top-level directory.
*/ */
#define VMSTATE_VIRTIO_DEVICE_USE_NEW
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "qemu-common.h" #include "qemu-common.h"
#include "qemu/iov.h" #include "qemu/iov.h"
...@@ -990,12 +992,9 @@ static const VMStateDescription vmstate_virtio_gpu_scanouts = { ...@@ -990,12 +992,9 @@ static const VMStateDescription vmstate_virtio_gpu_scanouts = {
static void virtio_gpu_save(QEMUFile *f, void *opaque, size_t size) static void virtio_gpu_save(QEMUFile *f, void *opaque, size_t size)
{ {
VirtIOGPU *g = opaque; VirtIOGPU *g = opaque;
VirtIODevice *vdev = VIRTIO_DEVICE(g);
struct virtio_gpu_simple_resource *res; struct virtio_gpu_simple_resource *res;
int i; int i;
virtio_save(vdev, f);
/* in 2d mode we should never find unprocessed commands here */ /* in 2d mode we should never find unprocessed commands here */
assert(QTAILQ_EMPTY(&g->cmdq)); assert(QTAILQ_EMPTY(&g->cmdq));
...@@ -1020,16 +1019,10 @@ static void virtio_gpu_save(QEMUFile *f, void *opaque, size_t size) ...@@ -1020,16 +1019,10 @@ static void virtio_gpu_save(QEMUFile *f, void *opaque, size_t size)
static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size) static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size)
{ {
VirtIOGPU *g = opaque; VirtIOGPU *g = opaque;
VirtIODevice *vdev = VIRTIO_DEVICE(g);
struct virtio_gpu_simple_resource *res; struct virtio_gpu_simple_resource *res;
struct virtio_gpu_scanout *scanout; struct virtio_gpu_scanout *scanout;
uint32_t resource_id, pformat; uint32_t resource_id, pformat;
int i, ret; int i;
ret = virtio_load(vdev, f, VIRTIO_GPU_VM_VERSION);
if (ret) {
return ret;
}
resource_id = qemu_get_be32(f); resource_id = qemu_get_be32(f);
while (resource_id != 0) { while (resource_id != 0) {
...@@ -1219,8 +1212,32 @@ static void virtio_gpu_reset(VirtIODevice *vdev) ...@@ -1219,8 +1212,32 @@ static void virtio_gpu_reset(VirtIODevice *vdev)
#endif #endif
} }
VMSTATE_VIRTIO_DEVICE(gpu, VIRTIO_GPU_VM_VERSION, virtio_gpu_load, /*
virtio_gpu_save); * For historical reasons virtio_gpu does not adhere to virtio migration
* scheme as described in doc/virtio-migration.txt, in a sense that no
* save/load callback are provided to the core. Instead the device data
* is saved/loaded after the core data.
*
* Because of this we need a special vmsd.
*/
static const VMStateDescription vmstate_virtio_gpu = {
.name = "virtio-gpu",
.minimum_version_id = VIRTIO_GPU_VM_VERSION,
.version_id = VIRTIO_GPU_VM_VERSION,
.fields = (VMStateField[]) {
VMSTATE_VIRTIO_DEVICE /* core */,
{
.name = "virtio-gpu",
.info = &(const VMStateInfo) {
.name = "virtio-gpu",
.get = virtio_gpu_load,
.put = virtio_gpu_save,
},
.flags = VMS_SINGLE,
} /* device */,
VMSTATE_END_OF_LIST()
},
};
static Property virtio_gpu_properties[] = { static Property virtio_gpu_properties[] = {
DEFINE_PROP_UINT32("max_outputs", VirtIOGPU, conf.max_outputs, 1), DEFINE_PROP_UINT32("max_outputs", VirtIOGPU, conf.max_outputs, 1),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册