summaryrefslogtreecommitdiffstats
path: root/sys/dev/nvme/nvme_qpair.c
diff options
context:
space:
mode:
authorjimharris <jimharris@FreeBSD.org>2012-10-18 00:41:31 +0000
committerjimharris <jimharris@FreeBSD.org>2012-10-18 00:41:31 +0000
commitf52c8d1c53690af172d252522140d89c84fedb23 (patch)
treeb4b8d83cc4571975f7e440856d2ac3e301ae747d /sys/dev/nvme/nvme_qpair.c
parent9becceac55c4255e0e79ae97f5b86b3c6f689cfc (diff)
downloadFreeBSD-src-f52c8d1c53690af172d252522140d89c84fedb23.zip
FreeBSD-src-f52c8d1c53690af172d252522140d89c84fedb23.tar.gz
Simplify how the qpair lock is acquired and released.
Sponsored by: Intel
Diffstat (limited to 'sys/dev/nvme/nvme_qpair.c')
-rw-r--r--sys/dev/nvme/nvme_qpair.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c
index 5298f17..bd16ccd 100644
--- a/sys/dev/nvme/nvme_qpair.c
+++ b/sys/dev/nvme/nvme_qpair.c
@@ -79,8 +79,6 @@ nvme_qpair_allocate_tracker(struct nvme_qpair *qpair)
{
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_qpair *qpair)
* 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_qpair *qpair)
M_ZERO | M_NOWAIT);
if (tr == NULL) {
- mtx_unlock(&qpair->lock);
return (NULL);
}
@@ -160,7 +156,6 @@ nvme_qpair_process_completions(struct nvme_qpair *qpair)
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 nvme_qpair *qpair)
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, struct nvme_tracker *tr)
qpair->sq_tail);
qpair->num_cmds++;
-
- mtx_unlock(&qpair->lock);
}
OpenPOWER on IntegriCloud