From: john cooper <john.cooper@redhat.com>
To: kvm@vger.kernel.org, qemu-devel@nongnu.org
Cc: john cooper <john.cooper@third-harmonic.com>
Subject: [PATCH 1/2] Add serial number support for virtio_blk, V2
Date: Wed, 13 May 2009 13:07:14 -0400 [thread overview]
Message-ID: <4A0AFE42.903@redhat.com> (raw)
In-Reply-To: <49F876AA.2070600@third-harmonic.com>
[-- Attachment #1: Type: text/plain, Size: 29 bytes --]
--
john.cooper@redhat.com
[-- Attachment #2: qemu-vblk-serial-2.patch --]
[-- Type: text/x-patch, Size: 3456 bytes --]
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index dad4ef0..90825a8 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -25,6 +25,7 @@ typedef struct VirtIOBlock
BlockDriverState *bs;
VirtQueue *vq;
void *rq;
+ char serial_str[BLOCK_SERIAL_STRLEN + 1];
} VirtIOBlock;
static VirtIOBlock *to_virtio_blk(VirtIODevice *vdev)
@@ -285,6 +286,8 @@ static void virtio_blk_reset(VirtIODevice *vdev)
qemu_aio_flush();
}
+/* coalesce internal state, copy to pci i/o region 0
+ */
static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
{
VirtIOBlock *s = to_virtio_blk(vdev);
@@ -299,11 +302,13 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
stw_raw(&blkcfg.cylinders, cylinders);
blkcfg.heads = heads;
blkcfg.sectors = secs;
+ memcpy(&blkcfg.serial, s->serial_str, sizeof (blkcfg.serial));
memcpy(config, &blkcfg, sizeof(blkcfg));
}
static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
{
+ VirtIOBlock *s = to_virtio_blk(vdev);
uint32_t features = 0;
features |= (1 << VIRTIO_BLK_F_SEG_MAX);
@@ -311,6 +316,8 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
#ifdef __linux__
features |= (1 << VIRTIO_BLK_F_SCSI);
#endif
+ if (strcmp(s->serial_str, "0"))
+ features |= 1 << VIRTIO_BLK_F_SN;
return features;
}
@@ -353,6 +360,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs)
VirtIOBlock *s;
int cylinders, heads, secs;
static int virtio_blk_id;
+ char *ps = drive_get_serial(bs);
s = (VirtIOBlock *)virtio_init_pci(bus, "virtio-blk",
PCI_VENDOR_ID_REDHAT_QUMRANET,
@@ -369,6 +377,10 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs)
s->vdev.reset = virtio_blk_reset;
s->bs = bs;
s->rq = NULL;
+ if (strlen(ps))
+ strncpy(s->serial_str, ps, sizeof (s->serial_str));
+ else
+ snprintf(s->serial_str, sizeof (s->serial_str), "0");
bs->private = &s->vdev.pci_dev;
bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
bdrv_set_geometry_hint(s->bs, cylinders, heads, secs);
diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h
index 5ef6c36..3229394 100644
--- a/hw/virtio-blk.h
+++ b/hw/virtio-blk.h
@@ -31,6 +31,7 @@
#define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/
#define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */
+#define VIRTIO_BLK_F_SN 8 /* serial number supported */
struct virtio_blk_config
{
@@ -40,6 +41,8 @@ struct virtio_blk_config
uint16_t cylinders;
uint8_t heads;
uint8_t sectors;
+ uint32_t _blk_size; /* structure pad, currently unused */
+ uint8_t serial[BLOCK_SERIAL_STRLEN];
} __attribute__((packed));
/* These two define direction. */
diff --git a/sysemu.h b/sysemu.h
index 1f45fd6..185b4e3 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -141,6 +141,8 @@ typedef enum {
BLOCK_ERR_STOP_ANY
} BlockInterfaceErrorAction;
+#define BLOCK_SERIAL_STRLEN 20
+
typedef struct DriveInfo {
BlockDriverState *bdrv;
BlockInterfaceType type;
@@ -149,7 +151,7 @@ typedef struct DriveInfo {
int used;
int drive_opt_idx;
BlockInterfaceErrorAction onerror;
- char serial[21];
+ char serial[BLOCK_SERIAL_STRLEN + 1];
} DriveInfo;
#define MAX_IDE_DEVS 2
WARNING: multiple messages have this Message-ID (diff)
From: john cooper <john.cooper@redhat.com>
To: kvm@vger.kernel.org, qemu-devel@nongnu.org
Cc: john cooper <john.cooper@third-harmonic.com>
Subject: [Qemu-devel] [PATCH 1/2] Add serial number support for virtio_blk, V2
Date: Wed, 13 May 2009 13:07:14 -0400 [thread overview]
Message-ID: <4A0AFE42.903@redhat.com> (raw)
In-Reply-To: <49F876AA.2070600@third-harmonic.com>
[-- Attachment #1: Type: text/plain, Size: 29 bytes --]
--
john.cooper@redhat.com
[-- Attachment #2: qemu-vblk-serial-2.patch --]
[-- Type: text/x-patch, Size: 3456 bytes --]
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index dad4ef0..90825a8 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -25,6 +25,7 @@ typedef struct VirtIOBlock
BlockDriverState *bs;
VirtQueue *vq;
void *rq;
+ char serial_str[BLOCK_SERIAL_STRLEN + 1];
} VirtIOBlock;
static VirtIOBlock *to_virtio_blk(VirtIODevice *vdev)
@@ -285,6 +286,8 @@ static void virtio_blk_reset(VirtIODevice *vdev)
qemu_aio_flush();
}
+/* coalesce internal state, copy to pci i/o region 0
+ */
static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
{
VirtIOBlock *s = to_virtio_blk(vdev);
@@ -299,11 +302,13 @@ static void virtio_blk_update_config(VirtIODevice *vdev, uint8_t *config)
stw_raw(&blkcfg.cylinders, cylinders);
blkcfg.heads = heads;
blkcfg.sectors = secs;
+ memcpy(&blkcfg.serial, s->serial_str, sizeof (blkcfg.serial));
memcpy(config, &blkcfg, sizeof(blkcfg));
}
static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
{
+ VirtIOBlock *s = to_virtio_blk(vdev);
uint32_t features = 0;
features |= (1 << VIRTIO_BLK_F_SEG_MAX);
@@ -311,6 +316,8 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
#ifdef __linux__
features |= (1 << VIRTIO_BLK_F_SCSI);
#endif
+ if (strcmp(s->serial_str, "0"))
+ features |= 1 << VIRTIO_BLK_F_SN;
return features;
}
@@ -353,6 +360,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs)
VirtIOBlock *s;
int cylinders, heads, secs;
static int virtio_blk_id;
+ char *ps = drive_get_serial(bs);
s = (VirtIOBlock *)virtio_init_pci(bus, "virtio-blk",
PCI_VENDOR_ID_REDHAT_QUMRANET,
@@ -369,6 +377,10 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs)
s->vdev.reset = virtio_blk_reset;
s->bs = bs;
s->rq = NULL;
+ if (strlen(ps))
+ strncpy(s->serial_str, ps, sizeof (s->serial_str));
+ else
+ snprintf(s->serial_str, sizeof (s->serial_str), "0");
bs->private = &s->vdev.pci_dev;
bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
bdrv_set_geometry_hint(s->bs, cylinders, heads, secs);
diff --git a/hw/virtio-blk.h b/hw/virtio-blk.h
index 5ef6c36..3229394 100644
--- a/hw/virtio-blk.h
+++ b/hw/virtio-blk.h
@@ -31,6 +31,7 @@
#define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/
#define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */
+#define VIRTIO_BLK_F_SN 8 /* serial number supported */
struct virtio_blk_config
{
@@ -40,6 +41,8 @@ struct virtio_blk_config
uint16_t cylinders;
uint8_t heads;
uint8_t sectors;
+ uint32_t _blk_size; /* structure pad, currently unused */
+ uint8_t serial[BLOCK_SERIAL_STRLEN];
} __attribute__((packed));
/* These two define direction. */
diff --git a/sysemu.h b/sysemu.h
index 1f45fd6..185b4e3 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -141,6 +141,8 @@ typedef enum {
BLOCK_ERR_STOP_ANY
} BlockInterfaceErrorAction;
+#define BLOCK_SERIAL_STRLEN 20
+
typedef struct DriveInfo {
BlockDriverState *bdrv;
BlockInterfaceType type;
@@ -149,7 +151,7 @@ typedef struct DriveInfo {
int used;
int drive_opt_idx;
BlockInterfaceErrorAction onerror;
- char serial[21];
+ char serial[BLOCK_SERIAL_STRLEN + 1];
} DriveInfo;
#define MAX_IDE_DEVS 2
next prev parent reply other threads:[~2009-05-13 17:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-29 15:47 [PATCH 1/2] Add serial number support for virtio_blk john cooper
2009-04-29 15:47 ` [Qemu-devel] " john cooper
2009-05-01 13:59 ` Anthony Liguori
2009-05-01 13:59 ` [Qemu-devel] " Anthony Liguori
2009-05-13 17:07 ` john cooper [this message]
2009-05-13 17:07 ` [Qemu-devel] [PATCH 1/2] Add serial number support for virtio_blk, V2 john cooper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A0AFE42.903@redhat.com \
--to=john.cooper@redhat.com \
--cc=john.cooper@third-harmonic.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.