virtio-ccw: Convert to realize()
Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <1425045219-19958-1-git-send-email-armbru@redhat.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
f35dd56651
commit
5e5ced386a
@ -607,7 +607,8 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
static void virtio_ccw_device_realize(VirtioCcwDevice *dev,
|
||||
VirtIODevice *vdev, Error **errp)
|
||||
{
|
||||
unsigned int cssid = 0;
|
||||
unsigned int ssid = 0;
|
||||
@ -616,7 +617,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
bool have_devno = false;
|
||||
bool found = false;
|
||||
SubchDev *sch;
|
||||
int ret;
|
||||
int num;
|
||||
DeviceState *parent = DEVICE(dev);
|
||||
|
||||
@ -639,21 +639,19 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
num = sscanf(dev->bus_id, "%x.%x.%04x", &cssid, &ssid, &devno);
|
||||
if (num == 3) {
|
||||
if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) {
|
||||
ret = -EINVAL;
|
||||
error_report("Invalid cssid or ssid: cssid %x, ssid %x",
|
||||
cssid, ssid);
|
||||
error_setg(errp, "Invalid cssid or ssid: cssid %x, ssid %x",
|
||||
cssid, ssid);
|
||||
goto out_err;
|
||||
}
|
||||
/* Enforce use of virtual cssid. */
|
||||
if (cssid != VIRTUAL_CSSID) {
|
||||
ret = -EINVAL;
|
||||
error_report("cssid %x not valid for virtio devices", cssid);
|
||||
error_setg(errp, "cssid %x not valid for virtio devices",
|
||||
cssid);
|
||||
goto out_err;
|
||||
}
|
||||
if (css_devno_used(cssid, ssid, devno)) {
|
||||
ret = -EEXIST;
|
||||
error_report("Device %x.%x.%04x already exists", cssid, ssid,
|
||||
devno);
|
||||
error_setg(errp, "Device %x.%x.%04x already exists",
|
||||
cssid, ssid, devno);
|
||||
goto out_err;
|
||||
}
|
||||
sch->cssid = cssid;
|
||||
@ -661,8 +659,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
sch->devno = devno;
|
||||
have_devno = true;
|
||||
} else {
|
||||
ret = -EINVAL;
|
||||
error_report("Malformed devno parameter '%s'", dev->bus_id);
|
||||
error_setg(errp, "Malformed devno parameter '%s'", dev->bus_id);
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
@ -678,9 +675,8 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
ret = -ENODEV;
|
||||
error_report("No free subchannel found for %x.%x.%04x", cssid, ssid,
|
||||
devno);
|
||||
error_setg(errp, "No free subchannel found for %x.%x.%04x",
|
||||
cssid, ssid, devno);
|
||||
goto out_err;
|
||||
}
|
||||
trace_virtio_ccw_new_device(cssid, ssid, schid, devno,
|
||||
@ -702,8 +698,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
if (devno == MAX_SCHID) {
|
||||
devno = 0;
|
||||
} else if (devno == schid - 1) {
|
||||
ret = -ENODEV;
|
||||
error_report("No free devno found");
|
||||
error_setg(errp, "No free devno found");
|
||||
goto out_err;
|
||||
} else {
|
||||
devno++;
|
||||
@ -720,8 +715,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
ret = -ENODEV;
|
||||
error_report("Virtual channel subsystem is full!");
|
||||
error_setg(errp, "Virtual channel subsystem is full!");
|
||||
goto out_err;
|
||||
}
|
||||
trace_virtio_ccw_new_device(cssid, ssid, schid, devno,
|
||||
@ -748,12 +742,11 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
|
||||
|
||||
css_generate_sch_crws(sch->cssid, sch->ssid, sch->schid,
|
||||
parent->hotplugged, 1);
|
||||
return 0;
|
||||
return;
|
||||
|
||||
out_err:
|
||||
dev->sch = NULL;
|
||||
g_free(sch);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int virtio_ccw_exit(VirtioCcwDevice *dev)
|
||||
@ -771,21 +764,24 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
DeviceState *qdev = DEVICE(ccw_dev);
|
||||
VirtIONetCcw *dev = VIRTIO_NET_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
virtio_net_set_config_size(&dev->vdev, ccw_dev->host_features[0]);
|
||||
virtio_net_set_netclient_name(&dev->vdev, qdev->id,
|
||||
object_get_typename(OBJECT(qdev)));
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
static void virtio_ccw_net_instance_init(Object *obj)
|
||||
@ -798,16 +794,20 @@ static void virtio_ccw_net_instance_init(Object *obj)
|
||||
"bootindex", &error_abort);
|
||||
}
|
||||
|
||||
static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_blk_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
static void virtio_ccw_blk_instance_init(Object *obj)
|
||||
@ -822,11 +822,12 @@ static void virtio_ccw_blk_instance_init(Object *obj)
|
||||
"bootindex", &error_abort);
|
||||
}
|
||||
|
||||
static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_serial_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
DeviceState *proxy = DEVICE(ccw_dev);
|
||||
Error *err = NULL;
|
||||
char *bus_name;
|
||||
|
||||
/*
|
||||
@ -840,11 +841,13 @@ static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
|
||||
}
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
|
||||
@ -856,17 +859,20 @@ static void virtio_ccw_serial_instance_init(Object *obj)
|
||||
TYPE_VIRTIO_SERIAL);
|
||||
}
|
||||
|
||||
static int virtio_ccw_balloon_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_balloon_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VirtIOBalloonCcw *dev = VIRTIO_BALLOON_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
static void balloon_ccw_stats_get_all(Object *obj, struct Visitor *v,
|
||||
@ -909,11 +915,12 @@ static void virtio_ccw_balloon_instance_init(Object *obj)
|
||||
NULL, dev, NULL);
|
||||
}
|
||||
|
||||
static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_scsi_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
DeviceState *qdev = DEVICE(ccw_dev);
|
||||
Error *err = NULL;
|
||||
char *bus_name;
|
||||
|
||||
/*
|
||||
@ -927,11 +934,13 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
|
||||
}
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
static void virtio_ccw_scsi_instance_init(Object *obj)
|
||||
@ -945,17 +954,20 @@ static void virtio_ccw_scsi_instance_init(Object *obj)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_VHOST_SCSI
|
||||
static int vhost_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
|
||||
static void vhost_ccw_scsi_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VHostSCSICcw *dev = VHOST_SCSI_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
static void vhost_ccw_scsi_instance_init(Object *obj)
|
||||
@ -967,21 +979,24 @@ static void vhost_ccw_scsi_instance_init(Object *obj)
|
||||
}
|
||||
#endif
|
||||
|
||||
static int virtio_ccw_rng_init(VirtioCcwDevice *ccw_dev)
|
||||
static void virtio_ccw_rng_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VirtIORNGCcw *dev = VIRTIO_RNG_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
if (qdev_init(vdev) < 0) {
|
||||
return -1;
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
object_property_set_link(OBJECT(dev),
|
||||
OBJECT(dev->vdev.conf.rng), "rng",
|
||||
NULL);
|
||||
|
||||
return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
|
||||
virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
|
||||
}
|
||||
|
||||
/* DeviceState to VirtioCcwDevice. Note: used on datapath,
|
||||
@ -1391,7 +1406,7 @@ static void virtio_ccw_net_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_net_init;
|
||||
k->realize = virtio_ccw_net_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_net_properties;
|
||||
@ -1417,7 +1432,7 @@ static void virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_blk_init;
|
||||
k->realize = virtio_ccw_blk_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_blk_properties;
|
||||
@ -1443,7 +1458,7 @@ static void virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_serial_init;
|
||||
k->realize = virtio_ccw_serial_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_serial_properties;
|
||||
@ -1469,7 +1484,7 @@ static void virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_balloon_init;
|
||||
k->realize = virtio_ccw_balloon_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_balloon_properties;
|
||||
@ -1496,7 +1511,7 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_scsi_init;
|
||||
k->realize = virtio_ccw_scsi_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_scsi_properties;
|
||||
@ -1521,7 +1536,7 @@ static void vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = vhost_ccw_scsi_init;
|
||||
k->realize = vhost_ccw_scsi_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = vhost_ccw_scsi_properties;
|
||||
@ -1558,7 +1573,7 @@ static void virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->init = virtio_ccw_rng_init;
|
||||
k->realize = virtio_ccw_rng_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
dc->props = virtio_ccw_rng_properties;
|
||||
@ -1572,14 +1587,13 @@ static const TypeInfo virtio_ccw_rng = {
|
||||
.class_init = virtio_ccw_rng_class_init,
|
||||
};
|
||||
|
||||
static int virtio_ccw_busdev_init(DeviceState *dev)
|
||||
static void virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
|
||||
VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
|
||||
|
||||
virtio_ccw_bus_new(&_dev->bus, sizeof(_dev->bus), _dev);
|
||||
|
||||
return _info->init(_dev);
|
||||
_info->realize(_dev, errp);
|
||||
}
|
||||
|
||||
static int virtio_ccw_busdev_exit(DeviceState *dev)
|
||||
@ -1622,7 +1636,7 @@ static void virtio_ccw_device_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->props = virtio_ccw_properties;
|
||||
dc->init = virtio_ccw_busdev_init;
|
||||
dc->realize = virtio_ccw_busdev_realize;
|
||||
dc->exit = virtio_ccw_busdev_exit;
|
||||
dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
|
||||
|
||||
typedef struct VirtIOCCWDeviceClass {
|
||||
DeviceClass parent_class;
|
||||
int (*init)(VirtioCcwDevice *dev);
|
||||
void (*realize)(VirtioCcwDevice *dev, Error **errp);
|
||||
int (*exit)(VirtioCcwDevice *dev);
|
||||
} VirtIOCCWDeviceClass;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user