From d4ef57c0724ef6ec505bc8cd6c43696b33e31c03 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Thu, 21 Jun 2018 11:35:52 -0700 Subject: [PATCH] nvme_spec: add VWC flush broadcast bits (TP 4035) Also report that the NVMe-oF target does not support Flush with the broadcast NSID. Change-Id: Iad761a6f81eb099940463a67074a6dccb8871b70 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/416445 Tested-by: SPDK Automated Test System Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker --- include/spdk/nvme_spec.h | 17 ++++++++++++++++- lib/nvmf/ctrlr.c | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/spdk/nvme_spec.h b/include/spdk/nvme_spec.h index dacf6d1d2..6b180b3f5 100644 --- a/include/spdk/nvme_spec.h +++ b/include/spdk/nvme_spec.h @@ -919,6 +919,20 @@ enum spdk_nvme_sgls_supported { SPDK_NVME_SGLS_SUPPORTED_DWORD_ALIGNED = 2, }; +/** Identify Controller data vwc.flush_broadcast values */ +enum spdk_nvme_flush_broadcast { + /** Support for NSID=FFFFFFFFh with Flush is not indicated. */ + SPDK_NVME_FLUSH_BROADCAST_NOT_INDICATED = 0, + + /* 01b: Reserved */ + + /** Flush does not support NSID set to FFFFFFFFh. */ + SPDK_NVME_FLUSH_BROADCAST_NOT_SUPPORTED = 2, + + /** Flush supports NSID set to FFFFFFFFh. */ + SPDK_NVME_FLUSH_BROADCAST_SUPPORTED = 3 +}; + struct __attribute__((packed)) spdk_nvme_ctrlr_data { /* bytes 0-255: controller capabilities and features */ @@ -1223,7 +1237,8 @@ struct __attribute__((packed)) spdk_nvme_ctrlr_data { /** volatile write cache */ struct { uint8_t present : 1; - uint8_t reserved : 7; + uint8_t flush_broadcast : 2; + uint8_t reserved : 5; } vwc; /** atomic write unit normal */ diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 909e5bcb8..ae2fc56d3 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -1211,6 +1211,7 @@ spdk_nvmf_ctrlr_identify_ctrlr(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvme_c cdata->cqes.max = 4; cdata->nn = subsystem->max_nsid; cdata->vwc.present = 1; + cdata->vwc.flush_broadcast = SPDK_NVME_FLUSH_BROADCAST_NOT_SUPPORTED; cdata->nvmf_specific.ioccsz = sizeof(struct spdk_nvme_cmd) / 16; cdata->nvmf_specific.iorcsz = sizeof(struct spdk_nvme_cpl) / 16;