nvme: reserve a metadata SGL entry when PSDT uses 10b
When the drives report that SGL dword alignment is required in Identify Controller data structure, when using separate metadata, PSDT should only be set with 10b. The specification says: If PSDT 01b was used, Metadata Pointer (MPTR) contains an address of a single contiguous physical buffer that is byte aligned. For supporting this case, SPDK driver needs a metadata SGL entry, so we can reserve one entry in the tracker data structure. Change-Id: I2d86a58b0395c3000626f922e56d7f2212c8a752 Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1316 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
2cf937fb92
commit
fcc5993f5f
@ -54,9 +54,9 @@
|
||||
* NVME_MAX_SGL_DESCRIPTORS defines the maximum number of descriptors in one SGL
|
||||
* segment.
|
||||
*/
|
||||
#define NVME_MAX_SGL_DESCRIPTORS (251)
|
||||
#define NVME_MAX_SGL_DESCRIPTORS (250)
|
||||
|
||||
#define NVME_MAX_PRP_LIST_ENTRIES (505)
|
||||
#define NVME_MAX_PRP_LIST_ENTRIES (503)
|
||||
|
||||
struct nvme_pcie_enum_ctx {
|
||||
struct spdk_nvme_probe_ctx *probe_ctx;
|
||||
@ -120,6 +120,8 @@ struct nvme_tracker {
|
||||
|
||||
uint64_t prp_sgl_bus_addr;
|
||||
|
||||
/* Don't move, metadata SGL is always contiguous with Data Block SGL */
|
||||
struct spdk_nvme_sgl_descriptor meta_sgl;
|
||||
union {
|
||||
uint64_t prp[NVME_MAX_PRP_LIST_ENTRIES];
|
||||
struct spdk_nvme_sgl_descriptor sgl[NVME_MAX_SGL_DESCRIPTORS];
|
||||
@ -131,6 +133,7 @@ struct nvme_tracker {
|
||||
*/
|
||||
SPDK_STATIC_ASSERT(sizeof(struct nvme_tracker) == 4096, "nvme_tracker is not 4K");
|
||||
SPDK_STATIC_ASSERT((offsetof(struct nvme_tracker, u.sgl) & 7) == 0, "SGL must be Qword aligned");
|
||||
SPDK_STATIC_ASSERT((offsetof(struct nvme_tracker, meta_sgl) & 7) == 0, "SGL must be Qword aligned");
|
||||
|
||||
/* PCIe transport extensions for spdk_nvme_qpair */
|
||||
struct nvme_pcie_qpair {
|
||||
|
Loading…
x
Reference in New Issue
Block a user