summaryrefslogtreecommitdiffstats
path: root/sys/dev/nvme/nvme_ctrlr.c
diff options
context:
space:
mode:
authorjimharris <jimharris@FreeBSD.org>2012-10-18 00:43:25 +0000
committerjimharris <jimharris@FreeBSD.org>2012-10-18 00:43:25 +0000
commitbca33a6688fc34f33afa47494cf922c6d21b99d3 (patch)
tree617cdc00f8a7a101571cab7fc7a999b2b403920f /sys/dev/nvme/nvme_ctrlr.c
parentf52c8d1c53690af172d252522140d89c84fedb23 (diff)
downloadFreeBSD-src-bca33a6688fc34f33afa47494cf922c6d21b99d3.zip
FreeBSD-src-bca33a6688fc34f33afa47494cf922c6d21b99d3.tar.gz
Create nvme_qpair_submit_request() which eliminates all of the code
duplication between the admin and io controller-level submit functions. Sponsored by: Intel
Diffstat (limited to 'sys/dev/nvme/nvme_ctrlr.c')
-rw-r--r--sys/dev/nvme/nvme_ctrlr.c50
1 files changed, 2 insertions, 48 deletions
diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c
index 369df7f..adc34e9 100644
--- a/sys/dev/nvme/nvme_ctrlr.c
+++ b/sys/dev/nvme/nvme_ctrlr.c
@@ -796,28 +796,8 @@ void
nvme_ctrlr_submit_admin_request(struct nvme_controller *ctrlr,
struct nvme_request *req)
{
- struct nvme_qpair *qpair;
- struct nvme_tracker *tr;
- int err;
-
- qpair = &ctrlr->adminq;
-
- mtx_lock(&qpair->lock);
-
- tr = nvme_qpair_allocate_tracker(qpair);
-
- tr->req = req;
-
- if (req->payload_size > 0) {
- err = bus_dmamap_load(tr->qpair->dma_tag, tr->payload_dma_map,
- req->payload, req->payload_size,
- nvme_payload_map, tr, 0);
- if (err != 0)
- panic("bus_dmamap_load returned non-zero!\n");
- } else
- nvme_qpair_submit_cmd(tr->qpair, tr);
- mtx_unlock(&qpair->lock);
+ nvme_qpair_submit_request(&ctrlr->adminq, req);
}
void
@@ -825,37 +805,11 @@ nvme_ctrlr_submit_io_request(struct nvme_controller *ctrlr,
struct nvme_request *req)
{
struct nvme_qpair *qpair;
- struct nvme_tracker *tr;
- int err;
if (ctrlr->per_cpu_io_queues)
qpair = &ctrlr->ioq[curcpu];
else
qpair = &ctrlr->ioq[0];
- mtx_lock(&qpair->lock);
-
- tr = nvme_qpair_allocate_tracker(qpair);
-
- tr->req = req;
-
- if (req->uio == NULL) {
- if (req->payload_size > 0) {
- err = bus_dmamap_load(tr->qpair->dma_tag,
- tr->payload_dma_map, req->payload,
- req->payload_size,
- nvme_payload_map, tr, 0);
- if (err != 0)
- panic("bus_dmamap_load returned non-zero!\n");
- } else
- nvme_qpair_submit_cmd(tr->qpair, tr);
- } else {
- err = bus_dmamap_load_uio(tr->qpair->dma_tag,
- tr->payload_dma_map, req->uio,
- nvme_payload_map_uio, tr, 0);
- if (err != 0)
- panic("bus_dmamap_load returned non-zero!\n");
- }
-
- mtx_unlock(&qpair->lock);
+ nvme_qpair_submit_request(qpair, req);
}
OpenPOWER on IntegriCloud