| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * vhost vsock ccw implementation | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This work is licensed under the terms of the GNU GPL, version 2 or (at | 
					
						
							|  |  |  |  * your option) any later version. See the COPYING file in the top-level | 
					
						
							|  |  |  |  * directory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "qemu/osdep.h"
 | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:51 +02:00
										 |  |  | #include "hw/qdev-properties.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | #include "hw/virtio/virtio.h"
 | 
					
						
							|  |  |  | #include "qapi/error.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-23 16:35:07 +02:00
										 |  |  | #include "qemu/module.h"
 | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | #include "virtio-ccw.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static Property vhost_vsock_ccw_properties[] = { | 
					
						
							|  |  |  |     DEFINE_PROP_UINT32("max_revision", VirtioCcwDevice, max_rev, | 
					
						
							|  |  |  |                        VIRTIO_CCW_MAX_REV), | 
					
						
							|  |  |  |     DEFINE_PROP_END_OF_LIST(), | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void vhost_vsock_ccw_realize(VirtioCcwDevice *ccw_dev, Error **errp) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     VHostVSockCCWState *dev = VHOST_VSOCK_CCW(ccw_dev); | 
					
						
							|  |  |  |     DeviceState *vdev = DEVICE(&dev->vdev); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												qdev: Convert uses of qdev_set_parent_bus() with Coccinelle
In addition to the qdev_create() patterns converted so far, we have a
qdev_set_parent_bus() pattern.  Mostly when we embed a device in a
parent device rather than allocating it on the heap.
This pattern also puts devices in the dangerous "no QOM parent, but
plugged into bus" state I explained in recent commit "qdev: New
qdev_new(), qdev_realize(), etc."
Apply same solution: convert to qdev_realize().  Coccinelle script:
    @@
    expression dev, bus, errp;
    symbol true;
    @@
    -    qdev_set_parent_bus(DEVICE(dev), bus);
         ...
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize(DEVICE(dev), bus, errp);
    @ depends on !(file in "qdev-monitor.c") && !(file in "hw/core/qdev.c")@
    expression dev, bus, errp;
    symbol true;
    @@
    -    qdev_set_parent_bus(dev, bus);
         ...
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize(dev, bus, errp);
    @@
    expression dev, bus;
    symbol true;
    @@
    -    qdev_set_parent_bus(DEVICE(dev), bus);
         ...
    -    qdev_init_nofail(DEVICE(dev));
    +    qdev_realize(DEVICE(dev), bus, &error_fatal);
Unconverted uses of qdev_set_parent_bus() remain.  They'll be
converted later in this series.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-12-armbru@redhat.com>
[Also convert new hw/virtio/vhost-user-vsock-pci.c]
											
										 
											2020-06-10 07:32:00 +02:00
										 |  |  |     qdev_realize(vdev, BUS(&ccw_dev->bus), errp); | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void vhost_vsock_ccw_class_init(ObjectClass *klass, void *data) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     DeviceClass *dc = DEVICE_CLASS(klass); | 
					
						
							|  |  |  |     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     k->realize = vhost_vsock_ccw_realize; | 
					
						
							|  |  |  |     set_bit(DEVICE_CATEGORY_MISC, dc->categories); | 
					
						
							| 
									
										
										
										
											2020-01-10 19:30:32 +04:00
										 |  |  |     device_class_set_props(dc, vhost_vsock_ccw_properties); | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void vhost_vsock_ccw_instance_init(Object *obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     VHostVSockCCWState *dev = VHOST_VSOCK_CCW(obj); | 
					
						
							| 
									
										
										
										
											2020-09-21 14:25:06 +02:00
										 |  |  |     VirtioCcwDevice *ccw_dev = VIRTIO_CCW_DEVICE(obj); | 
					
						
							|  |  |  |     VirtIODevice *virtio_dev; | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev), | 
					
						
							|  |  |  |                                 TYPE_VHOST_VSOCK); | 
					
						
							| 
									
										
										
										
											2020-09-21 14:25:06 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     virtio_dev = VIRTIO_DEVICE(&dev->vdev); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * To avoid migration issues, we force virtio version 1 only when | 
					
						
							|  |  |  |      * legacy check is enabled in the new machine types (>= 5.1). | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     if (!virtio_legacy_check_disabled(virtio_dev)) { | 
					
						
							|  |  |  |         ccw_dev->force_revision_1 = true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-07-25 14:20:22 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const TypeInfo vhost_vsock_ccw_info = { | 
					
						
							|  |  |  |     .name          = TYPE_VHOST_VSOCK_CCW, | 
					
						
							|  |  |  |     .parent        = TYPE_VIRTIO_CCW_DEVICE, | 
					
						
							|  |  |  |     .instance_size = sizeof(VHostVSockCCWState), | 
					
						
							|  |  |  |     .instance_init = vhost_vsock_ccw_instance_init, | 
					
						
							|  |  |  |     .class_init    = vhost_vsock_ccw_class_init, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void vhost_vsock_ccw_register(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     type_register_static(&vhost_vsock_ccw_info); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type_init(vhost_vsock_ccw_register) |