Create nvme_qpair_submit_request() which eliminates all of the code
duplication between the admin and io controller-level submit functions. Sponsored by: Intel
This commit is contained in:
parent
c2e83b404f
commit
5ae9ed6811
@ -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);
|
||||
}
|
||||
|
@ -354,6 +354,8 @@ void nvme_qpair_submit_cmd(struct nvme_qpair *qpair,
|
||||
struct nvme_tracker *tr);
|
||||
void nvme_qpair_process_completions(struct nvme_qpair *qpair);
|
||||
struct nvme_tracker * nvme_qpair_allocate_tracker(struct nvme_qpair *qpair);
|
||||
void nvme_qpair_submit_request(struct nvme_qpair *qpair,
|
||||
struct nvme_request *req);
|
||||
|
||||
void nvme_admin_qpair_destroy(struct nvme_qpair *qpair);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user