From 6308a24f5608c9aa46bb19f02ec45161082890e3 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 20 Jan 2021 17:26:25 +0800 Subject: [PATCH] nvme: add a new custom transport SPDK_NVME_TRANSPORT_VFIOUSER The new custom transport can enable NVMe driver running with NVMe over vfio-user target. Change-Id: I5f90e8516eaca08fc3eab658b29b760a03326ff7 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5996 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- CHANGELOG.md | 5 +++++ include/spdk/nvme.h | 16 +++++++++++----- lib/nvme/nvme.c | 7 +++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b05c91eb..4e84124da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,8 +47,13 @@ are added for Directive Send and Directive Receive command, respectively. Added a new function `spdk_nvme_ctrlr_reset_subsystem` to perform a NVMe subsystem reset. Note: The NVMf target does not support the subsystem reset yet. + Add a new function 'spdk_nvme_bytes_to_numd' to transfer bytes to number of dwords. + +Added a new custom transport `SPDK_NVME_TRANSPORT_VFIOUSER` to enable NVMe +driver running with NVMe over vfio-user target. + ### event The pci_whitelist and pci_blacklist members of struct spdk_app_opts have been diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 48b4cde21..45b9f94e1 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -48,11 +48,12 @@ extern "C" { #include "spdk/nvme_spec.h" #include "spdk/nvmf_spec.h" -#define SPDK_NVME_TRANSPORT_NAME_FC "FC" -#define SPDK_NVME_TRANSPORT_NAME_PCIE "PCIE" -#define SPDK_NVME_TRANSPORT_NAME_RDMA "RDMA" -#define SPDK_NVME_TRANSPORT_NAME_TCP "TCP" -#define SPDK_NVME_TRANSPORT_NAME_CUSTOM "CUSTOM" +#define SPDK_NVME_TRANSPORT_NAME_FC "FC" +#define SPDK_NVME_TRANSPORT_NAME_PCIE "PCIE" +#define SPDK_NVME_TRANSPORT_NAME_RDMA "RDMA" +#define SPDK_NVME_TRANSPORT_NAME_TCP "TCP" +#define SPDK_NVME_TRANSPORT_NAME_VFIOUSER "VFIOUSER" +#define SPDK_NVME_TRANSPORT_NAME_CUSTOM "CUSTOM" #define SPDK_NVMF_PRIORITY_MAX_LEN 4 @@ -320,6 +321,11 @@ enum spdk_nvme_transport_type { */ SPDK_NVME_TRANSPORT_TCP = SPDK_NVMF_TRTYPE_TCP, + /** + * Custom VFIO User Transport (Not spec defined) + */ + SPDK_NVME_TRANSPORT_VFIOUSER = 1024, + /** * Custom Transport (Not spec defined) */ diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index c0eb24dd6..a23abf15f 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -1030,6 +1030,9 @@ spdk_nvme_trid_populate_transport(struct spdk_nvme_transport_id *trid, case SPDK_NVME_TRANSPORT_TCP: trstring = SPDK_NVME_TRANSPORT_NAME_TCP; break; + case SPDK_NVME_TRANSPORT_VFIOUSER: + trstring = SPDK_NVME_TRANSPORT_NAME_VFIOUSER; + break; case SPDK_NVME_TRANSPORT_CUSTOM: trstring = SPDK_NVME_TRANSPORT_NAME_CUSTOM; break; @@ -1082,6 +1085,8 @@ spdk_nvme_transport_id_parse_trtype(enum spdk_nvme_transport_type *trtype, const *trtype = SPDK_NVME_TRANSPORT_FC; } else if (strcasecmp(str, "TCP") == 0) { *trtype = SPDK_NVME_TRANSPORT_TCP; + } else if (strcasecmp(str, "VFIOUSER") == 0) { + *trtype = SPDK_NVME_TRANSPORT_VFIOUSER; } else { *trtype = SPDK_NVME_TRANSPORT_CUSTOM; } @@ -1100,6 +1105,8 @@ spdk_nvme_transport_id_trtype_str(enum spdk_nvme_transport_type trtype) return "FC"; case SPDK_NVME_TRANSPORT_TCP: return "TCP"; + case SPDK_NVME_TRANSPORT_VFIOUSER: + return "VFIOUSER"; case SPDK_NVME_TRANSPORT_CUSTOM: return "CUSTOM"; default: