mirror of https://gitee.com/openkylin/qemu.git
virtio-blk: cleanup: init and exit functions.
As all virtio-blk-* are switched to the new API, we can remove the separate init/exit for the old API. Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1363624648-16906-10-git-send-email-fred.konrad@greensocs.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
3400c45504
commit
05ff686536
|
@ -630,102 +630,59 @@ void virtio_blk_set_conf(DeviceState *dev, VirtIOBlkConf *blk)
|
||||||
memcpy(&(s->blk), blk, sizeof(struct VirtIOBlkConf));
|
memcpy(&(s->blk), blk, sizeof(struct VirtIOBlkConf));
|
||||||
}
|
}
|
||||||
|
|
||||||
static VirtIODevice *virtio_blk_common_init(DeviceState *dev,
|
static int virtio_blk_device_init(VirtIODevice *vdev)
|
||||||
VirtIOBlkConf *blk, VirtIOBlock **ps)
|
|
||||||
{
|
{
|
||||||
VirtIOBlock *s = *ps;
|
DeviceState *qdev = DEVICE(vdev);
|
||||||
|
VirtIOBlock *s = VIRTIO_BLK(vdev);
|
||||||
|
VirtIOBlkConf *blk = &(s->blk);
|
||||||
static int virtio_blk_id;
|
static int virtio_blk_id;
|
||||||
|
|
||||||
if (!blk->conf.bs) {
|
if (!blk->conf.bs) {
|
||||||
error_report("drive property not set");
|
error_report("drive property not set");
|
||||||
return NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!bdrv_is_inserted(blk->conf.bs)) {
|
if (!bdrv_is_inserted(blk->conf.bs)) {
|
||||||
error_report("Device needs media, but drive is empty");
|
error_report("Device needs media, but drive is empty");
|
||||||
return NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
blkconf_serial(&blk->conf, &blk->serial);
|
blkconf_serial(&blk->conf, &blk->serial);
|
||||||
if (blkconf_geometry(&blk->conf, NULL, 65535, 255, 255) < 0) {
|
if (blkconf_geometry(&blk->conf, NULL, 65535, 255, 255) < 0) {
|
||||||
return NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
virtio_init(vdev, "virtio-blk", VIRTIO_ID_BLOCK,
|
||||||
* We have two cases here: the old virtio-blk-pci device, and the
|
sizeof(struct virtio_blk_config));
|
||||||
* refactored virtio-blk.
|
|
||||||
*/
|
|
||||||
if (s == NULL) {
|
|
||||||
/* virtio-blk-pci */
|
|
||||||
s = (VirtIOBlock *)virtio_common_init("virtio-blk", VIRTIO_ID_BLOCK,
|
|
||||||
sizeof(struct virtio_blk_config),
|
|
||||||
sizeof(VirtIOBlock));
|
|
||||||
} else {
|
|
||||||
/* virtio-blk */
|
|
||||||
virtio_init(VIRTIO_DEVICE(s), "virtio-blk", VIRTIO_ID_BLOCK,
|
|
||||||
sizeof(struct virtio_blk_config));
|
|
||||||
}
|
|
||||||
|
|
||||||
s->vdev.get_config = virtio_blk_update_config;
|
vdev->get_config = virtio_blk_update_config;
|
||||||
s->vdev.set_config = virtio_blk_set_config;
|
vdev->set_config = virtio_blk_set_config;
|
||||||
s->vdev.get_features = virtio_blk_get_features;
|
vdev->get_features = virtio_blk_get_features;
|
||||||
s->vdev.set_status = virtio_blk_set_status;
|
vdev->set_status = virtio_blk_set_status;
|
||||||
s->vdev.reset = virtio_blk_reset;
|
vdev->reset = virtio_blk_reset;
|
||||||
s->bs = blk->conf.bs;
|
s->bs = blk->conf.bs;
|
||||||
s->conf = &blk->conf;
|
s->conf = &blk->conf;
|
||||||
memcpy(&(s->blk), blk, sizeof(struct VirtIOBlkConf));
|
memcpy(&(s->blk), blk, sizeof(struct VirtIOBlkConf));
|
||||||
s->rq = NULL;
|
s->rq = NULL;
|
||||||
s->sector_mask = (s->conf->logical_block_size / BDRV_SECTOR_SIZE) - 1;
|
s->sector_mask = (s->conf->logical_block_size / BDRV_SECTOR_SIZE) - 1;
|
||||||
|
|
||||||
s->vq = virtio_add_queue(&s->vdev, 128, virtio_blk_handle_output);
|
s->vq = virtio_add_queue(vdev, 128, virtio_blk_handle_output);
|
||||||
#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
|
#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
|
||||||
if (!virtio_blk_data_plane_create(&s->vdev, blk, &s->dataplane)) {
|
if (!virtio_blk_data_plane_create(vdev, blk, &s->dataplane)) {
|
||||||
virtio_cleanup(&s->vdev);
|
virtio_cleanup(vdev);
|
||||||
return NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
s->change = qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
|
s->change = qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
|
||||||
s->qdev = dev;
|
s->qdev = qdev;
|
||||||
register_savevm(dev, "virtio-blk", virtio_blk_id++, 2,
|
register_savevm(qdev, "virtio-blk", virtio_blk_id++, 2,
|
||||||
virtio_blk_save, virtio_blk_load, s);
|
virtio_blk_save, virtio_blk_load, s);
|
||||||
bdrv_set_dev_ops(s->bs, &virtio_block_ops, s);
|
bdrv_set_dev_ops(s->bs, &virtio_block_ops, s);
|
||||||
bdrv_set_buffer_alignment(s->bs, s->conf->logical_block_size);
|
bdrv_set_buffer_alignment(s->bs, s->conf->logical_block_size);
|
||||||
|
|
||||||
bdrv_iostatus_enable(s->bs);
|
bdrv_iostatus_enable(s->bs);
|
||||||
add_boot_device_path(s->conf->bootindex, dev, "/disk@0,0");
|
|
||||||
|
|
||||||
return &s->vdev;
|
add_boot_device_path(s->conf->bootindex, qdev, "/disk@0,0");
|
||||||
}
|
|
||||||
|
|
||||||
VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk)
|
|
||||||
{
|
|
||||||
VirtIOBlock *s = NULL;
|
|
||||||
return virtio_blk_common_init(dev, blk, &s);
|
|
||||||
}
|
|
||||||
|
|
||||||
void virtio_blk_exit(VirtIODevice *vdev)
|
|
||||||
{
|
|
||||||
VirtIOBlock *s = to_virtio_blk(vdev);
|
|
||||||
|
|
||||||
#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE
|
|
||||||
virtio_blk_data_plane_destroy(s->dataplane);
|
|
||||||
s->dataplane = NULL;
|
|
||||||
#endif
|
|
||||||
qemu_del_vm_change_state_handler(s->change);
|
|
||||||
unregister_savevm(s->qdev, "virtio-blk", s);
|
|
||||||
blockdev_mark_auto_del(s->bs);
|
|
||||||
virtio_cleanup(vdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int virtio_blk_device_init(VirtIODevice *vdev)
|
|
||||||
{
|
|
||||||
DeviceState *qdev = DEVICE(vdev);
|
|
||||||
VirtIOBlock *s = VIRTIO_BLK(vdev);
|
|
||||||
VirtIOBlkConf *blk = &(s->blk);
|
|
||||||
if (virtio_blk_common_init(qdev, blk, &s) == NULL) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -240,7 +240,6 @@ void virtio_bind_device(VirtIODevice *vdev, const VirtIOBindings *binding,
|
||||||
|
|
||||||
/* Base devices. */
|
/* Base devices. */
|
||||||
typedef struct VirtIOBlkConf VirtIOBlkConf;
|
typedef struct VirtIOBlkConf VirtIOBlkConf;
|
||||||
VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk);
|
|
||||||
struct virtio_net_conf;
|
struct virtio_net_conf;
|
||||||
VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf,
|
VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf,
|
||||||
struct virtio_net_conf *net,
|
struct virtio_net_conf *net,
|
||||||
|
@ -258,7 +257,6 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf);
|
||||||
|
|
||||||
|
|
||||||
void virtio_net_exit(VirtIODevice *vdev);
|
void virtio_net_exit(VirtIODevice *vdev);
|
||||||
void virtio_blk_exit(VirtIODevice *vdev);
|
|
||||||
void virtio_serial_exit(VirtIODevice *vdev);
|
void virtio_serial_exit(VirtIODevice *vdev);
|
||||||
void virtio_balloon_exit(VirtIODevice *vdev);
|
void virtio_balloon_exit(VirtIODevice *vdev);
|
||||||
void virtio_scsi_exit(VirtIODevice *vdev);
|
void virtio_scsi_exit(VirtIODevice *vdev);
|
||||||
|
|
Loading…
Reference in New Issue