kill drives_table
First step cleaning up the drives handling. This one does nothing but
removing drives_table[], still it became seriously big.
drive_get_index() is gone and is replaced by drives_get() which hands
out DriveInfo pointers instead of a table index. This needs adaption in
*tons* of places all over.
The drives are now maintained as linked list.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
diff --git a/hw/qdev.c b/hw/qdev.c
index 97a9665..479eb72 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -267,13 +267,10 @@
BlockDriverState *qdev_init_bdrv(DeviceState *dev, BlockInterfaceType type)
{
int unit = next_block_unit[type]++;
- int index;
+ DriveInfo *dinfo;
- index = drive_get_index(type, 0, unit);
- if (index == -1) {
- return NULL;
- }
- return drives_table[index].bdrv;
+ dinfo = drive_get(type, 0, unit);
+ return dinfo ? dinfo->bdrv : NULL;
}
BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
@@ -296,14 +293,14 @@
{
int bus = next_scsi_bus++;
int unit;
- int index;
+ DriveInfo *dinfo;
for (unit = 0; unit < MAX_SCSI_DEVS; unit++) {
- index = drive_get_index(IF_SCSI, bus, unit);
- if (index == -1) {
+ dinfo = drive_get(IF_SCSI, bus, unit);
+ if (!dinfo) {
continue;
}
- attach(host, drives_table[index].bdrv, unit);
+ attach(host, dinfo->bdrv, unit);
}
}