virtio-scsi: Convert to QOM realize
Signed-off-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									a8d57dfb28
								
							
						
					
					
						commit
						71a6520b83
					
				| @ -196,29 +196,31 @@ static void vhost_scsi_set_status(VirtIODevice *vdev, uint8_t val) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static int vhost_scsi_init(VirtIODevice *vdev) | ||||
| static void vhost_scsi_realize(DeviceState *dev, Error **errp) | ||||
| { | ||||
|     VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(vdev); | ||||
|     VHostSCSI *s = VHOST_SCSI(vdev); | ||||
|     VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev); | ||||
|     VHostSCSI *s = VHOST_SCSI(dev); | ||||
|     Error *err = NULL; | ||||
|     int vhostfd = -1; | ||||
|     int ret; | ||||
| 
 | ||||
|     if (!vs->conf.wwpn) { | ||||
|         error_report("vhost-scsi: missing wwpn\n"); | ||||
|         return -EINVAL; | ||||
|         error_setg(errp, "vhost-scsi: missing wwpn"); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (vs->conf.vhostfd) { | ||||
|         vhostfd = monitor_handle_fd_param(cur_mon, vs->conf.vhostfd); | ||||
|         if (vhostfd == -1) { | ||||
|             error_report("vhost-scsi: unable to parse vhostfd\n"); | ||||
|             return -EINVAL; | ||||
|             error_setg(errp, "vhost-scsi: unable to parse vhostfd"); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     ret = virtio_scsi_common_init(vs); | ||||
|     if (ret < 0) { | ||||
|         return ret; | ||||
|     virtio_scsi_common_realize(dev, &err); | ||||
|     if (err != NULL) { | ||||
|         error_propagate(errp, err); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     s->dev.nvqs = VHOST_SCSI_VQ_NUM_FIXED + vs->conf.num_queues; | ||||
| @ -227,17 +229,15 @@ static int vhost_scsi_init(VirtIODevice *vdev) | ||||
| 
 | ||||
|     ret = vhost_dev_init(&s->dev, vhostfd, "/dev/vhost-scsi", true); | ||||
|     if (ret < 0) { | ||||
|         error_report("vhost-scsi: vhost initialization failed: %s\n", | ||||
|                 strerror(-ret)); | ||||
|         return ret; | ||||
|         error_setg(errp, "vhost-scsi: vhost initialization failed: %s", | ||||
|                    strerror(-ret)); | ||||
|         return; | ||||
|     } | ||||
|     s->dev.backend_features = 0; | ||||
| 
 | ||||
|     error_setg(&s->migration_blocker, | ||||
|             "vhost-scsi does not support migration"); | ||||
|     migrate_add_blocker(s->migration_blocker); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| static void vhost_scsi_exit(VirtIODevice *vdev) | ||||
| @ -264,9 +264,10 @@ static void vhost_scsi_class_init(ObjectClass *klass, void *data) | ||||
| { | ||||
|     DeviceClass *dc = DEVICE_CLASS(klass); | ||||
|     VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); | ||||
| 
 | ||||
|     dc->props = vhost_scsi_properties; | ||||
|     set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); | ||||
|     vdc->init = vhost_scsi_init; | ||||
|     vdc->realize = vhost_scsi_realize; | ||||
|     vdc->exit = vhost_scsi_exit; | ||||
|     vdc->get_features = vhost_scsi_get_features; | ||||
|     vdc->set_config = vhost_scsi_set_config; | ||||
|  | ||||
| @ -589,9 +589,10 @@ static struct SCSIBusInfo virtio_scsi_scsi_info = { | ||||
|     .load_request = virtio_scsi_load_request, | ||||
| }; | ||||
| 
 | ||||
| int virtio_scsi_common_init(VirtIOSCSICommon *s) | ||||
| void virtio_scsi_common_realize(DeviceState *dev, Error **errp) | ||||
| { | ||||
|     VirtIODevice *vdev = VIRTIO_DEVICE(s); | ||||
|     VirtIODevice *vdev = VIRTIO_DEVICE(dev); | ||||
|     VirtIOSCSICommon *s = VIRTIO_SCSI_COMMON(dev); | ||||
|     int i; | ||||
| 
 | ||||
|     virtio_init(vdev, "virtio-scsi", VIRTIO_ID_SCSI, | ||||
| @ -609,22 +610,19 @@ int virtio_scsi_common_init(VirtIOSCSICommon *s) | ||||
|         s->cmd_vqs[i] = virtio_add_queue(vdev, VIRTIO_SCSI_VQ_SIZE, | ||||
|                                          virtio_scsi_handle_cmd); | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| static int virtio_scsi_device_init(VirtIODevice *vdev) | ||||
| static void virtio_scsi_device_realize(DeviceState *dev, Error **errp) | ||||
| { | ||||
|     DeviceState *dev = DEVICE(vdev); | ||||
|     VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev); | ||||
|     VirtIODevice *vdev = VIRTIO_DEVICE(dev); | ||||
|     VirtIOSCSI *s = VIRTIO_SCSI(dev); | ||||
|     static int virtio_scsi_id; | ||||
|     Error *err = NULL; | ||||
|     int ret; | ||||
| 
 | ||||
|     ret = virtio_scsi_common_init(vs); | ||||
|     if (ret < 0) { | ||||
|         return ret; | ||||
|     virtio_scsi_common_realize(dev, &err); | ||||
|     if (err != NULL) { | ||||
|         error_propagate(errp, err); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     scsi_bus_new(&s->bus, sizeof(s->bus), dev, | ||||
| @ -633,20 +631,19 @@ static int virtio_scsi_device_init(VirtIODevice *vdev) | ||||
|     if (!dev->hotplugged) { | ||||
|         scsi_bus_legacy_handle_cmdline(&s->bus, &err); | ||||
|         if (err != NULL) { | ||||
|             error_free(err); | ||||
|             return -1; | ||||
|             error_propagate(errp, err); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     register_savevm(dev, "virtio-scsi", virtio_scsi_id++, 1, | ||||
|                     virtio_scsi_save, virtio_scsi_load, s); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| void virtio_scsi_common_exit(VirtIOSCSICommon *vs) | ||||
| { | ||||
|     VirtIODevice *vdev = VIRTIO_DEVICE(vs); | ||||
|     VirtIODevice *vdev = VIRTIO_DEVICE(dev); | ||||
|     VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(dev); | ||||
| 
 | ||||
|     g_free(vs->cmd_vqs); | ||||
|     virtio_cleanup(vdev); | ||||
| @ -679,9 +676,10 @@ static void virtio_scsi_class_init(ObjectClass *klass, void *data) | ||||
| { | ||||
|     DeviceClass *dc = DEVICE_CLASS(klass); | ||||
|     VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); | ||||
| 
 | ||||
|     dc->props = virtio_scsi_properties; | ||||
|     set_bit(DEVICE_CATEGORY_STORAGE, dc->categories); | ||||
|     vdc->init = virtio_scsi_device_init; | ||||
|     vdc->realize = virtio_scsi_device_realize; | ||||
|     vdc->exit = virtio_scsi_device_exit; | ||||
|     vdc->set_config = virtio_scsi_set_config; | ||||
|     vdc->get_features = virtio_scsi_get_features; | ||||
|  | ||||
| @ -186,7 +186,7 @@ typedef struct { | ||||
|     DEFINE_PROP_BIT("param_change", _state, _feature_field,                    \ | ||||
|                                             VIRTIO_SCSI_F_CHANGE, true) | ||||
| 
 | ||||
| int virtio_scsi_common_init(VirtIOSCSICommon *vs); | ||||
| void virtio_scsi_common_realize(DeviceState *dev, Error **errp); | ||||
| void virtio_scsi_common_exit(VirtIOSCSICommon *vs); | ||||
| 
 | ||||
| #endif /* _QEMU_VIRTIO_SCSI_H */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Andreas Färber
						Andreas Färber