diff options
author | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:41:31 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:41:31 +0000 |
commit | f52c8d1c53690af172d252522140d89c84fedb23 (patch) | |
tree | b4b8d83cc4571975f7e440856d2ac3e301ae747d /sys/dev/nvme/nvme_qpair.c | |
parent | 9becceac55c4255e0e79ae97f5b86b3c6f689cfc (diff) | |
download | FreeBSD-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.c | 11 |
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); } |