nvmf: Add NVMe fused operations to spdk_nvmf_ctrlr_data

Fused compare_and_write operation is always advertised by the nvmf
transport.

Add the fuses structure to spdk_nvmf_ctrlr_data to make advertising
fused operation configurable.

Signed-off-by: Alexis Lescouet <alexis.lescouet@nutanix.com>
Change-Id: I73ee03dc8948f1d250cc0a8f0b8a3bde042a45e7
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12917
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: John Levon <levon@movementarian.org>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Alexis Lescouet 2022-05-30 11:17:12 +01:00 committed by Tomasz Zawadzki
parent ddf8904c51
commit cbfd581c13
3 changed files with 9 additions and 5 deletions

View File

@ -1891,6 +1891,11 @@ struct spdk_nvme_cdata_oacs {
uint16_t oacs_rsvd : 6; uint16_t oacs_rsvd : 6;
}; };
struct spdk_nvme_cdata_fuses {
uint16_t compare_and_write : 1;
uint16_t reserved : 15;
};
struct __attribute__((packed)) spdk_nvme_ctrlr_data { struct __attribute__((packed)) spdk_nvme_ctrlr_data {
/* bytes 0-255: controller capabilities and features */ /* bytes 0-255: controller capabilities and features */
@ -2181,10 +2186,7 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data {
struct spdk_nvme_cdata_oncs oncs; struct spdk_nvme_cdata_oncs oncs;
/** fused operation support */ /** fused operation support */
struct { struct spdk_nvme_cdata_fuses fuses;
uint16_t compare_and_write : 1;
uint16_t reserved : 15;
} fuses;
/** format nvm attributes */ /** format nvm attributes */
struct { struct {

View File

@ -184,6 +184,7 @@ struct spdk_nvmf_ctrlr_data {
uint8_t ieee[3]; uint8_t ieee[3];
struct spdk_nvme_cdata_oacs oacs; struct spdk_nvme_cdata_oacs oacs;
struct spdk_nvme_cdata_oncs oncs; struct spdk_nvme_cdata_oncs oncs;
struct spdk_nvme_cdata_fuses fuses;
struct spdk_nvme_cdata_sgls sgls; struct spdk_nvme_cdata_sgls sgls;
struct spdk_nvme_cdata_nvmf_specific nvmf_specific; struct spdk_nvme_cdata_nvmf_specific nvmf_specific;
}; };

View File

@ -291,6 +291,7 @@ nvmf_ctrlr_cdata_init(struct spdk_nvmf_transport *transport, struct spdk_nvmf_su
cdata->ieee[1] = 0xd2; cdata->ieee[1] = 0xd2;
cdata->ieee[2] = 0x5c; cdata->ieee[2] = 0x5c;
cdata->oncs.reservations = 1; cdata->oncs.reservations = 1;
cdata->fuses.compare_and_write = 1;
cdata->sgls.supported = 1; cdata->sgls.supported = 1;
cdata->sgls.keyed_sgl = 1; cdata->sgls.keyed_sgl = 1;
cdata->sgls.sgl_offset = 1; cdata->sgls.sgl_offset = 1;
@ -2635,7 +2636,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c
cdata->elpe = 127; cdata->elpe = 127;
cdata->maxcmd = transport->opts.max_queue_depth; cdata->maxcmd = transport->opts.max_queue_depth;
cdata->sgls = ctrlr->cdata.sgls; cdata->sgls = ctrlr->cdata.sgls;
cdata->fuses.compare_and_write = 1; cdata->fuses = ctrlr->cdata.fuses;
cdata->acwu = 0; /* ACWU is 0-based. */ cdata->acwu = 0; /* ACWU is 0-based. */
if (subsystem->flags.ana_reporting) { if (subsystem->flags.ana_reporting) {
cdata->mnan = subsystem->max_nsid; cdata->mnan = subsystem->max_nsid;