Skip to content

Commit

Permalink
virtio_blk: use virtio IRQ affinity
Browse files Browse the repository at this point in the history
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 <hch@lst.de>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
Christoph Hellwig authored and Michael S. Tsirkin committed Feb 27, 2017
1 parent 7347342 commit ad71473
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion drivers/block/virtio_blk.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
#include <linux/hdreg.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/interrupt.h>
#include <linux/virtio.h>
#include <linux/virtio_blk.h>
#include <linux/scatterlist.h>
#include <linux/string_helpers.h>
#include <scsi/scsi_cmnd.h>
#include <linux/idr.h>
#include <linux/blk-mq.h>
#include <linux/blk-mq-virtio.h>
#include <linux/numa.h>

#define PART_BITS 4
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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);
&desc);
if (err)
goto out;

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit ad71473

Please sign in to comment.