svn commit: r241662 - head/sys/dev/nvme
Jim Harris
jimharris at FreeBSD.org
Thu Oct 18 00:41:32 UTC 2012
Author: jimharris
Date: Thu Oct 18 00:41:31 2012
New Revision: 241662
URL: http://svn.freebsd.org/changeset/base/241662
Log:
Simplify how the qpair lock is acquired and released.
Sponsored by: Intel
Modified:
head/sys/dev/nvme/nvme_ctrlr.c
head/sys/dev/nvme/nvme_qpair.c
Modified: head/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c Thu Oct 18 00:40:40 2012 (r241661)
+++ head/sys/dev/nvme/nvme_ctrlr.c Thu Oct 18 00:41:31 2012 (r241662)
@@ -802,6 +802,8 @@ nvme_ctrlr_submit_admin_request(struct n
qpair = &ctrlr->adminq;
+ mtx_lock(&qpair->lock);
+
tr = nvme_qpair_allocate_tracker(qpair);
tr->req = req;
@@ -814,6 +816,8 @@ nvme_ctrlr_submit_admin_request(struct n
panic("bus_dmamap_load returned non-zero!\n");
} else
nvme_qpair_submit_cmd(tr->qpair, tr);
+
+ mtx_unlock(&qpair->lock);
}
void
@@ -829,6 +833,8 @@ nvme_ctrlr_submit_io_request(struct nvme
else
qpair = &ctrlr->ioq[0];
+ mtx_lock(&qpair->lock);
+
tr = nvme_qpair_allocate_tracker(qpair);
tr->req = req;
@@ -850,4 +856,6 @@ nvme_ctrlr_submit_io_request(struct nvme
if (err != 0)
panic("bus_dmamap_load returned non-zero!\n");
}
+
+ mtx_unlock(&qpair->lock);
}
Modified: head/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- head/sys/dev/nvme/nvme_qpair.c Thu Oct 18 00:40:40 2012 (r241661)
+++ head/sys/dev/nvme/nvme_qpair.c Thu Oct 18 00:41:31 2012 (r241662)
@@ -79,8 +79,6 @@ nvme_qpair_allocate_tracker(struct nvme_
{
struct nvme_tracker *tr;
- mtx_lock(&qpair->lock);
-
tr = SLIST_FIRST(&qpair->free_tr);
if (tr == NULL) {
/*
@@ -89,7 +87,6 @@ nvme_qpair_allocate_tracker(struct nvme_
* into the qpair's active tracker array.
*/
if (qpair->num_tr == qpair->num_entries) {
- mtx_unlock(&qpair->lock);
return (NULL);
}
@@ -97,7 +94,6 @@ nvme_qpair_allocate_tracker(struct nvme_
M_ZERO | M_NOWAIT);
if (tr == NULL) {
- mtx_unlock(&qpair->lock);
return (NULL);
}
@@ -160,7 +156,6 @@ nvme_qpair_process_completions(struct nv
callout_stop(&tr->timer);
if (retry)
- /* nvme_qpair_submit_cmd() will release the lock. */
nvme_qpair_submit_cmd(qpair, tr);
else {
if (req->payload_size > 0 || req->uio != NULL)
@@ -169,10 +164,10 @@ nvme_qpair_process_completions(struct nv
nvme_free_request(req);
SLIST_INSERT_HEAD(&qpair->free_tr, tr, slist);
-
- mtx_unlock(&qpair->lock);
}
+ mtx_unlock(&qpair->lock);
+
if (++qpair->cq_head == qpair->num_entries) {
qpair->cq_head = 0;
qpair->phase = !qpair->phase;
@@ -410,6 +405,4 @@ nvme_qpair_submit_cmd(struct nvme_qpair
qpair->sq_tail);
qpair->num_cmds++;
-
- mtx_unlock(&qpair->lock);
}
More information about the svn-src-all
mailing list