Add virtio disk identification support
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest0 of 4 patches 2 repliesIn review
Patches in v1 No applies recorded yet
None of the 4 patches the cover letter announces are in this archive.
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [Qemu-devel] [PATCH 0/4] Add virtio disk identification support
This patch adds the final missing bits for support of passing a serial/id string to a virtio-blk guest driver.
The guest-side component already exists in the virtio driver, and has recently been reworked by Ryan to export a /sys interface for retrival of the id from guest userland.
Signed-off-by john cooper<[email protected]>
---
hw/virtio-blk.c +13 -0
@@ -26,6 +26,7 @@ typedef struct VirtIOBlockQEMUBH *bh;BlockConf *conf;unsigned short sector_mask; +char sn[BLOCK_SERIAL_STRLEN ]; } VirtIOBlock;static VirtIOBlock *to_virtio_blk (VirtIODevice *vdev)
@@ -324,6 +325,12 @@ static void virtio_blk_handle_request(VirtIOBlockReq *req,virtio_blk_handle_flush (req, mrb); }else if (req->out->type &VIRTIO_BLK_T_SCSI_CMD ) {virtio_blk_handle_scsi (req); + }else if (req->out->type &VIRTIO_BLK_T_GET_ID ) { +VirtIOBlock *s = req->dev; + +memcpy (req->elem.in_sg[0 ].iov_base, s->sn, +MIN (req->elem.in_sg[0 ].iov_len,sizeof (s->sn))); +virtio_blk_req_complete (req,VIRTIO_BLK_S_OK ); }else if (req->out->type &VIRTIO_BLK_T_OUT ) {qemu_iovec_init_external (&req->qiov, &req->elem.out_sg[1 ], req->elem.out_num -1 );
@@ -495,6 +502,12 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf) s->sector_mask = (s->conf->logical_block_size /BDRV_SECTOR_SIZE ) -1 ;bdrv_guess_geometry (s->bs, &cylinders, &heads, &secs); +/* NB: per existing s/n string convention we really intend to hard-limit +* the copy length to sizeof (s->sn) even in the case we're left without +* a trailing '\0' +*/ +strncpy (s->sn,drive_get_serial (s->bs),sizeof (s->sn)); + s->vq =virtio_add_queue (&s->vdev,128 , virtio_blk_handle_output);qemu_add_vm_change_state_handler (virtio_blk_dma_restart_cb, s);
hw/virtio-blk.h +3 -0
@@ -59,6 +59,9 @@ struct virtio_blk_config/* Flush the volatile write cache */ #define VIRTIO_BLK_T_FLUSH 4 +/* return the device ID string */ +#define VIRTIO_BLK_T_GET_ID 8 +/* Barrier before this op. */ #define VIRTIO_BLK_T_BARRIER 0x80000000
Signature · 1 line
[email protected]