diff options
author | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:43:25 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:43:25 +0000 |
commit | bca33a6688fc34f33afa47494cf922c6d21b99d3 (patch) | |
tree | 617cdc00f8a7a101571cab7fc7a999b2b403920f /sys/dev/nvme/nvme_qpair.c | |
parent | f52c8d1c53690af172d252522140d89c84fedb23 (diff) | |
download | FreeBSD-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_qpair.c')
-rw-r--r-- | sys/dev/nvme/nvme_qpair.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index bd16ccd..97a5c28 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -406,3 +406,35 @@ nvme_qpair_submit_cmd(struct nvme_qpair *qpair, struct nvme_tracker *tr) qpair->num_cmds++; } + +void +nvme_qpair_submit_request(struct nvme_qpair *qpair, struct nvme_request *req) +{ + struct nvme_tracker *tr; + int err; + + 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); +} |