[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/18] blockdev: Store -drive option media in DriveI
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 16/18] blockdev: Store -drive option media in DriveInfo |
Date: |
Thu, 19 May 2011 14:33:30 +0200 |
From: Markus Armbruster <address@hidden>
DriveInfo is closely tied to -drive, and like -drive, it mixes
information about host and guest part of the block device. Unlike
DriveInfo, BlockDriverState should be about the host part only.
One of the remaining guest bits there is the "type hint". -drive
option media sets it, and qdevs "ide-drive", "scsi-disk" and non-qdev
IF_XEN devices check it to pick HD vs. CD.
Communicate -drive option media via new DriveInfo member media_cd
instead.
Signed-off-by: Markus Armbruster <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
blockdev.c | 1 +
blockdev.h | 1 +
hw/ide/core.c | 3 +--
hw/ide/qdev.c | 10 ++++------
hw/scsi-disk.c | 5 +++--
hw/xen_devconfig.c | 2 +-
6 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index 5429621..28727df 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -488,6 +488,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
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 2c9e780..3587786 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -33,6 +33,7 @@ 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 542ed65..45410e8 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -1731,8 +1731,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 3bca726..3f9dc89 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -98,9 +98,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-cd" : "ide-hd");
+ dev = qdev_create(&bus->qbus, drive->media_cd ? "ide-cd" : "ide-hd");
qdev_prop_set_uint32(dev, "unit", unit);
qdev_prop_set_drive_nofail(dev, "drive", drive->bdrv);
qdev_init_nofail(dev);
@@ -165,9 +163,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_DEV_PROPERTIES() \
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 8df8518..397b9d6 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -1295,12 +1295,13 @@ static int scsi_cd_initfn(SCSIDevice *dev)
static int scsi_disk_initfn(SCSIDevice *dev)
{
SCSIDriveKind kind;
+ DriveInfo *dinfo;
if (!dev->conf.bs) {
kind = SCSI_HD; /* will die in scsi_initfn() */
} else {
- kind = bdrv_get_type_hint(dev->conf.bs) == BDRV_TYPE_CDROM
- ? SCSI_CD : SCSI_HD;
+ dinfo = drive_get_by_blockdev(dev->conf.bs);
+ kind = dinfo->media_cd ? SCSI_CD : SCSI_HD;
}
return scsi_initfn(dev, kind);
diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c
index 8d50216..3a92155 100644
--- a/hw/xen_devconfig.c
+++ b/hw/xen_devconfig.c
@@ -96,7 +96,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.7.2.3
- [Qemu-devel] [PATCH 06/18] Add documentation for qemu_progress_{init, print}(), (continued)
- [Qemu-devel] [PATCH 06/18] Add documentation for qemu_progress_{init, print}(), Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 08/18] qemu-tool: Stub out qemu-timer functions, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 07/18] ahci: Fix crashes on duplicate BH registration, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 09/18] qed: Periodically flush and clear need check bit, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 11/18] qed: support for growing images, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 12/18] ide: Split qdev "ide-drive" into "ide-hd" and "ide-cd", Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 10/18] qemu_img: is_not_zero() optimization, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 14/18] defaults: ide-cd, ide-hd and scsi-cd devices suppress default CD-ROM, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 13/18] scsi: Split qdev "scsi-disk" into "scsi-hd" and "scsi-cd", Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 15/18] block QMP: Deprecate query-block's "type", drop info block's "type=", Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 16/18] blockdev: Store -drive option media in DriveInfo,
Kevin Wolf <=
- [Qemu-devel] [PATCH 17/18] block: Remove type hint, it's guest matter, doesn't belong here, Kevin Wolf, 2011/05/19
- [Qemu-devel] [PATCH 18/18] ahci: Fix non-NCQ accesses for LBA > 16bits, Kevin Wolf, 2011/05/19
- Re: [Qemu-devel] [PULL 00/18] Block patches, Anthony Liguori, 2011/05/19