nvme: replace cdw10 with specific union command

Change-Id: Ibdbc6d0356749795db26f58aa5c5e68739d5df5e
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/475465
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
This commit is contained in:
Changpeng Liu 2019-11-20 19:22:35 -05:00 committed by Tomasz Zawadzki
parent bae1750bef
commit 1fea1fccf5
14 changed files with 93 additions and 88 deletions

View File

@ -1001,7 +1001,7 @@ get_feature(struct spdk_nvme_ctrlr *ctrlr, uint8_t fid)
feature->valid = false; feature->valid = false;
cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.cdw10 = fid; cmd.cdw10_bits.get_features.fid = fid;
return spdk_nvme_ctrlr_cmd_admin_raw(ctrlr, &cmd, NULL, 0, get_feature_completion, feature); return spdk_nvme_ctrlr_cmd_admin_raw(ctrlr, &cmd, NULL, 0, get_feature_completion, feature);
} }
@ -1067,7 +1067,7 @@ set_arb_feature(struct spdk_nvme_ctrlr *ctrlr)
unsigned ab, lpw, mpw, hpw; unsigned ab, lpw, mpw, hpw;
cmd.opc = SPDK_NVME_OPC_SET_FEATURES; cmd.opc = SPDK_NVME_OPC_SET_FEATURES;
cmd.cdw10 = SPDK_NVME_FEAT_ARBITRATION; cmd.cdw10_bits.set_features.fid = SPDK_NVME_FEAT_ARBITRATION;
g_arbitration.outstanding_commands = 0; g_arbitration.outstanding_commands = 0;

View File

@ -185,7 +185,7 @@ get_feature(struct spdk_nvme_ctrlr *ctrlr, uint8_t fid)
feature->valid = false; feature->valid = false;
cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.cdw10 = fid; cmd.cdw10_bits.get_features.fid = fid;
return spdk_nvme_ctrlr_cmd_admin_raw(ctrlr, &cmd, NULL, 0, get_feature_completion, feature); return spdk_nvme_ctrlr_cmd_admin_raw(ctrlr, &cmd, NULL, 0, get_feature_completion, feature);
} }

View File

@ -115,7 +115,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
/* Identify Namespace with NSID set to FFFFFFFFh to get common namespace capabilities. */ /* Identify Namespace with NSID set to FFFFFFFFh to get common namespace capabilities. */
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
cmd.opc = SPDK_NVME_OPC_IDENTIFY; cmd.opc = SPDK_NVME_OPC_IDENTIFY;
cmd.cdw10 = 0; /* CNS = 0 (Identify Namespace) */ cmd.cdw10_bits.identify.cns = 0; /* CNS = 0 (Identify Namespace) */
cmd.nsid = SPDK_NVME_GLOBAL_NS_TAG; cmd.nsid = SPDK_NVME_GLOBAL_NS_TAG;
dev->outstanding_admin_cmds++; dev->outstanding_admin_cmds++;
@ -410,7 +410,7 @@ get_allocated_nsid(struct dev *dev)
} }
cmd.opc = SPDK_NVME_OPC_IDENTIFY; cmd.opc = SPDK_NVME_OPC_IDENTIFY;
cmd.cdw10 = SPDK_NVME_IDENTIFY_ALLOCATED_NS_LIST; cmd.cdw10_bits.identify.cns = SPDK_NVME_IDENTIFY_ALLOCATED_NS_LIST;
cmd.nsid = 0; cmd.nsid = 0;
dev->outstanding_admin_cmds++; dev->outstanding_admin_cmds++;

View File

@ -611,8 +611,12 @@ struct spdk_nvme_cmd {
struct spdk_nvme_sgl_descriptor sgl1; struct spdk_nvme_sgl_descriptor sgl1;
} dptr; } dptr;
/* dword 10-15 */ /* command-specific */
uint32_t cdw10; /* command-specific */ union {
uint32_t cdw10;
union spdk_nvme_cmd_cdw10 cdw10_bits;
};
/* dword 11-15 */
uint32_t cdw11; /* command-specific */ uint32_t cdw11; /* command-specific */
uint32_t cdw12; /* command-specific */ uint32_t cdw12; /* command-specific */
uint32_t cdw13; /* command-specific */ uint32_t cdw13; /* command-specific */

View File

