Author: jimharris
Date: Mon Jan 11 17:28:47 2016
New Revision: 293669
URL: https://svnweb.freebsd.org/changeset/base/293669

Log:
  MFC r293326:
  
    nvme: do not pre-allocate MSI-X IRQ resources
  
    The issue referenced here was resolved by other changes
    in recent commits, so this code is no longer needed.

Modified:
  stable/10/sys/dev/nvme/nvme_ctrlr.c
  stable/10/sys/dev/nvme/nvme_private.h
  stable/10/sys/dev/nvme/nvme_qpair.c

Modified: stable/10/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- stable/10/sys/dev/nvme/nvme_ctrlr.c Mon Jan 11 17:27:20 2016        
(r293668)
+++ stable/10/sys/dev/nvme/nvme_ctrlr.c Mon Jan 11 17:28:47 2016        
(r293669)
@@ -930,7 +930,7 @@ nvme_ctrlr_construct(struct nvme_control
 {
        union cap_lo_register   cap_lo;
        union cap_hi_register   cap_hi;
-       int                     i, per_cpu_io_queues, rid;
+       int                     per_cpu_io_queues;
        int                     num_vectors_requested, num_vectors_allocated;
        int                     status, timeout_period;
 
@@ -1031,41 +1031,6 @@ nvme_ctrlr_construct(struct nvme_control
                        panic("could not reallocate 2 vectors\n");
        }
 
-       /*
-        * On earlier FreeBSD releases, there are reports that
-        *  pci_alloc_msix() can return successfully with all vectors
-        *  requested, but a subsequent bus_alloc_resource_any()
-        *  for one of those vectors fails.  This issue occurs more
-        *  readily with multiple devices using per-CPU vectors.
-        * To workaround this issue, try to allocate the resources now,
-        *  and fall back to INTx if we cannot allocate all of them.
-        *  This issue cannot be reproduced on more recent versions of
-        *  FreeBSD which have increased the maximum number of MSI-X
-        *  vectors, but adding the workaround makes it easier for
-        *  vendors wishing to import this driver into kernels based on
-        *  older versions of FreeBSD.
-        */
-       for (i = 0; i < num_vectors_allocated; i++) {
-               rid = i + 1;
-               ctrlr->msi_res[i] = bus_alloc_resource_any(ctrlr->dev,
-                   SYS_RES_IRQ, &rid, RF_ACTIVE);
-
-               if (ctrlr->msi_res[i] == NULL) {
-                       ctrlr->msix_enabled = 0;
-                       while (i > 0) {
-                               i--;
-                               bus_release_resource(ctrlr->dev,
-                                   SYS_RES_IRQ,
-                                   rman_get_rid(ctrlr->msi_res[i]),
-                                   ctrlr->msi_res[i]);
-                       }
-                       pci_release_msi(dev);
-                       nvme_printf(ctrlr, "could not obtain all MSI-X "
-                           "resources, reverting to intx\n");
-                       break;
-               }
-       }
-
 intx:
 
        if (!ctrlr->msix_enabled)

Modified: stable/10/sys/dev/nvme/nvme_private.h
==============================================================================
--- stable/10/sys/dev/nvme/nvme_private.h       Mon Jan 11 17:27:20 2016        
(r293668)
+++ stable/10/sys/dev/nvme/nvme_private.h       Mon Jan 11 17:28:47 2016        
(r293669)
@@ -275,8 +275,6 @@ struct nvme_controller {
        struct task             fail_req_task;
        struct taskqueue        *taskqueue;
 
-       struct resource         *msi_res[MAXCPU + 1];
-
        /* For shared legacy interrupt. */
        int                     rid;
        struct resource         *res;

Modified: stable/10/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- stable/10/sys/dev/nvme/nvme_qpair.c Mon Jan 11 17:27:20 2016        
(r293668)
+++ stable/10/sys/dev/nvme/nvme_qpair.c Mon Jan 11 17:28:47 2016        
(r293669)
@@ -479,8 +479,9 @@ nvme_qpair_construct(struct nvme_qpair *
                 *  the queue's vector to get the corresponding rid to use.
                 */
                qpair->rid = vector + 1;
-               qpair->res = ctrlr->msi_res[vector];
 
+               qpair->res = bus_alloc_resource_any(ctrlr->dev, SYS_RES_IRQ,
+                   &qpair->rid, RF_ACTIVE);
                bus_setup_intr(ctrlr->dev, qpair->res,
                    INTR_TYPE_MISC | INTR_MPSAFE, NULL,
                    nvme_qpair_msix_handler, qpair, &qpair->tag);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to