[PATCH 8/9] virtio_blk: use virtio IRQ affinity

2017-02-05 Thread Christoph Hellwig
Use automatic IRQ affinity assignment in the virtio layer if available,
and build the blk-mq queues based on it.

Signed-off-by: Christoph Hellwig 
---
 drivers/block/virtio_blk.c | 13 -
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index c54118bdc67d..1028dfeb5a7f 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -5,6 +5,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -12,6 +13,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #define PART_BITS 4
@@ -385,6 +387,7 @@ static int init_vq(struct virtio_blk *vblk)
struct virtqueue **vqs;
unsigned short num_vqs;
struct virtio_device *vdev = vblk->vdev;
+   struct irq_affinity desc = { 0, };
 
err = virtio_cread_feature(vdev, VIRTIO_BLK_F_MQ,
   struct virtio_blk_config, num_queues,
@@ -412,7 +415,7 @@ static int init_vq(struct virtio_blk *vblk)
 
/* Discover virtqueues and write information to configuration.  */
err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names,
-   NULL);
+   );
if (err)
goto out;
 
@@ -543,10 +546,18 @@ static int virtblk_init_request(void *data, struct 
request *rq,
return 0;
 }
 
+static int virtblk_map_queues(struct blk_mq_tag_set *set)
+{
+   struct virtio_blk *vblk = set->driver_data;
+
+   return blk_mq_virtio_map_queues(set, vblk->vdev, 0);
+}
+
 static struct blk_mq_ops virtio_mq_ops = {
.queue_rq   = virtio_queue_rq,
.complete   = virtblk_request_done,
.init_request   = virtblk_init_request,
+   .map_queues = virtblk_map_queues,
 };
 
 static unsigned int virtblk_queue_depth;
-- 
2.11.0



[PATCH 8/9] virtio_blk: use virtio IRQ affinity

2017-01-27 Thread Christoph Hellwig
Use automatic IRQ affinity assignment in the virtio layer if available,
and build the blk-mq queues based on it.

Signed-off-by: Christoph Hellwig 
---
 drivers/block/virtio_blk.c | 13 -
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index c54118b..1028dfe 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -5,6 +5,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -12,6 +13,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #define PART_BITS 4
@@ -385,6 +387,7 @@ static int init_vq(struct virtio_blk *vblk)
struct virtqueue **vqs;
unsigned short num_vqs;
struct virtio_device *vdev = vblk->vdev;
+   struct irq_affinity desc = { 0, };
 
err = virtio_cread_feature(vdev, VIRTIO_BLK_F_MQ,
   struct virtio_blk_config, num_queues,
@@ -412,7 +415,7 @@ static int init_vq(struct virtio_blk *vblk)
 
/* Discover virtqueues and write information to configuration.  */
err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names,
-   NULL);
+   );
if (err)
goto out;
 
@@ -543,10 +546,18 @@ static int virtblk_init_request(void *data, struct 
request *rq,
return 0;
 }
 
+static int virtblk_map_queues(struct blk_mq_tag_set *set)
+{
+   struct virtio_blk *vblk = set->driver_data;
+
+   return blk_mq_virtio_map_queues(set, vblk->vdev, 0);
+}
+
 static struct blk_mq_ops virtio_mq_ops = {
.queue_rq   = virtio_queue_rq,
.complete   = virtblk_request_done,
.init_request   = virtblk_init_request,
+   .map_queues = virtblk_map_queues,
 };
 
 static unsigned int virtblk_queue_depth;
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html