virtio: prepare change VMSTATE_VIRTIO_DEVICE macro
In most cases the functions passed to VMSTATE_VIRTIO_DEVICE only call the virtio_load and virtio_save wrappers. Some include some pre- and post- massaging too. The massaging is better expressed as such in the VMStateDescription. Let us prepare for changing the semantic of the VMSTATE_VIRTIO_DEVICE macro so that it is more similar to the other VMSTATE_*_DEVICE macros in a sense that it is a field definition. The preprocessor conditionals are going to be removed as soon as every usage is converted to the new semantic. Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
0a73336d96
commit
1a665855d7
@ -1645,6 +1645,27 @@ void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size)
|
||||
virtio_save(VIRTIO_DEVICE(opaque), f);
|
||||
}
|
||||
|
||||
/* A wrapper for use as a VMState .put function */
|
||||
static void virtio_device_put(QEMUFile *f, void *opaque, size_t size)
|
||||
{
|
||||
virtio_save(VIRTIO_DEVICE(opaque), f);
|
||||
}
|
||||
|
||||
/* A wrapper for use as a VMState .get function */
|
||||
static int virtio_device_get(QEMUFile *f, void *opaque, size_t size)
|
||||
{
|
||||
VirtIODevice *vdev = VIRTIO_DEVICE(opaque);
|
||||
DeviceClass *dc = DEVICE_CLASS(VIRTIO_DEVICE_GET_CLASS(vdev));
|
||||
|
||||
return virtio_load(vdev, f, dc->vmsd->version_id);
|
||||
}
|
||||
|
||||
const VMStateInfo virtio_vmstate_info = {
|
||||
.name = "virtio",
|
||||
.get = virtio_device_get,
|
||||
.put = virtio_device_put,
|
||||
};
|
||||
|
||||
static int virtio_set_features_nocheck(VirtIODevice *vdev, uint64_t val)
|
||||
{
|
||||
VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
|
||||
|
@ -179,6 +179,20 @@ void virtio_notify(VirtIODevice *vdev, VirtQueue *vq);
|
||||
void virtio_save(VirtIODevice *vdev, QEMUFile *f);
|
||||
void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size);
|
||||
|
||||
extern const VMStateInfo virtio_vmstate_info;
|
||||
|
||||
#ifdef VMSTATE_VIRTIO_DEVICE_USE_NEW
|
||||
|
||||
#define VMSTATE_VIRTIO_DEVICE \
|
||||
{ \
|
||||
.name = "virtio", \
|
||||
.info = &virtio_vmstate_info, \
|
||||
.flags = VMS_SINGLE, \
|
||||
}
|
||||
|
||||
#else
|
||||
/* TODO remove conditional as soon as all users are converted */
|
||||
|
||||
#define VMSTATE_VIRTIO_DEVICE(devname, v, getf, putf) \
|
||||
static const VMStateDescription vmstate_virtio_ ## devname = { \
|
||||
.name = "virtio-" #devname , \
|
||||
@ -198,6 +212,8 @@ void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size);
|
||||
} \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id);
|
||||
|
||||
void virtio_notify_config(VirtIODevice *vdev);
|
||||
|
Loading…
Reference in New Issue
Block a user