qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 7/8] blockdev: Store -drive option media in DriveInf


From: Markus Armbruster
Subject: [Qemu-devel] [PATCH 7/8] blockdev: Store -drive option media in DriveInfo
Date: Tue, 6 Jul 2010 14:37:48 +0200

Use it instead of bdrv_get_type_hint() to pick HD vs. CD for IDE, SCSI
and XEN drives.

Signed-off-by: Markus Armbruster <address@hidden>
---
 blockdev.c         |    1 +
 blockdev.h         |    1 +
 hw/ide/core.c      |    3 +--
 hw/ide/qdev.c      |   10 ++++------
 hw/scsi-disk.c     |    4 +++-
 hw/xen_devconfig.c |    2 +-
 6 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index cca3eec..02b4c22 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -437,6 +437,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi, 
int *fatal_error)
            break;
        case MEDIA_CDROM:
             bdrv_set_type_hint(dinfo->bdrv, BDRV_TYPE_CDROM);
+            dinfo->media_cd = 1;
            break;
        }
         break;
diff --git a/blockdev.h b/blockdev.h
index 37f3a01..2f3684c 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -32,6 +32,7 @@ typedef struct DriveInfo {
     int bus;
     int unit;
     int auto_del;               /* see blockdev_mark_auto_del() */
+    int media_cd;
     QemuOpts *opts;
     char serial[BLOCK_SERIAL_STRLEN + 1];
     QTAILQ_ENTRY(DriveInfo) next;
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 1287f11..e3ab22c 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -2694,8 +2694,7 @@ void ide_init2_with_non_qdev_drives(IDEBus *bus, 
DriveInfo *hd0,
         ide_init1(bus, i);
         if (dinfo) {
             if (ide_init_drive(&bus->ifs[i], dinfo->bdrv,
-                               bdrv_get_type_hint(dinfo->bdrv) == 
BDRV_TYPE_CDROM ? IDE_CD : IDE_HD,
-                               NULL,
+                               dinfo->media_cd ? IDE_CD : IDE_HD, NULL,
                                *dinfo->serial ? dinfo->serial : NULL) < 0) {
                 error_report("Can't set up IDE drive %s", dinfo->id);
                 exit(1);
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index a7f0b22..30a1a8c 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -82,9 +82,7 @@ IDEDevice *ide_create_drive(IDEBus *bus, int unit, DriveInfo 
*drive)
 {
     DeviceState *dev;
 
-    dev = qdev_create(&bus->qbus,
-                      bdrv_get_type_hint(drive->bdrv) == BDRV_TYPE_CDROM
-                      ? "ide-hd" : "ide-cd");
+    dev = qdev_create(&bus->qbus, drive->media_cd ? "ide-hd" : "ide-cd");
     qdev_prop_set_uint32(dev, "unit", unit);
     qdev_prop_set_drive_nofail(dev, "drive", drive->bdrv);
     qdev_init_nofail(dev);
@@ -145,9 +143,9 @@ static int ide_cd_initfn(IDEDevice *dev)
 
 static int ide_drive_initfn(IDEDevice *dev)
 {
-    return ide_dev_initfn(dev,
-                          bdrv_get_type_hint(dev->conf.bs) == BDRV_TYPE_CDROM
-                          ? IDE_CD : IDE_HD);
+    DriveInfo *dinfo = drive_get_by_blockdev(dev->conf.bs);
+
+    return ide_dev_initfn(dev, dinfo->media_cd ? IDE_CD : IDE_HD);
 }
 
 #define DEFINE_IDE_DRIVE_PROPERTIES()                           \
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index ebefcba..06330e5 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1110,11 +1110,13 @@ static int scsi_cd_initfn(SCSIDevice *dev)
 static int scsi_disk_initfn(SCSIDevice *dev)
 {
     int is_cd;
+    DriveInfo *dinfo;
 
     if (!dev->conf.bs) {
         is_cd = 0;              /* will die in scsi_initfn() */
     } else {
-        is_cd = bdrv_get_type_hint(dev->conf.bs) == BDRV_TYPE_CDROM;
+        dinfo = drive_get_by_blockdev(dev->conf.bs);
+        is_cd = dinfo->media_cd;
     }
 
     return scsi_initfn(dev, is_cd);
diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c
index ea8f8c4..5d5ce65 100644
--- a/hw/xen_devconfig.c
+++ b/hw/xen_devconfig.c
@@ -94,7 +94,7 @@ int xen_config_dev_blk(DriveInfo *disk)
 {
     char fe[256], be[256];
     int vdev = 202 * 256 + 16 * disk->unit;
-    int cdrom = disk->bdrv->type == BDRV_TYPE_CDROM;
+    int cdrom = disk->media_cd;
     const char *devtype = cdrom ? "cdrom" : "disk";
     const char *mode    = cdrom ? "r"     : "w";
 
-- 
1.6.6.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]