aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2021-07-15 22:17:23 +0000
committerWarner Losh <imp@FreeBSD.org>2021-07-15 22:17:23 +0000
commitfc9a0840231770bc7e7dcfe4616babdc6d4389a6 (patch)
treeda8dbb60a4764637dd972202e6f4bc4439538992 /sys/dev
parent998abf5a1274609f9b74b3301dc0dabe659bd36b (diff)
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/nvme/nvme_qpair.c49
1 files changed, 25 insertions, 24 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c
index 12770f38d42e..4402d1000e67 100644
--- a/sys/dev/nvme/nvme_qpair.c
+++ b/sys/dev/nvme/nvme_qpair.c
@@ -675,30 +675,6 @@ nvme_qpair_construct(struct nvme_qpair *qpair,
qpair->num_trackers = num_trackers;
qpair->ctrlr = ctrlr;
- if (ctrlr->msix_enabled) {
- /*
- * MSI-X vector resource IDs start at 1, so we add one to
- * the queue's vector to get the corresponding rid to use.
- */
- qpair->rid = qpair->vector + 1;
-
- qpair->res = bus_alloc_resource_any(ctrlr->dev, SYS_RES_IRQ,
- &qpair->rid, RF_ACTIVE);
- if (bus_setup_intr(ctrlr->dev, qpair->res,
- INTR_TYPE_MISC | INTR_MPSAFE, NULL,
- nvme_qpair_msix_handler, qpair, &qpair->tag) != 0) {
- nvme_printf(ctrlr, "unable to setup intx handler\n");
- goto out;
- }
- if (qpair->id == 0) {
- bus_describe_intr(ctrlr->dev, qpair->res, qpair->tag,
- "admin");
- } else {
- bus_describe_intr(ctrlr->dev, qpair->res, qpair->tag,
- "io%d", qpair->id - 1);
- }
- }
-
mtx_init(&qpair->lock, "nvme qpair lock", NULL, MTX_DEF);
/* Note: NVMe PRP format is restricted to 4-byte alignment. */
@@ -818,6 +794,31 @@ nvme_qpair_construct(struct nvme_qpair *qpair,
qpair->act_tr = malloc_domainset(sizeof(struct nvme_tracker *) *
qpair->num_entries, M_NVME, DOMAINSET_PREF(qpair->domain),
M_ZERO | M_WAITOK);
+
+ if (ctrlr->msix_enabled) {
+ /*
+ * MSI-X vector resource IDs start at 1, so we add one to
+ * the queue's vector to get the corresponding rid to use.
+ */
+ qpair->rid = qpair->vector + 1;
+
+ qpair->res = bus_alloc_resource_any(ctrlr->dev, SYS_RES_IRQ,
+ &qpair->rid, RF_ACTIVE);
+ if (bus_setup_intr(ctrlr->dev, qpair->res,
+ INTR_TYPE_MISC | INTR_MPSAFE, NULL,
+ nvme_qpair_msix_handler, qpair, &qpair->tag) != 0) {
+ nvme_printf(ctrlr, "unable to setup intx handler\n");
+ goto out;
+ }
+ if (qpair->id == 0) {
+ bus_describe_intr(ctrlr->dev, qpair->res, qpair->tag,
+ "admin");
+ } else {
+ bus_describe_intr(ctrlr->dev, qpair->res, qpair->tag,
+ "io%d", qpair->id - 1);
+ }
+ }
+
return (0);
out: