mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
virtio: move vmstate change tracking to core
Move tracking vmstate change from virtio-net to virtio.c as it is going to be used by virito-blk and virtio-pci for the ioeventfd support. Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
3dbca8e6a7
commit
85cf2a8d74
3 changed files with 32 additions and 21 deletions
22
hw/virtio.c
22
hw/virtio.c
|
@ -743,11 +743,31 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
|
|||
|
||||
void virtio_cleanup(VirtIODevice *vdev)
|
||||
{
|
||||
qemu_del_vm_change_state_handler(vdev->vmstate);
|
||||
if (vdev->config)
|
||||
qemu_free(vdev->config);
|
||||
qemu_free(vdev->vq);
|
||||
}
|
||||
|
||||
static void virtio_vmstate_change(void *opaque, int running, int reason)
|
||||
{
|
||||
VirtIODevice *vdev = opaque;
|
||||
bool backend_run = running && (vdev->status & VIRTIO_CONFIG_S_DRIVER_OK);
|
||||
vdev->vm_running = running;
|
||||
|
||||
if (backend_run) {
|
||||
virtio_set_status(vdev, vdev->status);
|
||||
}
|
||||
|
||||
if (vdev->binding->vmstate_change) {
|
||||
vdev->binding->vmstate_change(vdev->binding_opaque, backend_run);
|
||||
}
|
||||
|
||||
if (!backend_run) {
|
||||
virtio_set_status(vdev, vdev->status);
|
||||
}
|
||||
}
|
||||
|
||||
VirtIODevice *virtio_common_init(const char *name, uint16_t device_id,
|
||||
size_t config_size, size_t struct_size)
|
||||
{
|
||||
|
@ -774,6 +794,8 @@ VirtIODevice *virtio_common_init(const char *name, uint16_t device_id,
|
|||
else
|
||||
vdev->config = NULL;
|
||||
|
||||
vdev->vmstate = qemu_add_vm_change_state_handler(virtio_vmstate_change, vdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue