Simplify how the qpair lock is acquired and released.

Sponsored by:	Intel
This commit is contained in:
Jim Harris 2012-10-18 00:41:31 +00:00
parent 5fa5cc5f12
commit c2e83b404f
2 changed files with 10 additions and 9 deletions

View file

@ -802,6 +802,8 @@ nvme_ctrlr_submit_admin_request(struct nvme_controller *ctrlr,
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 nvme_controller *ctrlr,
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_controller *ctrlr,
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_controller *ctrlr,
if (err != 0)
panic("bus_dmamap_load returned non-zero!\n");
}
mtx_unlock(&qpair->lock);
}

View file

@ -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);
}