Skip to content

Commit

Permalink
ide: ide-cd without drive property for empty drive
Browse files Browse the repository at this point in the history
This allows the creation of an empty ide-cd device without manually
creating a BlockBackend.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Acked-by: Eric Blake <eblake@redhat.com>
  • Loading branch information
kevmw committed Sep 5, 2016
1 parent e87d397 commit 67c75f3
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions hw/ide/qdev.c
Expand Up @@ -75,10 +75,6 @@ static int ide_qdev_init(DeviceState *qdev)
IDEDeviceClass *dc = IDE_DEVICE_GET_CLASS(dev);
IDEBus *bus = DO_UPCAST(IDEBus, qbus, qdev->parent_bus);

if (!dev->conf.blk) {
error_report("No drive specified");
goto err;
}
if (dev->unit == -1) {
dev->unit = bus->master ? 1 : 0;
}
Expand Down Expand Up @@ -158,6 +154,16 @@ static int ide_dev_initfn(IDEDevice *dev, IDEDriveKind kind)
IDEState *s = bus->ifs + dev->unit;
Error *err = NULL;

if (!dev->conf.blk) {
if (kind != IDE_CD) {
error_report("No drive specified");
return -1;
} else {
/* Anonymous BlockBackend for an empty drive */
dev->conf.blk = blk_new();
}
}

if (dev->conf.discard_granularity == -1) {
dev->conf.discard_granularity = 512;
} else if (dev->conf.discard_granularity &&
Expand Down Expand Up @@ -257,7 +263,11 @@ static int ide_cd_initfn(IDEDevice *dev)

static int ide_drive_initfn(IDEDevice *dev)
{
DriveInfo *dinfo = blk_legacy_dinfo(dev->conf.blk);
DriveInfo *dinfo = NULL;

if (dev->conf.blk) {
dinfo = blk_legacy_dinfo(dev->conf.blk);
}

return ide_dev_initfn(dev, dinfo && dinfo->media_cd ? IDE_CD : IDE_HD);
}
Expand Down

0 comments on commit 67c75f3

Please sign in to comment.