From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37619) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPHKh-0003DY-UP for qemu-devel@nongnu.org; Mon, 18 Jul 2016 18:48:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bPHKg-0006UD-0O for qemu-devel@nongnu.org; Mon, 18 Jul 2016 18:48:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42667) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bPHKf-0006U9-OO for qemu-devel@nongnu.org; Mon, 18 Jul 2016 18:48:13 -0400 Date: Tue, 19 Jul 2016 01:48:09 +0300 From: "Michael S. Tsirkin" Message-ID: <20160719014809-mutt-send-email-mst@redhat.com> References: <1468881010-27229-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1468881010-27229-1-git-send-email-mst@redhat.com> Subject: [Qemu-devel] [PULL 53/55] virtio-gpu: Use migrate_add_blocker for virgl migration blocking List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , "Dr. David Alan Gilbert" , Cornelia Huck , Gerd Hoffmann From: "Dr. David Alan Gilbert" virgl conditionally registers a vmstate as unmigratable when virgl is enabled; instead use the migrate_add_blocker mechanism. Signed-off-by: Dr. David Alan Gilbert Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Reviewed-by: Cornelia Huck Reviewed-by: Gerd Hoffmann --- include/hw/virtio/virtio-gpu.h | 2 ++ hw/display/virtio-gpu.c | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index 325354f..e4f424a 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -118,6 +118,8 @@ typedef struct VirtIOGPU { uint32_t req_3d; uint32_t bytes_3d; } stats; + + Error *migration_blocker; } VirtIOGPU; extern const GraphicHwOps virtio_gpu_ops; diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 929c3c8..cc87eb7 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -19,6 +19,7 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-bus.h" +#include "migration/migration.h" #include "qemu/log.h" #include "qapi/error.h" @@ -986,11 +987,6 @@ static const VMStateDescription vmstate_virtio_gpu_scanouts = { }, }; -static const VMStateDescription vmstate_virtio_gpu_unmigratable = { - .name = "virtio-gpu-with-virgl", - .unmigratable = 1, -}; - static void virtio_gpu_save(QEMUFile *f, void *opaque) { VirtIOGPU *g = opaque; @@ -1169,13 +1165,23 @@ 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); + error_setg(&g->migration_blocker, "virgl is not yet migratable"); + migrate_add_blocker(g->migration_blocker); } else { register_savevm(qdev, "virtio-gpu", -1, VIRTIO_GPU_VM_VERSION, virtio_gpu_save, virtio_gpu_load, g); } } +static void virtio_gpu_device_unrealize(DeviceState *qdev, Error **errp) +{ + VirtIOGPU *g = VIRTIO_GPU(qdev); + if (g->migration_blocker) { + migrate_del_blocker(g->migration_blocker); + error_free(g->migration_blocker); + } +} + static void virtio_gpu_instance_init(Object *obj) { } @@ -1237,6 +1243,7 @@ static void virtio_gpu_class_init(ObjectClass *klass, void *data) VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); vdc->realize = virtio_gpu_device_realize; + vdc->unrealize = virtio_gpu_device_unrealize; vdc->get_config = virtio_gpu_get_config; vdc->set_config = virtio_gpu_set_config; vdc->get_features = virtio_gpu_get_features; -- MST