From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=50535 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OJWVd-0001eP-7T for qemu-devel@nongnu.org; Tue, 01 Jun 2010 14:48:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OJWGW-0006pg-TG for qemu-devel@nongnu.org; Tue, 01 Jun 2010 14:32:45 -0400 Received: from oxygen.pond.sub.org ([213.239.205.148]:44343) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OJWGW-0006oP-Db for qemu-devel@nongnu.org; Tue, 01 Jun 2010 14:32:40 -0400 Received: from blackfin.pond.sub.org (pD9E39C24.dip.t-dialin.net [217.227.156.36]) by oxygen.pond.sub.org (Postfix) with ESMTPA id 8E136276D13 for ; Tue, 1 Jun 2010 20:32:37 +0200 (CEST) From: Markus Armbruster Date: Tue, 1 Jun 2010 20:32:34 +0200 Message-Id: <1275417155-28244-14-git-send-email-armbru@redhat.com> In-Reply-To: <1275417155-28244-1-git-send-email-armbru@redhat.com> References: <1275417155-28244-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH 13/14] scsi: Turn drive serial into a qdev property scsi-disk.serial List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, kraxel@redhat.com 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 --- 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