nvme: introduce new set of cmd/cpl printers

Having functions without qpair on the interface allows for wider usage
e.g. by nvmf layer.

Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com>
Change-Id: I3a51ad53f00eb29e2ba2681ef4ff0cc2a197b65d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3176
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
This commit is contained in:
Jacek Kalwas 2020-07-04 01:22:14 +02:00 committed by Tomasz Zawadzki
parent f096f252d0
commit 61668cc43e
3 changed files with 58 additions and 24 deletions

View File

@ -2975,6 +2975,22 @@ void spdk_nvme_qpair_print_command(struct spdk_nvme_qpair *qpair,
void spdk_nvme_qpair_print_completion(struct spdk_nvme_qpair *qpair,
struct spdk_nvme_cpl *cpl);
/**
* \brief Prints (SPDK_NOTICELOG) the contents of an NVMe submission queue entry (command).
*
* \param qid Queue identifier.
* \param cmd Pointer to the submission queue command to be formatted.
*/
void spdk_nvme_print_command(uint16_t qid, struct spdk_nvme_cmd *cmd);
/**
* \brief Prints (SPDK_NOTICELOG) the contents of an NVMe completion queue entry.
*
* \param qid Queue identifier.
* \param cpl Pointer to the completion queue element to be formatted.
*/
void spdk_nvme_print_completion(uint16_t qid, struct spdk_nvme_cpl *cpl);
struct ibv_context;
struct ibv_pd;
struct ibv_mr;

View File

@ -108,22 +108,20 @@ nvme_get_string(const struct nvme_string *strings, uint16_t value)
}
static void
nvme_admin_qpair_print_command(struct spdk_nvme_qpair *qpair,
struct spdk_nvme_cmd *cmd)
nvme_admin_qpair_print_command(uint16_t qid, struct spdk_nvme_cmd *cmd)
{
assert(cmd != NULL);
SPDK_NOTICELOG("%s (%02x) sqid:%d cid:%d nsid:%x "
"cdw10:%08x cdw11:%08x\n",
nvme_get_string(admin_opcode, cmd->opc), cmd->opc, qpair->id, cmd->cid,
cmd->nsid, cmd->cdw10, cmd->cdw11);
SPDK_NOTICELOG("%s (%02x) qid:%d cid:%d nsid:%x cdw10:%08x cdw11:%08x\n",
nvme_get_string(admin_opcode, cmd->opc), cmd->opc, qid, cmd->cid, cmd->nsid, cmd->cdw10,
cmd->cdw11);
}
static void
nvme_io_qpair_print_command(struct spdk_nvme_qpair *qpair,
struct spdk_nvme_cmd *cmd)
nvme_io_qpair_print_command(uint16_t qid, struct spdk_nvme_cmd *cmd)
{
assert(qpair != NULL);
assert(cmd != NULL);
switch ((int)cmd->opc) {
case SPDK_NVME_OPC_WRITE:
case SPDK_NVME_OPC_READ:
@ -131,36 +129,41 @@ nvme_io_qpair_print_command(struct spdk_nvme_qpair *qpair,
case SPDK_NVME_OPC_COMPARE:
SPDK_NOTICELOG("%s sqid:%d cid:%d nsid:%d "
"lba:%llu len:%d\n",
nvme_get_string(io_opcode, cmd->opc), qpair->id, cmd->cid,
cmd->nsid,
nvme_get_string(io_opcode, cmd->opc), qid, cmd->cid, cmd->nsid,
((unsigned long long)cmd->cdw11 << 32) + cmd->cdw10,
(cmd->cdw12 & 0xFFFF) + 1);
break;
case SPDK_NVME_OPC_FLUSH:
case SPDK_NVME_OPC_DATASET_MANAGEMENT:
SPDK_NOTICELOG("%s sqid:%d cid:%d nsid:%d\n",
nvme_get_string(io_opcode, cmd->opc), qpair->id, cmd->cid,
cmd->nsid);
nvme_get_string(io_opcode, cmd->opc), qid, cmd->cid, cmd->nsid);
break;
default:
SPDK_NOTICELOG("%s (%02x) sqid:%d cid:%d nsid:%d\n",
nvme_get_string(io_opcode, cmd->opc), cmd->opc, qpair->id,
cmd->cid, cmd->nsid);
nvme_get_string(io_opcode, cmd->opc), cmd->opc, qid, cmd->cid, cmd->nsid);
break;
}
}
void
spdk_nvme_print_command(uint16_t qid, struct spdk_nvme_cmd *cmd)
{
assert(cmd != NULL);
if (qid == 0 || cmd->opc == SPDK_NVME_OPC_FABRIC) {
nvme_admin_qpair_print_command(qid, cmd);
} else {
nvme_io_qpair_print_command(qid, cmd);
}
}
void
spdk_nvme_qpair_print_command(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cmd *cmd)
{
assert(qpair != NULL);
assert(cmd != NULL);
if (nvme_qpair_is_admin_queue(qpair)) {
nvme_admin_qpair_print_command(qpair, cmd);
} else {
nvme_io_qpair_print_command(qpair, cmd);
}
spdk_nvme_print_command(qpair->id, cmd);
}
static const struct nvme_string generic_status[] = {
@ -297,15 +300,28 @@ spdk_nvme_cpl_get_status_string(const struct spdk_nvme_status *status)
}
void
spdk_nvme_qpair_print_completion(struct spdk_nvme_qpair *qpair,
struct spdk_nvme_cpl *cpl)
spdk_nvme_print_completion(uint16_t qid, struct spdk_nvme_cpl *cpl)
{
SPDK_NOTICELOG("%s (%02x/%02x) sqid:%d cid:%d cdw0:%x sqhd:%04x p:%x m:%x dnr:%x\n",
assert(cpl != NULL);
/* Check that sqid matches qid. Note that sqid is reserved
* for fabrics so don't print an error when sqid is 0. */
if (cpl->sqid != qid && cpl->sqid != 0) {
SPDK_ERRLOG("sqid %u doesn't match qid\n", cpl->sqid);
}
SPDK_NOTICELOG("%s (%02x/%02x) qid:%d cid:%d cdw0:%x sqhd:%04x p:%x m:%x dnr:%x\n",
spdk_nvme_cpl_get_status_string(&cpl->status),
cpl->status.sct, cpl->status.sc, cpl->sqid, cpl->cid, cpl->cdw0,
cpl->status.sct, cpl->status.sc, qid, cpl->cid, cpl->cdw0,
cpl->sqhd, cpl->status.p, cpl->status.m, cpl->status.dnr);
}
void
spdk_nvme_qpair_print_completion(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cpl *cpl)
{
spdk_nvme_print_completion(qpair->id, cpl);
}
bool
nvme_completion_is_retry(const struct spdk_nvme_cpl *cpl)
{

View File

@ -135,6 +135,8 @@
spdk_nvme_qpair_remove_cmd_error_injection;
spdk_nvme_qpair_print_command;
spdk_nvme_qpair_print_completion;
spdk_nvme_print_command;
spdk_nvme_print_completion;
spdk_nvme_cpl_get_status_string;