nvmf: Move *_desc lists into nvmf_rdma_conn
These are an implementation detail of RDMA, so move them into the RDMA portion of the connection. Change-Id: I68d146019c5d78fbf5e9968abfd7baed2a54a2ed Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
0216e537f7
commit
5677fe3c8d
@ -83,8 +83,8 @@ nvmf_active_tx_desc(struct nvme_qp_tx_desc *tx_desc)
|
|||||||
conn = tx_desc->conn;
|
conn = tx_desc->conn;
|
||||||
RTE_VERIFY(conn != NULL);
|
RTE_VERIFY(conn != NULL);
|
||||||
|
|
||||||
STAILQ_REMOVE(&conn->qp_tx_desc, tx_desc, nvme_qp_tx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_tx_desc, tx_desc, nvme_qp_tx_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_active_desc, tx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_active_desc, tx_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -96,8 +96,8 @@ nvmf_deactive_tx_desc(struct nvme_qp_tx_desc *tx_desc)
|
|||||||
conn = tx_desc->conn;
|
conn = tx_desc->conn;
|
||||||
RTE_VERIFY(tx_desc->conn != NULL);
|
RTE_VERIFY(tx_desc->conn != NULL);
|
||||||
|
|
||||||
STAILQ_REMOVE(&conn->qp_tx_active_desc, tx_desc, nvme_qp_tx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_tx_active_desc, tx_desc, nvme_qp_tx_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_desc, tx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_desc, tx_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct spdk_nvmf_conn *
|
static struct spdk_nvmf_conn *
|
||||||
@ -506,11 +506,11 @@ static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc)
|
|||||||
SPDK_TRACELOG(SPDK_TRACE_NVMF, "recv byte count %x\n", rx_desc->recv_bc);
|
SPDK_TRACELOG(SPDK_TRACE_NVMF, "recv byte count %x\n", rx_desc->recv_bc);
|
||||||
|
|
||||||
/* get a response buffer */
|
/* get a response buffer */
|
||||||
if (STAILQ_EMPTY(&conn->qp_tx_desc)) {
|
if (STAILQ_EMPTY(&conn->rdma.qp_tx_desc)) {
|
||||||
SPDK_ERRLOG("tx desc pool empty!\n");
|
SPDK_ERRLOG("tx desc pool empty!\n");
|
||||||
goto recv_error;
|
goto recv_error;
|
||||||
}
|
}
|
||||||
tx_desc = STAILQ_FIRST(&conn->qp_tx_desc);
|
tx_desc = STAILQ_FIRST(&conn->rdma.qp_tx_desc);
|
||||||
nvmf_active_tx_desc(tx_desc);
|
nvmf_active_tx_desc(tx_desc);
|
||||||
|
|
||||||
req = &tx_desc->req_state;
|
req = &tx_desc->req_state;
|
||||||
@ -635,11 +635,11 @@ static int nvmf_check_rdma_completions(struct spdk_nvmf_conn *conn)
|
|||||||
/*
|
/*
|
||||||
* Check for any pending rdma_reads to start
|
* Check for any pending rdma_reads to start
|
||||||
*/
|
*/
|
||||||
conn->pending_rdma_read_count--;
|
conn->rdma.pending_rdma_read_count--;
|
||||||
if (!STAILQ_EMPTY(&conn->qp_pending_desc)) {
|
if (!STAILQ_EMPTY(&conn->rdma.qp_pending_desc)) {
|
||||||
tx_desc = STAILQ_FIRST(&conn->qp_pending_desc);
|
tx_desc = STAILQ_FIRST(&conn->rdma.qp_pending_desc);
|
||||||
STAILQ_REMOVE_HEAD(&conn->qp_pending_desc, link);
|
STAILQ_REMOVE_HEAD(&conn->rdma.qp_pending_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_active_desc, tx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_active_desc, tx_desc, link);
|
||||||
|
|
||||||
SPDK_TRACELOG(SPDK_TRACE_RDMA, "Issue rdma read from pending queue: tx_desc %p\n",
|
SPDK_TRACELOG(SPDK_TRACE_RDMA, "Issue rdma read from pending queue: tx_desc %p\n",
|
||||||
tx_desc);
|
tx_desc);
|
||||||
|
@ -79,14 +79,7 @@ struct spdk_nvmf_conn {
|
|||||||
|
|
||||||
struct spdk_nvmf_rdma_conn rdma;
|
struct spdk_nvmf_rdma_conn rdma;
|
||||||
|
|
||||||
uint8_t pending_rdma_read_count;
|
TAILQ_ENTRY(spdk_nvmf_conn) link;
|
||||||
STAILQ_HEAD(qp_pending_desc, nvme_qp_tx_desc) qp_pending_desc;
|
|
||||||
|
|
||||||
STAILQ_HEAD(qp_rx_desc, nvme_qp_rx_desc) qp_rx_desc;
|
|
||||||
STAILQ_HEAD(qp_tx_desc, nvme_qp_tx_desc) qp_tx_desc;
|
|
||||||
STAILQ_HEAD(qp_tx_active_desc, nvme_qp_tx_desc) qp_tx_active_desc;
|
|
||||||
|
|
||||||
TAILQ_ENTRY(spdk_nvmf_conn) link;
|
|
||||||
struct spdk_poller poller;
|
struct spdk_poller poller;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -141,8 +141,8 @@ free_qp_desc(struct spdk_nvmf_conn *conn)
|
|||||||
|
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Enter\n");
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Enter\n");
|
||||||
|
|
||||||
STAILQ_FOREACH(tmp_rx, &conn->qp_rx_desc, link) {
|
STAILQ_FOREACH(tmp_rx, &conn->rdma.qp_rx_desc, link) {
|
||||||
STAILQ_REMOVE(&conn->qp_rx_desc, tmp_rx, nvme_qp_rx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_rx_desc, tmp_rx, nvme_qp_rx_desc, link);
|
||||||
|
|
||||||
rc = rdma_dereg_mr(tmp_rx->bb_mr);
|
rc = rdma_dereg_mr(tmp_rx->bb_mr);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
@ -163,8 +163,8 @@ free_qp_desc(struct spdk_nvmf_conn *conn)
|
|||||||
rte_mempool_put(g_nvmf_tgt.rx_desc_pool, (void *)tmp_rx);
|
rte_mempool_put(g_nvmf_tgt.rx_desc_pool, (void *)tmp_rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
STAILQ_FOREACH(tmp_tx, &conn->qp_tx_desc, link) {
|
STAILQ_FOREACH(tmp_tx, &conn->rdma.qp_tx_desc, link) {
|
||||||
STAILQ_REMOVE(&conn->qp_tx_desc, tmp_tx, nvme_qp_tx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_tx_desc, tmp_tx, nvme_qp_tx_desc, link);
|
||||||
|
|
||||||
rc = rdma_dereg_mr(tmp_tx->msg_buf_mr);
|
rc = rdma_dereg_mr(tmp_tx->msg_buf_mr);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
@ -198,17 +198,17 @@ nvmf_rdma_conn_cleanup(struct spdk_nvmf_conn *conn)
|
|||||||
|
|
||||||
rdma_destroy_qp(conn->rdma.cm_id);
|
rdma_destroy_qp(conn->rdma.cm_id);
|
||||||
|
|
||||||
while (!STAILQ_EMPTY(&conn->qp_pending_desc)) {
|
while (!STAILQ_EMPTY(&conn->rdma.qp_pending_desc)) {
|
||||||
pending_desc = STAILQ_FIRST(&conn->qp_pending_desc);
|
pending_desc = STAILQ_FIRST(&conn->rdma.qp_pending_desc);
|
||||||
STAILQ_REMOVE_HEAD(&conn->qp_pending_desc, link);
|
STAILQ_REMOVE_HEAD(&conn->rdma.qp_pending_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_desc, pending_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_desc, pending_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove tx_desc from qp_tx_active_desc list to qp_tx_desc list */
|
/* Remove tx_desc from qp_tx_active_desc list to qp_tx_desc list */
|
||||||
while (!STAILQ_EMPTY(&conn->qp_tx_active_desc)) {
|
while (!STAILQ_EMPTY(&conn->rdma.qp_tx_active_desc)) {
|
||||||
active_desc = STAILQ_FIRST(&conn->qp_tx_active_desc);
|
active_desc = STAILQ_FIRST(&conn->rdma.qp_tx_active_desc);
|
||||||
STAILQ_REMOVE_HEAD(&conn->qp_tx_active_desc, link);
|
STAILQ_REMOVE_HEAD(&conn->rdma.qp_tx_active_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_desc, active_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_desc, active_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
free_qp_desc(conn);
|
free_qp_desc(conn);
|
||||||
@ -280,14 +280,14 @@ nvmf_post_rdma_read(struct spdk_nvmf_conn *conn,
|
|||||||
* Queue the rdma read if it would exceed max outstanding
|
* Queue the rdma read if it would exceed max outstanding
|
||||||
* RDMA read limit.
|
* RDMA read limit.
|
||||||
*/
|
*/
|
||||||
if (conn->pending_rdma_read_count == conn->initiator_depth) {
|
if (conn->rdma.pending_rdma_read_count == conn->initiator_depth) {
|
||||||
SPDK_TRACELOG(SPDK_TRACE_RDMA, "Insert rdma read into pending queue: tx_desc %p\n",
|
SPDK_TRACELOG(SPDK_TRACE_RDMA, "Insert rdma read into pending queue: tx_desc %p\n",
|
||||||
tx_desc);
|
tx_desc);
|
||||||
STAILQ_REMOVE(&conn->qp_tx_active_desc, tx_desc, nvme_qp_tx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_tx_active_desc, tx_desc, nvme_qp_tx_desc, link);
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_pending_desc, tx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_pending_desc, tx_desc, link);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
conn->pending_rdma_read_count++;
|
conn->rdma.pending_rdma_read_count++;
|
||||||
|
|
||||||
nvmf_ibv_send_wr_init(&wr, req, &rx_desc->bb_sgl, (uint64_t)tx_desc,
|
nvmf_ibv_send_wr_init(&wr, req, &rx_desc->bb_sgl, (uint64_t)tx_desc,
|
||||||
IBV_WR_RDMA_READ, IBV_SEND_SIGNALED);
|
IBV_WR_RDMA_READ, IBV_SEND_SIGNALED);
|
||||||
@ -546,10 +546,10 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
|
|||||||
}
|
}
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "NVMf fabric connection initialized\n");
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "NVMf fabric connection initialized\n");
|
||||||
|
|
||||||
STAILQ_INIT(&conn->qp_pending_desc);
|
STAILQ_INIT(&conn->rdma.qp_pending_desc);
|
||||||
STAILQ_INIT(&conn->qp_rx_desc);
|
STAILQ_INIT(&conn->rdma.qp_rx_desc);
|
||||||
STAILQ_INIT(&conn->qp_tx_desc);
|
STAILQ_INIT(&conn->rdma.qp_tx_desc);
|
||||||
STAILQ_INIT(&conn->qp_tx_active_desc);
|
STAILQ_INIT(&conn->rdma.qp_tx_active_desc);
|
||||||
|
|
||||||
/* Allocate AQ QP RX Buffers */
|
/* Allocate AQ QP RX Buffers */
|
||||||
rc = alloc_qp_rx_desc(conn);
|
rc = alloc_qp_rx_desc(conn);
|
||||||
@ -568,7 +568,7 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
|
|||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Tx buffers allocated\n");
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Tx buffers allocated\n");
|
||||||
|
|
||||||
/* Post all the RX descriptors */
|
/* Post all the RX descriptors */
|
||||||
STAILQ_FOREACH(rx_desc, &conn->qp_rx_desc, link) {
|
STAILQ_FOREACH(rx_desc, &conn->rdma.qp_rx_desc, link) {
|
||||||
if (nvmf_post_rdma_recv(conn, rx_desc)) {
|
if (nvmf_post_rdma_recv(conn, rx_desc)) {
|
||||||
SPDK_ERRLOG("Unable to post connection rx desc\n");
|
SPDK_ERRLOG("Unable to post connection rx desc\n");
|
||||||
goto err2;
|
goto err2;
|
||||||
@ -942,7 +942,7 @@ alloc_qp_rx_desc(struct spdk_nvmf_conn *conn)
|
|||||||
rx_desc->bb_sgl.length = rx_desc->bb_len;
|
rx_desc->bb_sgl.length = rx_desc->bb_len;
|
||||||
rx_desc->bb_sgl.lkey = rx_desc->bb_mr->lkey;
|
rx_desc->bb_sgl.lkey = rx_desc->bb_mr->lkey;
|
||||||
|
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_rx_desc, rx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_rx_desc, rx_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -975,8 +975,8 @@ fail:
|
|||||||
rte_mempool_put(g_nvmf_tgt.rx_desc_pool, (void *)rx_desc);
|
rte_mempool_put(g_nvmf_tgt.rx_desc_pool, (void *)rx_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
STAILQ_FOREACH(tmp, &conn->qp_rx_desc, link) {
|
STAILQ_FOREACH(tmp, &conn->rdma.qp_rx_desc, link) {
|
||||||
STAILQ_REMOVE(&conn->qp_rx_desc, tmp, nvme_qp_rx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_rx_desc, tmp, nvme_qp_rx_desc, link);
|
||||||
|
|
||||||
rc = rdma_dereg_mr(tmp->bb_mr);
|
rc = rdma_dereg_mr(tmp->bb_mr);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
@ -1038,7 +1038,7 @@ alloc_qp_tx_desc(struct spdk_nvmf_conn *conn)
|
|||||||
tx_desc, &tx_desc->req_state,
|
tx_desc, &tx_desc->req_state,
|
||||||
tx_desc->req_state.rsp);
|
tx_desc->req_state.rsp);
|
||||||
|
|
||||||
STAILQ_INSERT_TAIL(&conn->qp_tx_desc, tx_desc, link);
|
STAILQ_INSERT_TAIL(&conn->rdma.qp_tx_desc, tx_desc, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1056,8 +1056,8 @@ fail:
|
|||||||
rte_mempool_put(g_nvmf_tgt.tx_desc_pool, (void *)tx_desc);
|
rte_mempool_put(g_nvmf_tgt.tx_desc_pool, (void *)tx_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
STAILQ_FOREACH(tmp, &conn->qp_tx_desc, link) {
|
STAILQ_FOREACH(tmp, &conn->rdma.qp_tx_desc, link) {
|
||||||
STAILQ_REMOVE(&conn->qp_tx_desc, tmp, nvme_qp_tx_desc, link);
|
STAILQ_REMOVE(&conn->rdma.qp_tx_desc, tmp, nvme_qp_tx_desc, link);
|
||||||
|
|
||||||
rc = rdma_dereg_mr(tmp->msg_buf_mr);
|
rc = rdma_dereg_mr(tmp->msg_buf_mr);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "nvmf_internal.h"
|
#include "nvmf_internal.h"
|
||||||
#include "request.h"
|
#include "request.h"
|
||||||
#include "spdk/nvmf_spec.h"
|
#include "spdk/nvmf_spec.h"
|
||||||
|
#include "spdk/queue.h"
|
||||||
|
|
||||||
struct spdk_nvmf_rdma_conn {
|
struct spdk_nvmf_rdma_conn {
|
||||||
struct rdma_cm_id *cm_id;
|
struct rdma_cm_id *cm_id;
|
||||||
@ -46,6 +47,13 @@ struct spdk_nvmf_rdma_conn {
|
|||||||
struct ibv_comp_channel *comp_channel;
|
struct ibv_comp_channel *comp_channel;
|
||||||
struct ibv_cq *cq;
|
struct ibv_cq *cq;
|
||||||
struct ibv_qp *qp;
|
struct ibv_qp *qp;
|
||||||
|
|
||||||
|
uint8_t pending_rdma_read_count;
|
||||||
|
STAILQ_HEAD(qp_pending_desc, nvme_qp_tx_desc) qp_pending_desc;
|
||||||
|
|
||||||
|
STAILQ_HEAD(qp_rx_desc, nvme_qp_rx_desc) qp_rx_desc;
|
||||||
|
STAILQ_HEAD(qp_tx_desc, nvme_qp_tx_desc) qp_tx_desc;
|
||||||
|
STAILQ_HEAD(qp_tx_active_desc, nvme_qp_tx_desc) qp_tx_active_desc;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Define the Admin Queue Rx/Tx Descriptors */
|
/* Define the Admin Queue Rx/Tx Descriptors */
|
||||||
|
Loading…
Reference in New Issue
Block a user