Revert "scsi: aacraid: Reply queue mapping to CPUs based on IRQ affinity"
authorMartin K. Petersen <martin.petersen@oracle.com>
Fri, 8 Dec 2023 17:09:38 +0000 (12:09 -0500)
committerSalvatore Bonaccorso <carnil@debian.org>
Sat, 30 Dec 2023 09:31:20 +0000 (10:31 +0100)
Origin: https://git.kernel.org/linus/c5becf57dd5659c687d41d623a69f42d63f59eb2
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=217599
Bug-Debian: https://bugs.debian.org/1059624

This reverts commit 9dc704dcc09eae7d21b5da0615eb2ed79278f63e.

Several reports have been made indicating that this commit caused
hangs. Numerous attempts at root causing and fixing the issue have
been unsuccessful so let's revert for now.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=217599
Cc: <stable@vger.kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name Revert-scsi-aacraid-Reply-queue-mapping-to-CPUs-base.patch

drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/src.c

index 7c6efde75da664b3819161d5aa96466b0d26aaa1..5e115e8b2ba462bae6d821e195a6f9462e10c70f 100644 (file)
@@ -1678,7 +1678,6 @@ struct aac_dev
        u32                     handle_pci_error;
        bool                    init_reset;
        u8                      soft_reset_support;
-       u8                      use_map_queue;
 };
 
 #define aac_adapter_interrupt(dev) \
index 013a9a334972ebd3b8578d83c19639627cd8b38d..25cee03d7f9737f9314a9497b7369439ca5cbd61 100644 (file)
@@ -223,12 +223,8 @@ int aac_fib_setup(struct aac_dev * dev)
 struct fib *aac_fib_alloc_tag(struct aac_dev *dev, struct scsi_cmnd *scmd)
 {
        struct fib *fibptr;
-       u32 blk_tag;
-       int i;
 
-       blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
-       i = blk_mq_unique_tag_to_tag(blk_tag);
-       fibptr = &dev->fibs[i];
+       fibptr = &dev->fibs[scsi_cmd_to_rq(scmd)->tag];
        /*
         *      Null out fields that depend on being zero at the start of
         *      each I/O
index bff49b8ab057d03bc67f81869ea8adab06c45d93..5ba5c18b77b465ae551bdb9b06c7a709bc252b9b 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <linux/compat.h>
 #include <linux/blkdev.h>
-#include <linux/blk-mq-pci.h>
 #include <linux/completion.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
@@ -506,15 +505,6 @@ common_config:
        return 0;
 }
 
-static void aac_map_queues(struct Scsi_Host *shost)
-{
-       struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
-
-       blk_mq_pci_map_queues(&shost->tag_set.map[HCTX_TYPE_DEFAULT],
-                             aac->pdev, 0);
-       aac->use_map_queue = true;
-}
-
 /**
  *     aac_change_queue_depth          -       alter queue depths
  *     @sdev:  SCSI device we are considering
@@ -1499,7 +1489,6 @@ static struct scsi_host_template aac_driver_template = {
        .bios_param                     = aac_biosparm,
        .shost_groups                   = aac_host_groups,
        .slave_configure                = aac_slave_configure,
-       .map_queues                     = aac_map_queues,
        .change_queue_depth             = aac_change_queue_depth,
        .sdev_groups                    = aac_dev_groups,
        .eh_abort_handler               = aac_eh_abort,
@@ -1787,8 +1776,6 @@ static int aac_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
        shost->max_lun = AAC_MAX_LUN;
 
        pci_set_drvdata(pdev, shost);
-       shost->nr_hw_queues = aac->max_msix;
-       shost->host_tagset = 1;
 
        error = scsi_add_host(shost, &pdev->dev);
        if (error)
@@ -1921,7 +1908,6 @@ static void aac_remove_one(struct pci_dev *pdev)
        struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
 
        aac_cancel_rescan_worker(aac);
-       aac->use_map_queue = false;
        scsi_remove_host(shost);
 
        __aac_shutdown(aac);
index 61949f3741886ba1b439292b473bf27d50d1b227..11ef58204e96f179227c166433eb4932ed7dbafa 100644 (file)
@@ -493,10 +493,6 @@ static int aac_src_deliver_message(struct fib *fib)
 #endif
 
        u16 vector_no;
-       struct scsi_cmnd *scmd;
-       u32 blk_tag;
-       struct Scsi_Host *shost = dev->scsi_host_ptr;
-       struct blk_mq_queue_map *qmap;
 
        atomic_inc(&q->numpending);
 
@@ -509,25 +505,8 @@ static int aac_src_deliver_message(struct fib *fib)
                if ((dev->comm_interface == AAC_COMM_MESSAGE_TYPE3)
                        && dev->sa_firmware)
                        vector_no = aac_get_vector(dev);
-               else {
-                       if (!fib->vector_no || !fib->callback_data) {
-                               if (shost && dev->use_map_queue) {
-                                       qmap = &shost->tag_set.map[HCTX_TYPE_DEFAULT];
-                                       vector_no = qmap->mq_map[raw_smp_processor_id()];
-                               }
-                               /*
-                                *      We hardcode the vector_no for
-                                *      reserved commands as a valid shost is
-                                *      absent during the init
-                                */
-                               else
-                                       vector_no = 0;
-                       } else {
-                               scmd = (struct scsi_cmnd *)fib->callback_data;
-                               blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
-                               vector_no = blk_mq_unique_tag_to_hwq(blk_tag);
-                       }
-               }
+               else
+                       vector_no = fib->vector_no;
 
                if (native_hba) {
                        if (fib->flags & FIB_CONTEXT_FLAG_NATIVE_HBA_TMF) {