[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial |
Date: |
Tue, 1 Jun 2010 20:32:34 +0200 |
It needs to be a qdev property, because it belongs to the drive's
guest part.
Bonus: info qtree now shows the serial number.
Signed-off-by: Markus Armbruster <address@hidden>
---
hw/scsi-disk.c | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 4d20919..e8c066a 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -66,6 +66,7 @@ struct SCSIDiskState
uint64_t max_lba;
QEMUBH *bh;
char *version;
+ char *serial;
};
static SCSIDiskReq *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun)
@@ -359,9 +360,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req,
uint8_t *outbuf)
case 0x80: /* Device serial number, optional */
{
- const char *serial = req->dev->conf.dinfo->serial ?
- req->dev->conf.dinfo->serial : "0";
- int l = strlen(serial);
+ int l = strlen(s->serial);
if (l > req->cmd.xfer)
l = req->cmd.xfer;
@@ -371,7 +370,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req,
uint8_t *outbuf)
DPRINTF("Inquiry EVPD[Serial number] "
"buffer size %zd\n", req->cmd.xfer);
outbuf[buflen++] = l;
- memcpy(outbuf+buflen, serial, l);
+ memcpy(outbuf+buflen, s->serial, l);
buflen += l;
break;
}
@@ -1058,6 +1057,15 @@ static int scsi_disk_initfn(SCSIDevice *dev)
}
s->bs = s->qdev.conf.dinfo->bdrv;
+ if (!s->serial) {
+ if (*dev->conf.dinfo->serial) {
+ /* try to fall back to value set with legacy -drive serial=... */
+ s->serial = qemu_strdup(dev->conf.dinfo->serial);
+ } else {
+ s->serial = qemu_strdup("0");
+ }
+ }
+
if (bdrv_is_sg(s->bs)) {
error_report("scsi-disk: unwanted /dev/sg*");
return -1;
@@ -1090,6 +1098,7 @@ static SCSIDeviceInfo scsi_disk_info = {
.qdev.props = (Property[]) {
DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf),
DEFINE_PROP_STRING("ver", SCSIDiskState, version),
+ DEFINE_PROP_STRING("serial", SCSIDiskState, serial),
DEFINE_PROP_END_OF_LIST(),
},
};
--
1.6.6.1
- [Qemu-devel] [PATCH 00/14] Block-related fixes and cleanups, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 06/14] ide: Split ide_init1() off ide_init2(), Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial,
Markus Armbruster <=
- [Qemu-devel] [PATCH 07/14] ide: Change ide_init_drive() to require valid dinfo argument, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 11/14] ide: Turn drive serial into a qdev property ide-drive.serial, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 12/14] ide: Fix info qtree for ide-drive.ver, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 14/14] scsi: Fix info qtree for scsi-disk.ver, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 04/14] ide: Remove useless IDEDeviceInfo members unit, drive, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 10/14] qdev: Don't leak string property value on hot unplug, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 05/14] ide: Remove redundant IDEState member conf, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 09/14] qdev: New qdev_prop_set_string(), Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 03/14] usb: Remove unused usb_device_add() parameter is_hotplug, Markus Armbruster, 2010/06/01
- [Qemu-devel] [PATCH 01/14] blockdev: Belatedly remove MAX_DRIVES, Markus Armbruster, 2010/06/01