@ -141,7 +141,8 @@ nvme_ctrlr_cmd_identify(struct spdk_nvme_ctrlr *ctrlr, uint8_t cns, uint16_t cnt
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_IDENTIFY; cmd->opc = SPDK_NVME_OPC_IDENTIFY;
cmd->cdw10 = cns | ((uint32_t)cntid << 16); cmd->cdw10_bits.identify.cns = cns;
cmd->cdw10_bits.identify.cntid = cntid;
cmd->nsid = nsid; cmd->nsid = nsid;
return nvme_ctrlr_submit_admin_request(ctrlr, req); return nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -167,7 +168,7 @@ nvme_ctrlr_cmd_attach_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_NS_ATTACHMENT; cmd->opc = SPDK_NVME_OPC_NS_ATTACHMENT;
cmd->nsid = nsid; cmd->nsid = nsid;
cmd->cdw10 = SPDK_NVME_NS_CTRLR_ATTACH; cmd->cdw10_bits.ns_attach.sel = SPDK_NVME_NS_CTRLR_ATTACH;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -195,7 +196,7 @@ nvme_ctrlr_cmd_detach_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_NS_ATTACHMENT; cmd->opc = SPDK_NVME_OPC_NS_ATTACHMENT;
cmd->nsid = nsid; cmd->nsid = nsid;
cmd->cdw10 = SPDK_NVME_NS_CTRLR_DETACH; cmd->cdw10_bits.ns_attach.sel = SPDK_NVME_NS_CTRLR_DETACH;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -222,7 +223,7 @@ nvme_ctrlr_cmd_create_ns(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ns_data
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_NS_MANAGEMENT; cmd->opc = SPDK_NVME_OPC_NS_MANAGEMENT;
cmd->cdw10 = SPDK_NVME_NS_MANAGEMENT_CREATE; cmd->cdw10_bits.ns_manage.sel = SPDK_NVME_NS_MANAGEMENT_CREATE;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -247,7 +248,7 @@ nvme_ctrlr_cmd_delete_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid, spdk_nvme
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_NS_MANAGEMENT; cmd->opc = SPDK_NVME_OPC_NS_MANAGEMENT;
cmd->cdw10 = SPDK_NVME_NS_MANAGEMENT_DELETE; cmd->cdw10_bits.ns_manage.sel = SPDK_NVME_NS_MANAGEMENT_DELETE;
cmd->nsid = nsid; cmd->nsid = nsid;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -327,7 +328,7 @@ spdk_nvme_ctrlr_cmd_set_feature(struct spdk_nvme_ctrlr *ctrlr, uint8_t feature,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_SET_FEATURES; cmd->opc = SPDK_NVME_OPC_SET_FEATURES;
cmd->cdw10 = feature; cmd->cdw10_bits.set_features.fid = feature;
cmd->cdw11 = cdw11; cmd->cdw11 = cdw11;
cmd->cdw12 = cdw12; cmd->cdw12 = cdw12;
@ -356,7 +357,7 @@ spdk_nvme_ctrlr_cmd_get_feature(struct spdk_nvme_ctrlr *ctrlr, uint8_t feature,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_GET_FEATURES; cmd->opc = SPDK_NVME_OPC_GET_FEATURES;
cmd->cdw10 = feature; cmd->cdw10_bits.get_features.fid = feature;
cmd->cdw11 = cdw11; cmd->cdw11 = cdw11;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -385,7 +386,7 @@ spdk_nvme_ctrlr_cmd_get_feature_ns(struct spdk_nvme_ctrlr *ctrlr, uint8_t featur
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_GET_FEATURES; cmd->opc = SPDK_NVME_OPC_GET_FEATURES;
cmd->cdw10 = feature; cmd->cdw10_bits.get_features.fid = feature;
cmd->cdw11 = cdw11; cmd->cdw11 = cdw11;
cmd->nsid = ns_id; cmd->nsid = ns_id;
@ -414,7 +415,7 @@ int spdk_nvme_ctrlr_cmd_set_feature_ns(struct spdk_nvme_ctrlr *ctrlr, uint8_t fe
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_SET_FEATURES; cmd->opc = SPDK_NVME_OPC_SET_FEATURES;
cmd->cdw10 = feature; cmd->cdw10_bits.set_features.fid = feature;
cmd->cdw11 = cdw11; cmd->cdw11 = cdw11;
cmd->cdw12 = cdw12; cmd->cdw12 = cdw12;
cmd->nsid = ns_id; cmd->nsid = ns_id;
@ -521,8 +522,9 @@ spdk_nvme_ctrlr_cmd_get_log_page(struct spdk_nvme_ctrlr *ctrlr, uint8_t log_page
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_GET_LOG_PAGE; cmd->opc = SPDK_NVME_OPC_GET_LOG_PAGE;
cmd->nsid = nsid; cmd->nsid = nsid;
cmd->cdw10 = numdl << 16; cmd->cdw10_bits.get_log_page.numdl = numdl;
cmd->cdw10 |= log_page; cmd->cdw10_bits.get_log_page.lid = log_page;
cmd->cdw11 = numdu; cmd->cdw11 = numdu;
cmd->cdw12 = lpol; cmd->cdw12 = lpol;
cmd->cdw13 = lpou; cmd->cdw13 = lpou;
@ -594,7 +596,8 @@ spdk_nvme_ctrlr_cmd_abort(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_ABORT; cmd->opc = SPDK_NVME_OPC_ABORT;
cmd->cdw10 = (cid << 16) | sqid; cmd->cdw10_bits.abort.sqid = sqid;
cmd->cdw10_bits.abort.cid = cid;
if (ctrlr->outstanding_aborts >= ctrlr->cdata.acl) { if (ctrlr->outstanding_aborts >= ctrlr->cdata.acl) {
STAILQ_INSERT_TAIL(&ctrlr->queued_aborts, req, stailq); STAILQ_INSERT_TAIL(&ctrlr->queued_aborts, req, stailq);
@ -681,7 +684,10 @@ nvme_ctrlr_cmd_security_receive(struct spdk_nvme_ctrlr *ctrlr, uint8_t secp,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_SECURITY_RECEIVE; cmd->opc = SPDK_NVME_OPC_SECURITY_RECEIVE;
cmd->cdw10 = ((uint32_t)secp << 24) | ((uint32_t)spsp << 8) | ((uint32_t)nssf); cmd->cdw10_bits.sec_send_recv.nssf = nssf;
cmd->cdw10_bits.sec_send_recv.spsp0 = (uint8_t)spsp;
cmd->cdw10_bits.sec_send_recv.spsp1 = (uint8_t)(spsp >> 8);
cmd->cdw10_bits.sec_send_recv.secp = secp;
cmd->cdw11 = payload_size; cmd->cdw11 = payload_size;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);
@ -709,7 +715,10 @@ nvme_ctrlr_cmd_security_send(struct spdk_nvme_ctrlr *ctrlr, uint8_t secp,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_SECURITY_SEND; cmd->opc = SPDK_NVME_OPC_SECURITY_SEND;
cmd->cdw10 = ((uint32_t)secp << 24) | ((uint32_t)spsp << 8) | ((uint32_t)nssf); cmd->cdw10_bits.sec_send_recv.nssf = nssf;
cmd->cdw10_bits.sec_send_recv.spsp0 = (uint8_t)spsp;
cmd->cdw10_bits.sec_send_recv.spsp1 = (uint8_t)(spsp >> 8);
cmd->cdw10_bits.sec_send_recv.secp = secp;
cmd->cdw11 = payload_size; cmd->cdw11 = payload_size;
rc = nvme_ctrlr_submit_admin_request(ctrlr, req); rc = nvme_ctrlr_submit_admin_request(ctrlr, req);

View File

@ -835,7 +835,7 @@ spdk_nvme_ns_cmd_dataset_management(struct spdk_nvme_ns *ns, struct spdk_nvme_qp
cmd->opc = SPDK_NVME_OPC_DATASET_MANAGEMENT; cmd->opc = SPDK_NVME_OPC_DATASET_MANAGEMENT;
cmd->nsid = ns->id; cmd->nsid = ns->id;
cmd->cdw10 = num_ranges - 1; cmd->cdw10_bits.dsm.nr = num_ranges - 1;
cmd->cdw11 = type; cmd->cdw11 = type;
return nvme_qpair_submit_request(qpair, req); return nvme_qpair_submit_request(qpair, req);
@ -883,12 +883,9 @@ spdk_nvme_ns_cmd_reservation_register(struct spdk_nvme_ns *ns,
cmd->opc = SPDK_NVME_OPC_RESERVATION_REGISTER; cmd->opc = SPDK_NVME_OPC_RESERVATION_REGISTER;
cmd->nsid = ns->id; cmd->nsid = ns->id;
/* Bits 0-2 */ cmd->cdw10_bits.resv_register.rrega = action;
cmd->cdw10 = action; cmd->cdw10_bits.resv_register.iekey = ignore_key;
/* Bit 3 */ cmd->cdw10_bits.resv_register.cptpl = cptpl;
cmd->cdw10 |= ignore_key ? 1 << 3 : 0;
/* Bits 30-31 */
cmd->cdw10 |= (uint32_t)cptpl << 30;
return nvme_qpair_submit_request(qpair, req); return nvme_qpair_submit_request(qpair, req);
} }
@ -916,12 +913,9 @@ spdk_nvme_ns_cmd_reservation_release(struct spdk_nvme_ns *ns,
cmd->opc = SPDK_NVME_OPC_RESERVATION_RELEASE; cmd->opc = SPDK_NVME_OPC_RESERVATION_RELEASE;
cmd->nsid = ns->id; cmd->nsid = ns->id;
/* Bits 0-2 */ cmd->cdw10_bits.resv_release.rrela = action;
cmd->cdw10 = action; cmd->cdw10_bits.resv_release.iekey = ignore_key;
/* Bit 3 */ cmd->cdw10_bits.resv_release.rtype = type;
cmd->cdw10 |= ignore_key ? 1 << 3 : 0;
/* Bits 8-15 */
cmd->cdw10 |= (uint32_t)type << 8;
return nvme_qpair_submit_request(qpair, req); return nvme_qpair_submit_request(qpair, req);
} }
@ -949,12 +943,9 @@ spdk_nvme_ns_cmd_reservation_acquire(struct spdk_nvme_ns *ns,
cmd->opc = SPDK_NVME_OPC_RESERVATION_ACQUIRE; cmd->opc = SPDK_NVME_OPC_RESERVATION_ACQUIRE;
cmd->nsid = ns->id; cmd->nsid = ns->id;
/* Bits 0-2 */ cmd->cdw10_bits.resv_acquire.racqa = action;
cmd->cdw10 = action; cmd->cdw10_bits.resv_acquire.iekey = ignore_key;
/* Bit 3 */ cmd->cdw10_bits.resv_acquire.rtype = type;
cmd->cdw10 |= ignore_key ? 1 << 3 : 0;
/* Bits 8-15 */
cmd->cdw10 |= (uint32_t)type << 8;
return nvme_qpair_submit_request(qpair, req); return nvme_qpair_submit_request(qpair, req);
} }

View File

@ -1470,11 +1470,9 @@ nvme_pcie_ctrlr_cmd_create_io_cq(struct spdk_nvme_ctrlr *ctrlr,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_CREATE_IO_CQ; cmd->opc = SPDK_NVME_OPC_CREATE_IO_CQ;
/* cmd->cdw10_bits.create_io_q.qid = io_que->id;
* TODO: create a create io completion queue command data cmd->cdw10_bits.create_io_q.qsize = pqpair->num_entries - 1;
* structure.
*/
cmd->cdw10 = ((pqpair->num_entries - 1) << 16) | io_que->id;
/* /*
* 0x2 = interrupts enabled * 0x2 = interrupts enabled
* 0x1 = physically contiguous * 0x1 = physically contiguous
@ -1501,11 +1499,8 @@ nvme_pcie_ctrlr_cmd_create_io_sq(struct spdk_nvme_ctrlr *ctrlr,
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_CREATE_IO_SQ; cmd->opc = SPDK_NVME_OPC_CREATE_IO_SQ;
/* cmd->cdw10_bits.create_io_q.qid = io_que->id;
* TODO: create a create io submission queue command data cmd->cdw10_bits.create_io_q.qsize = pqpair->num_entries - 1;
* structure.
*/
cmd->cdw10 = ((pqpair->num_entries - 1) << 16) | io_que->id;
/* 0x1 = physically contiguous */ /* 0x1 = physically contiguous */
cmd->cdw11 = (io_que->id << 16) | (io_que->qprio << 1) | 0x1; cmd->cdw11 = (io_que->id << 16) | (io_que->qprio << 1) | 0x1;
cmd->dptr.prp.prp1 = pqpair->cmd_bus_addr; cmd->dptr.prp.prp1 = pqpair->cmd_bus_addr;
@ -1527,7 +1522,7 @@ nvme_pcie_ctrlr_cmd_delete_io_cq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_DELETE_IO_CQ; cmd->opc = SPDK_NVME_OPC_DELETE_IO_CQ;
cmd->cdw10 = qpair->id; cmd->cdw10_bits.delete_io_q.qid = qpair->id;
return nvme_ctrlr_submit_admin_request(ctrlr, req); return nvme_ctrlr_submit_admin_request(ctrlr, req);
} }
@ -1546,7 +1541,7 @@ nvme_pcie_ctrlr_cmd_delete_io_sq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme
cmd = &req->cmd; cmd = &req->cmd;
cmd->opc = SPDK_NVME_OPC_DELETE_IO_SQ; cmd->opc = SPDK_NVME_OPC_DELETE_IO_SQ;
cmd->cdw10 = qpair->id; cmd->cdw10_bits.delete_io_q.qid = qpair->id;
return nvme_ctrlr_submit_admin_request(ctrlr, req); return nvme_ctrlr_submit_admin_request(ctrlr, req);
} }

View File

@ -1471,7 +1471,7 @@ spdk_nvmf_ctrlr_get_log_page(struct spdk_nvmf_request *req)
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
} }
numdl = (cmd->cdw10 >> 16) & 0xFFFFu; numdl = cmd->cdw10_bits.get_log_page.numdl;
numdu = (cmd->cdw11) & 0xFFFFu; numdu = (cmd->cdw11) & 0xFFFFu;
len = ((numdu << 16) + numdl + (uint64_t)1) * 4; len = ((numdu << 16) + numdl + (uint64_t)1) * 4;
if (len > req->length) { if (len > req->length) {
@ -1482,7 +1482,7 @@ spdk_nvmf_ctrlr_get_log_page(struct spdk_nvmf_request *req)
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
} }
lid = cmd->cdw10 & 0xFF; lid = cmd->cdw10_bits.get_log_page.lid;
SPDK_DEBUGLOG(SPDK_LOG_NVMF, "Get log page: LID=0x%02X offset=0x%" PRIx64 " len=0x%" PRIx64 "\n", SPDK_DEBUGLOG(SPDK_LOG_NVMF, "Get log page: LID=0x%02X offset=0x%" PRIx64 " len=0x%" PRIx64 "\n",
lid, offset, len); lid, offset, len);
@ -1769,7 +1769,7 @@ spdk_nvmf_ctrlr_identify(struct spdk_nvmf_request *req)
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
} }
cns = cmd->cdw10 & 0xFF; cns = cmd->cdw10_bits.identify.cns;
if (subsystem->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY && if (subsystem->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY &&
cns != SPDK_NVME_IDENTIFY_CTRLR) { cns != SPDK_NVME_IDENTIFY_CTRLR) {
@ -1833,13 +1833,13 @@ spdk_nvmf_ctrlr_abort_on_pg(struct spdk_io_channel_iter *i)
struct spdk_nvmf_poll_group *group = spdk_io_channel_get_ctx(ch); struct spdk_nvmf_poll_group *group = spdk_io_channel_get_ctx(ch);
struct spdk_nvme_cpl *rsp = &req->rsp->nvme_cpl; struct spdk_nvme_cpl *rsp = &req->rsp->nvme_cpl;
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
uint16_t sqid = cmd->cdw10 & 0xFFFFu; uint16_t sqid = cmd->cdw10_bits.abort.sqid;
struct spdk_nvmf_qpair *qpair; struct spdk_nvmf_qpair *qpair;
TAILQ_FOREACH(qpair, &group->qpairs, link) { TAILQ_FOREACH(qpair, &group->qpairs, link) {
if (qpair->ctrlr == req->qpair->ctrlr && qpair->qid == sqid) { if (qpair->ctrlr == req->qpair->ctrlr && qpair->qid == sqid) {
struct spdk_nvmf_request *req_to_abort; struct spdk_nvmf_request *req_to_abort;
uint16_t cid = cmd->cdw10 >> 16; uint16_t cid = cmd->cdw10_bits.abort.cid;
/* Found the qpair */ /* Found the qpair */
@ -1907,7 +1907,7 @@ spdk_nvmf_ctrlr_get_features(struct spdk_nvmf_request *req)
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
feature = cmd->cdw10 & 0xff; /* mask out the FID value */ feature = cmd->cdw10_bits.get_features.fid;
switch (feature) { switch (feature) {
case SPDK_NVME_FEAT_ARBITRATION: case SPDK_NVME_FEAT_ARBITRATION:
return get_features_generic(req, ctrlr->feat.arbitration.raw); return get_features_generic(req, ctrlr->feat.arbitration.raw);
@ -1947,7 +1947,7 @@ spdk_nvmf_ctrlr_set_features(struct spdk_nvmf_request *req)
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl; struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
feature = cmd->cdw10 & 0xff; /* mask out the FID value */ feature = cmd->cdw10_bits.set_features.fid;
switch (feature) { switch (feature) {
case SPDK_NVME_FEAT_ARBITRATION: case SPDK_NVME_FEAT_ARBITRATION:
return spdk_nvmf_ctrlr_set_features_arbitration(req); return spdk_nvmf_ctrlr_set_features_arbitration(req);
@ -2359,7 +2359,7 @@ nvmf_ns_reservation_request_check(struct spdk_nvmf_subsystem_pg_ns_info *ns_info
break; break;
case SPDK_NVME_OPC_RESERVATION_ACQUIRE: case SPDK_NVME_OPC_RESERVATION_ACQUIRE:
case SPDK_NVME_OPC_RESERVATION_RELEASE: case SPDK_NVME_OPC_RESERVATION_RELEASE:
racqa = cmd->cdw10 & 0x7u; racqa = cmd->cdw10_bits.resv_acquire.racqa;
if (cmd->opc == SPDK_NVME_OPC_RESERVATION_ACQUIRE && if (cmd->opc == SPDK_NVME_OPC_RESERVATION_ACQUIRE &&
racqa == SPDK_NVME_RESERVE_ACQUIRE) { racqa == SPDK_NVME_RESERVE_ACQUIRE) {
status = SPDK_NVME_SC_RESERVATION_CONFLICT; status = SPDK_NVME_SC_RESERVATION_CONFLICT;

View File

@ -436,7 +436,7 @@ nvmf_bdev_ctrlr_unmap(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
uint32_t lba_count; uint32_t lba_count;
int rc; int rc;
nr = ((cmd->cdw10 & 0x000000ff) + 1); nr = cmd->cdw10_bits.dsm.nr + 1;
if (nr * sizeof(struct spdk_nvme_dsm_range) > req->length) { if (nr * sizeof(struct spdk_nvme_dsm_range) > req->length) {
SPDK_ERRLOG("Dataset Management number of ranges > SGL length\n"); SPDK_ERRLOG("Dataset Management number of ranges > SGL length\n");
response->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID; response->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID;

View File

@ -1925,9 +1925,9 @@ nvmf_ns_reservation_register(struct spdk_nvmf_ns *ns,
uint32_t num_hostid = 0; uint32_t num_hostid = 0;
int rc; int rc;
rrega = cmd->cdw10 & 0x7u; rrega = cmd->cdw10_bits.resv_register.rrega;
iekey = (cmd->cdw10 >> 3) & 0x1u; iekey = cmd->cdw10_bits.resv_register.iekey;
cptpl = (cmd->cdw10 >> 30) & 0x3u; cptpl = cmd->cdw10_bits.resv_register.cptpl;
if (req->data && req->length >= sizeof(key)) { if (req->data && req->length >= sizeof(key)) {
memcpy(&key, req->data, sizeof(key)); memcpy(&key, req->data, sizeof(key));
@ -2061,9 +2061,9 @@ nvmf_ns_reservation_acquire(struct spdk_nvmf_ns *ns,
bool reservation_released = false; bool reservation_released = false;
uint8_t status = SPDK_NVME_SC_SUCCESS; uint8_t status = SPDK_NVME_SC_SUCCESS;
racqa = cmd->cdw10 & 0x7u; racqa = cmd->cdw10_bits.resv_acquire.racqa;
iekey = (cmd->cdw10 >> 3) & 0x1u; iekey = cmd->cdw10_bits.resv_acquire.iekey;
rtype = (cmd->cdw10 >> 8) & 0xffu; rtype = cmd->cdw10_bits.resv_acquire.rtype;
if (req->data && req->length >= sizeof(key)) { if (req->data && req->length >= sizeof(key)) {
memcpy(&key, req->data, sizeof(key)); memcpy(&key, req->data, sizeof(key));
@ -2223,9 +2223,9 @@ nvmf_ns_reservation_release(struct spdk_nvmf_ns *ns,
struct spdk_uuid hostid_list[SPDK_NVMF_MAX_NUM_REGISTRANTS]; struct spdk_uuid hostid_list[SPDK_NVMF_MAX_NUM_REGISTRANTS];
uint32_t num_hostid = 0; uint32_t num_hostid = 0;
rrela = cmd->cdw10 & 0x7u; rrela = cmd->cdw10_bits.resv_release.rrela;
iekey = (cmd->cdw10 >> 3) & 0x1u; iekey = cmd->cdw10_bits.resv_release.iekey;
rtype = (cmd->cdw10 >> 8) & 0xffu; rtype = cmd->cdw10_bits.resv_release.rtype;
if (req->data && req->length >= sizeof(crkey)) { if (req->data && req->length >= sizeof(crkey)) {
memcpy(&crkey, req->data, sizeof(crkey)); memcpy(&crkey, req->data, sizeof(crkey));

View File

@ -95,7 +95,7 @@ set_temp_threshold(struct dev *dev, uint32_t temp)
int rc; int rc;
cmd.opc = SPDK_NVME_OPC_SET_FEATURES; cmd.opc = SPDK_NVME_OPC_SET_FEATURES;
cmd.cdw10 = SPDK_NVME_FEAT_TEMPERATURE_THRESHOLD; cmd.cdw10_bits.set_features.fid = SPDK_NVME_FEAT_TEMPERATURE_THRESHOLD;
cmd.cdw11 = temp; cmd.cdw11 = temp;
rc = spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0, set_temp_completion, dev); rc = spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0, set_temp_completion, dev);
@ -133,7 +133,7 @@ get_temp_threshold(struct dev *dev)
int rc; int rc;
cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.cdw10 = SPDK_NVME_FEAT_TEMPERATURE_THRESHOLD; cmd.cdw10_bits.get_features.fid = SPDK_NVME_FEAT_TEMPERATURE_THRESHOLD;
rc = spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0, get_temp_completion, dev); rc = spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0, get_temp_completion, dev);
if (rc == 0) { if (rc == 0) {
@ -426,7 +426,7 @@ get_feature_test(struct dev *dev)
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.cdw10 = SPDK_NVME_FEAT_NUMBER_OF_QUEUES; cmd.cdw10_bits.get_features.fid = SPDK_NVME_FEAT_NUMBER_OF_QUEUES;
if (spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0, if (spdk_nvme_ctrlr_cmd_admin_raw(dev->ctrlr, &cmd, NULL, 0,
get_feature_test_cb, dev) != 0) { get_feature_test_cb, dev) != 0) {
printf("Failed to send Get Features command for dev=%p\n", dev); printf("Failed to send Get Features command for dev=%p\n", dev);

View File

@ -127,7 +127,7 @@ get_feature_test(bool error_expected)
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.cdw10 = SPDK_NVME_FEAT_NUMBER_OF_QUEUES; cmd.cdw10_bits.get_features.fid = SPDK_NVME_FEAT_NUMBER_OF_QUEUES;
foreach_dev(dev) { foreach_dev(dev) {
dev->error_expected = error_expected; dev->error_expected = error_expected;

View File

@ -221,7 +221,8 @@ test_get_log_page(void)
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
memset(&rsp, 0, sizeof(rsp)); memset(&rsp, 0, sizeof(rsp));
cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE; cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE;
cmd.nvme_cmd.cdw10 = SPDK_NVME_LOG_ERROR | (req.length / 4 - 1) << 16; cmd.nvme_cmd.cdw10_bits.get_log_page.lid = SPDK_NVME_LOG_ERROR;
cmd.nvme_cmd.cdw10_bits.get_log_page.numdl = (req.length / 4 - 1);
CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE); CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC); CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_SUCCESS); CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_SUCCESS);
@ -239,7 +240,8 @@ test_get_log_page(void)
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
memset(&rsp, 0, sizeof(rsp)); memset(&rsp, 0, sizeof(rsp));
cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE; cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE;
cmd.nvme_cmd.cdw10 = SPDK_NVME_LOG_ERROR | (req.length / 4 - 1) << 16; cmd.nvme_cmd.cdw10_bits.get_log_page.lid = SPDK_NVME_LOG_ERROR;
cmd.nvme_cmd.cdw10_bits.get_log_page.numdl = (req.length / 4 - 1);
cmd.nvme_cmd.cdw12 = 2; cmd.nvme_cmd.cdw12 = 2;
CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE); CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC); CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
@ -250,7 +252,8 @@ test_get_log_page(void)
memset(&rsp, 0, sizeof(rsp)); memset(&rsp, 0, sizeof(rsp));
req.data = NULL; req.data = NULL;
cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE; cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_LOG_PAGE;
cmd.nvme_cmd.cdw10 = SPDK_NVME_LOG_ERROR | (req.length / 4 - 1) << 16; cmd.nvme_cmd.cdw10_bits.get_log_page.lid = SPDK_NVME_LOG_ERROR;
cmd.nvme_cmd.cdw10_bits.get_log_page.numdl = (req.length / 4 - 1);
CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE); CU_ASSERT(spdk_nvmf_ctrlr_get_log_page(&req) == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC); CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD); CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
@ -720,7 +723,7 @@ test_get_ns_id_desc_list(void)
memset(&cmd, 0, sizeof(cmd)); memset(&cmd, 0, sizeof(cmd));
cmd.nvme_cmd.opc = SPDK_NVME_OPC_IDENTIFY; cmd.nvme_cmd.opc = SPDK_NVME_OPC_IDENTIFY;
cmd.nvme_cmd.cdw10 = SPDK_NVME_IDENTIFY_NS_ID_DESCRIPTOR_LIST; cmd.nvme_cmd.cdw10_bits.identify.cns = SPDK_NVME_IDENTIFY_NS_ID_DESCRIPTOR_LIST;
/* Invalid NSID */ /* Invalid NSID */
cmd.nvme_cmd.nsid = 0; cmd.nvme_cmd.nsid = 0;
@ -920,7 +923,7 @@ test_set_get_features(void)
/* Get SPDK_NVME_FEAT_HOST_RESERVE_PERSIST feature */ /* Get SPDK_NVME_FEAT_HOST_RESERVE_PERSIST feature */
cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_FEATURES; cmd.nvme_cmd.opc = SPDK_NVME_OPC_GET_FEATURES;
cmd.nvme_cmd.cdw10 = SPDK_NVME_FEAT_HOST_RESERVE_PERSIST; cmd.nvme_cmd.cdw10_bits.get_features.fid = SPDK_NVME_FEAT_HOST_RESERVE_PERSIST;
rc = spdk_nvmf_ctrlr_get_features_reservation_persistence(&req); rc = spdk_nvmf_ctrlr_get_features_reservation_persistence(&req);
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE); CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
CU_ASSERT(rsp.nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC); CU_ASSERT(rsp.nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);

View File

@ -571,14 +571,15 @@ ut_reservation_build_register_request(struct spdk_nvmf_request *req,
uint8_t cptpl, uint64_t crkey, uint8_t cptpl, uint64_t crkey,
uint64_t nrkey) uint64_t nrkey)
{ {
uint32_t cdw10;
struct spdk_nvme_reservation_register_data key; struct spdk_nvme_reservation_register_data key;
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
cdw10 = (((uint32_t)cptpl << 30) | ((uint32_t)iekey << 3) | rrega);
key.crkey = crkey; key.crkey = crkey;
key.nrkey = nrkey; key.nrkey = nrkey;
cmd->cdw10 = cdw10; cmd->cdw10 = 0;
cmd->cdw10_bits.resv_register.rrega = rrega;
cmd->cdw10_bits.resv_register.iekey = iekey;
cmd->cdw10_bits.resv_register.cptpl = cptpl;
memcpy(req->data, &key, sizeof(key)); memcpy(req->data, &key, sizeof(key));
} }
@ -588,14 +589,15 @@ ut_reservation_build_acquire_request(struct spdk_nvmf_request *req,
uint8_t rtype, uint64_t crkey, uint8_t rtype, uint64_t crkey,
uint64_t prkey) uint64_t prkey)
{ {
uint32_t cdw10;
struct spdk_nvme_reservation_acquire_data key; struct spdk_nvme_reservation_acquire_data key;
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
cdw10 = ((rtype << 8) | (iekey << 3) | racqa);
key.crkey = crkey; key.crkey = crkey;
key.prkey = prkey; key.prkey = prkey;
cmd->cdw10 = cdw10; cmd->cdw10 = 0;
cmd->cdw10_bits.resv_acquire.racqa = racqa;
cmd->cdw10_bits.resv_acquire.iekey = iekey;
cmd->cdw10_bits.resv_acquire.rtype = rtype;
memcpy(req->data, &key, sizeof(key)); memcpy(req->data, &key, sizeof(key));
} }
@ -604,11 +606,12 @@ ut_reservation_build_release_request(struct spdk_nvmf_request *req,
uint8_t rrela, uint8_t iekey, uint8_t rrela, uint8_t iekey,
uint8_t rtype, uint64_t crkey) uint8_t rtype, uint64_t crkey)
{ {
uint32_t cdw10;
struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd; struct spdk_nvme_cmd *cmd = &req->cmd->nvme_cmd;
cdw10 = ((rtype << 8) | (iekey << 3) | rrela); cmd->cdw10 = 0;
cmd->cdw10 = cdw10; cmd->cdw10_bits.resv_release.rrela = rrela;
cmd->cdw10_bits.resv_release.iekey = iekey;
cmd->cdw10_bits.resv_release.rtype = rtype;
memcpy(req->data, &crkey, sizeof(crkey)); memcpy(req->data, &crkey, sizeof(crkey));
} }