Skip to content

Commit ad71473

Browse files
Christoph Hellwigmstsirkin
authored andcommitted
virtio_blk: use virtio IRQ affinity
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 <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent 7347342 commit ad71473

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

drivers/block/virtio_blk.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
#include <linux/hdreg.h>
66
#include <linux/module.h>
77
#include <linux/mutex.h>
8+
#include <linux/interrupt.h>
89
#include <linux/virtio.h>
910
#include <linux/virtio_blk.h>
1011
#include <linux/scatterlist.h>
1112
#include <linux/string_helpers.h>
1213
#include <scsi/scsi_cmnd.h>
1314
#include <linux/idr.h>
1415
#include <linux/blk-mq.h>
16+
#include <linux/blk-mq-virtio.h>
1517
#include <linux/numa.h>
1618

1719
#define PART_BITS 4
@@ -385,6 +387,7 @@ static int init_vq(struct virtio_blk *vblk)
385387
struct virtqueue **vqs;
386388
unsigned short num_vqs;
387389
struct virtio_device *vdev = vblk->vdev;
390+
struct irq_affinity desc = { 0, };
388391

389392
err = virtio_cread_feature(vdev, VIRTIO_BLK_F_MQ,
390393
struct virtio_blk_config, num_queues,
@@ -412,7 +415,7 @@ static int init_vq(struct virtio_blk *vblk)
412415

413416
/* Discover virtqueues and write information to configuration. */
414417
err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names,
415-
NULL);
418+
&desc);
416419
if (err)
417420
goto out;
418421

@@ -543,10 +546,18 @@ static int virtblk_init_request(void *data, struct request *rq,
543546
return 0;
544547
}
545548

549+
static int virtblk_map_queues(struct blk_mq_tag_set *set)
550+
{
551+
struct virtio_blk *vblk = set->driver_data;
552+
553+
return blk_mq_virtio_map_queues(set, vblk->vdev, 0);
554+
}
555+
546556
static struct blk_mq_ops virtio_mq_ops = {
547557
.queue_rq = virtio_queue_rq,
548558
.complete = virtblk_request_done,
549559
.init_request = virtblk_init_request,
560+
.map_queues = virtblk_map_queues,
550561
};
551562

552563
static unsigned int virtblk_queue_depth;

0 commit comments

Comments
 (0)