Multiqueue devices should only allocate queues for the housekeeping CPUs
when isolcpus=io_queue is set. This avoids that the isolated CPUs get
disturbed with OS workload.

Use helpers which calculates the correct number of queues which should
be used when isolcpus is used.

Reviewed-by: Christoph Hellwig <h...@lst.de>
Acked-by: Michael S. Tsirkin <m...@redhat.com>
Reviewed-by: Hannes Reinecke <h...@suse.de>
Signed-off-by: Daniel Wagner <w...@kernel.org>
---
 drivers/block/virtio_blk.c | 5 ++---
 drivers/scsi/virtio_scsi.c | 1 +
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 
7cffea01d868c6dcfe6734d3c89c1709fec07956..975036e8ddef5d622bab623843826ac26a0aa63d
 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -976,9 +976,8 @@ static int init_vq(struct virtio_blk *vblk)
                return -EINVAL;
        }
 
-       num_vqs = min_t(unsigned int,
-                       min_not_zero(num_request_queues, nr_cpu_ids),
-                       num_vqs);
+       num_vqs = blk_mq_num_possible_queues(
+                       min_not_zero(num_request_queues, num_vqs));
 
        num_poll_vqs = min_t(unsigned int, poll_queues, num_vqs - 1);
 
diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index 
21ce3e9401929cd273fde08b0944e8b47e1e66cc..96a69edddbe5555574fc8fed1ba7c82a99df4472
 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -919,6 +919,7 @@ static int virtscsi_probe(struct virtio_device *vdev)
        /* We need to know how many queues before we allocate. */
        num_queues = virtscsi_config_get(vdev, num_queues) ? : 1;
        num_queues = min_t(unsigned int, nr_cpu_ids, num_queues);
+       num_queues = blk_mq_num_possible_queues(num_queues);
 
        num_targets = virtscsi_config_get(vdev, max_target) + 1;
 

-- 
2.49.0


Reply via email to