> @@ -1170,9 +1166,6 @@ static void virtio_gpu_device_realize(DeviceState > *qdev, Error **errp) > > if (virtio_gpu_virgl_enabled(g->conf)) { > vmstate_register(qdev, -1, &vmstate_virtio_gpu_unmigratable, g); > - } else { > - register_savevm(qdev, "virtio-gpu", -1, VIRTIO_GPU_VM_VERSION, > - virtio_gpu_save, virtio_gpu_load, g); > } > } > > @@ -1220,6 +1213,9 @@ static void virtio_gpu_reset(VirtIODevice *vdev) > #endif > } > > +VMSTATE_VIRTIO_DEVICE(gpu, VIRTIO_GPU_VM_VERSION, virtio_gpu_load, > + virtio_gpu_save); > + > static Property virtio_gpu_properties[] = { > DEFINE_PROP_UINT32("max_outputs", VirtIOGPU, conf.max_outputs, 1), > #ifdef CONFIG_VIRGL > @@ -1245,6 +1241,7 @@ static void virtio_gpu_class_init(ObjectClass *klass, > void *data) > vdc->reset = virtio_gpu_reset; > > dc->props = virtio_gpu_properties; > + dc->vmsd = &vmstate_virtio_gpu; > } > > static const TypeInfo virtio_gpu_info = {
This is confusing. I think for the virtio_gpu_virgl_enabled() case we install *two* vmstates now ... I think you should move up VMSTATE_VIRTIO_DEVICE, then simply replace the register_savevm() call with a vmstate_register() call. cheers, Gerd