qla2xxx: add ->map_queues support for nvme
authorSaurav Kashyap <skashyap@marvell.com>
Mon, 23 Aug 2021 12:56:49 +0000 (05:56 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 20 Oct 2021 17:16:00 +0000 (19:16 +0200)
Implement ->map queues and use the block layer blk_mq_pci_map_queues
helper for mapping queues to CPUs.

With this mapping minimum 10%+ increase in performance is noticed.

Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/qla2xxx/qla_nvme.c

index 1c5da2d..253055c 100644 (file)
@@ -8,6 +8,8 @@
 #include <linux/delay.h>
 #include <linux/nvme.h>
 #include <linux/nvme-fc.h>
+#include <linux/blk-mq-pci.h>
+#include <linux/blk-mq.h>
 
 static struct nvme_fc_port_template qla_nvme_fc_transport;
 
@@ -642,6 +644,18 @@ static int qla_nvme_post_cmd(struct nvme_fc_local_port *lport,
        return rval;
 }
 
+static void qla_nvme_map_queues(struct nvme_fc_local_port *lport,
+               struct blk_mq_queue_map *map)
+{
+       struct scsi_qla_host *vha = lport->private;
+       int rc;
+
+       rc = blk_mq_pci_map_queues(map, vha->hw->pdev, vha->irq_offset);
+       if (rc)
+               ql_log(ql_log_warn, vha, 0x21de,
+                      "pci map queue failed 0x%x", rc);
+}
+
 static void qla_nvme_localport_delete(struct nvme_fc_local_port *lport)
 {
        struct scsi_qla_host *vha = lport->private;
@@ -676,6 +690,7 @@ static struct nvme_fc_port_template qla_nvme_fc_transport = {
        .ls_abort       = qla_nvme_ls_abort,
        .fcp_io         = qla_nvme_post_cmd,
        .fcp_abort      = qla_nvme_fcp_abort,
+       .map_queues     = qla_nvme_map_queues,
        .max_hw_queues  = 8,
        .max_sgl_segments = 1024,
        .max_dif_sgl_segments = 64,