Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jan 2016 17:28:48 +0000 (UTC)
From:      Jim Harris <jimharris@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r293669 - stable/10/sys/dev/nvme
Message-ID:  <201601111728.u0BHSmJu030078@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601111728.u0BHSmJu030078>