qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 1/2] virtio-blk: add max sectors feature (virtio_blk


From: Avishay Traeger1
Subject: [Qemu-devel] [PATCH 1/2] virtio-blk: add max sectors feature (virtio_blk driver)
Date: Wed, 23 Dec 2009 17:21:25 +0200

This is a revised patch that allows the guest and host to negotiate the
maximum number of total sectors in an I/O.  This feature has already been
added by Rusty to the virtio spec.

Please CC me on replies, as I am not subscribed.

Thanks,
Avishay

Signed-off-by: Avishay Traeger <address@hidden>
---

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 51042f0..e68ea8a 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -351,8 +351,14 @@ static int __devinit virtblk_probe(struct
virtio_device *vdev)
      /* No need to bounce any requests */
      blk_queue_bounce_limit(vblk->disk->queue, BLK_BOUNCE_ANY);

-       /* No real sector limit. */
-     blk_queue_max_sectors(vblk->disk->queue, -1U);
+       /* Host can optionally specify maximum total sectors in an I/O. */
+     err = virtio_config_val(vdev, VIRTIO_BLK_F_SECTOR_MAX,
+                       offsetof(struct virtio_blk_config, sectors_max),
+                       &v);
+     if (!err)
+           blk_queue_max_sectors(vblk->disk->queue, v);
+     else
+           blk_queue_max_sectors(vblk->disk->queue, -1U);

      /* Host can optionally specify maximum segment size and number of
       * segments. */
@@ -412,7 +418,7 @@ static struct virtio_device_id id_table[] = {
 static unsigned int features[] = {
      VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX,
      VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_BLK_SIZE,
-     VIRTIO_BLK_F_SCSI, VIRTIO_BLK_F_FLUSH
+     VIRTIO_BLK_F_SCSI, VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_SECTOR_MAX
 };

 /*
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h
index fd294c5..2536d74 100644
--- a/include/linux/virtio_blk.h
+++ b/include/linux/virtio_blk.h
@@ -15,6 +15,7 @@
 #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_FLUSH   9 /* Cache flush command support */
+#define VIRTIO_BLK_F_SECTOR_MAX    10  /* Maximum total sectors in an I/O */

 struct virtio_blk_config {
      /* The capacity (in 512-byte sectors). */
@@ -31,6 +32,7 @@ struct virtio_blk_config {
      } geometry;
      /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
      __u32 blk_size;
+     __u32 sectors_max;
 } __attribute__((packed));

 /*





reply via email to

[Prev in Thread] Current Thread [Next in Thread]