nvme: Add tertiary number to NVME_VS
Subsystems (2)
PATCH 1/1 nvme: Add tertiary number to NVME_VS
NVMe 1.2.1 specification adds a tertiary element to the version number. This updates the macro and its callers to include the final number and fixup a single place in nvmet where the version was generated manually.
For versions prior to 1.2.1, which didn't have the tertiary number, it's ok to assume the last number as zero, because that bit would be reserved, and the specification defines reserved bits as 0.
--- drivers/nvme/host/core.c | 8 ++++---- drivers/nvme/host/pci.c | 4 ++-- drivers/nvme/host/scsi.c | 4 ++-- drivers/nvme/target/core.c | 2 +- include/linux/nvme.h | 3 ++- 5 files changed, 11 insertions(+), 10 deletions(-)
drivers/nvme/host/core.c +4 -4
@@ -920,9 +920,9 @@ static int nvme_revalidate_disk(struct gendisk *disk) ns->type =NVME_NS_LIGHTNVM ; } -if (ns->ctrl->vs >=NVME_VS (1 ,1 )) +if (ns->ctrl->vs >=NVME_VS (1 ,1 ,0 ))memcpy (ns->eui, id->eui64,sizeof (ns->eui)); -if (ns->ctrl->vs >=NVME_VS (1 ,2 )) +if (ns->ctrl->vs >=NVME_VS (1 ,2 ,0 ))memcpy (ns->uuid, id->nguid,sizeof (ns->uuid)); old_ms = ns->ms;
@@ -1232,7 +1232,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl) } page_shift =NVME_CAP_MPSMIN (cap) +12 ; -if (ctrl->vs >=NVME_VS (1 ,1 )) +if (ctrl->vs >=NVME_VS (1 ,1 ,0 )) ctrl->subsystem =NVME_CAP_NSSRC (cap); ret =nvme_identify_ctrl (ctrl, &id);
@@ -1815,7 +1815,7 @@ static void nvme_scan_work(struct work_struct *work)return ; nn =le32_to_cpu (id->nn); -if (ctrl->vs >=NVME_VS (1 ,1 ) && +if (ctrl->vs >=NVME_VS (1 ,1 ,0 ) && !(ctrl->quirks &NVME_QUIRK_IDENTIFY_CNS )) {if (!nvme_scan_ns_list (ctrl, nn)) goto done;
drivers/nvme/host/pci.c +2 -2
@@ -1204,7 +1204,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)u64 cap =lo_hi_readq (dev->bar +NVME_REG_CAP );struct nvme_queue *nvmeq; - dev->subsystem =readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,1 ) ? + dev->subsystem =readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,1 ,0 ) ?NVME_CAP_NSSRC (cap) :0 ; if (dev->subsystem &&
@@ -1642,7 +1642,7 @@ static int nvme_pci_enable(struct nvme_dev *dev) dev->q_depth); } -if (readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,2 )) +if (readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,2 ,0 )) dev->cmb =nvme_map_cmb (dev);pci_enable_pcie_error_reporting (pdev);
drivers/nvme/host/scsi.c +2 -2
@@ -615,7 +615,7 @@ static int nvme_fill_device_id_eui64(struct nvme_ns *ns, struct sg_io_hdr *hdr, eui = id_ns->eui64; len =sizeof (id_ns->eui64); -if (ns->ctrl->vs >=NVME_VS (1 ,2 )) { +if (ns->ctrl->vs >=NVME_VS (1 ,2 ,0 )) {if (bitmap_empty (eui, len *8 )) { eui = id_ns->nguid; len =sizeof (id_ns->nguid);
@@ -688,7 +688,7 @@ static int nvme_trans_device_id_page(struct nvme_ns *ns, struct sg_io_hdr *hdr, {int res; -if (ns->ctrl->vs >=NVME_VS (1 ,1 )) { +if (ns->ctrl->vs >=NVME_VS (1 ,1 ,0 )) { res =nvme_fill_device_id_eui64 (ns, hdr, resp, alloc_len);if (res != -EOPNOTSUPP )return res;
drivers/nvme/target/core.c +1 -1
@@ -882,7 +882,7 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,if (!subsys)return NULL ; - subsys->ver = (1 <<16 ) | (2 <<8 ) |1 ;/* NVMe 1.2.1 */ + subsys->ver =NVME_VS (1 ,2 ,1 );switch (type) {case NVME_NQN_NVME :
include/linux/nvme.h +2 -1
@@ -960,6 +960,7 @@ struct nvme_completion { __le16 status; /* did the command fail, and if so, why? */ }; -#define NVME_VS (major, minor) (((major) << 16) | ((minor) << 8)) +#define NVME_VS (major, minor, tertiary) \ + (((major) << 16) | ((minor) << 8) | (tertiary))#endif /* _LINUX_NVME_H */
Signature · 1 line
2.7.4
PATCH 1/1 nvme: Add tertiary number to NVME_VS
Quoted 7 lines · Gabriel Krisman Bertazi
NVMe 1.2.1 specification adds a tertiary element to the version number. This updates the macro and its callers to include the final number and fixup a single place in nvmet where the version was generated manually.
For versions prior to 1.2.1, which didn't have the tertiary number, it's ok to assume the last number as zero, because that bit would be reserved, and the specification defines reserved bits as 0.
Nice cleanups, thanks a lot!
Sagi Grimberg
maintainerPATCH 1/1 nvme: Add tertiary number to NVME_VS
In reply to Gabriel Krisman BertaziLooks good,
PATCH 1/1 nvme: Add tertiary number to NVME_VS
In reply to Gabriel Krisman BertaziQuoted 8 lines · Gabriel Krisman Bertazi
NVMe 1.2.1 specification adds a tertiary element to the version number. This updates the macro and its callers to include the final number and fixup a single place in nvmet where the version was generated manually.
For versions prior to 1.2.1, which didn't have the tertiary number, it's ok to assume the last number as zero, because that bit would be reserved, and the specification defines reserved bits as 0.
+Jens
I don't see this applied anywhere.. so ping. Sorry if I missed it. :)
Quoted 113 lines
Signed-off-by Gabriel Krisman Bertazi <krisman at linux.vnet.ibm.com>--- drivers/nvme/host/core.c | 8 ++++---- drivers/nvme/host/pci.c | 4 ++-- drivers/nvme/host/scsi.c | 4 ++-- drivers/nvme/target/core.c | 2 +- include/linux/nvme.h | 3 ++- 5 files changed, 11 insertions(+), 10 deletions(-)drivers/nvme/host/core.c +4
-4@@ -920,9 +920,9 @@ static int nvme_revalidate_disk(struct gendisk *disk) ns->type =NVME_NS_LIGHTNVM ; } -if (ns->ctrl->vs >=NVME_VS (1 ,1 )) +if (ns->ctrl->vs >=NVME_VS (1 ,1 ,0 ))memcpy (ns->eui, id->eui64,sizeof (ns->eui)); -if (ns->ctrl->vs >=NVME_VS (1 ,2 )) +if (ns->ctrl->vs >=NVME_VS (1 ,2 ,0 ))memcpy (ns->uuid, id->nguid,sizeof (ns->uuid)); old_ms = ns->ms;@@ -1232,7 +1232,7 @@ int nvme_init_identify(struct nvme_ctrl *ctrl) } page_shift =NVME_CAP_MPSMIN (cap) +12 ; -if (ctrl->vs >=NVME_VS (1 ,1 )) +if (ctrl->vs >=NVME_VS (1 ,1 ,0 )) ctrl->subsystem =NVME_CAP_NSSRC (cap); ret =nvme_identify_ctrl (ctrl, &id);@@ -1815,7 +1815,7 @@ static void nvme_scan_work(struct work_struct *work)return ; nn =le32_to_cpu (id->nn); -if (ctrl->vs >=NVME_VS (1 ,1 ) && +if (ctrl->vs >=NVME_VS (1 ,1 ,0 ) && !(ctrl->quirks &NVME_QUIRK_IDENTIFY_CNS )) {if (!nvme_scan_ns_list (ctrl, nn)) goto done;drivers/nvme/host/pci.c +2
-2@@ -1204,7 +1204,7 @@ static int nvme_configure_admin_queue(struct nvme_dev *dev)u64 cap =lo_hi_readq (dev->bar +NVME_REG_CAP );struct nvme_queue *nvmeq; - dev->subsystem =readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,1 ) ? + dev->subsystem =readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,1 ,0 ) ?NVME_CAP_NSSRC (cap) :0 ; if (dev->subsystem &&@@ -1642,7 +1642,7 @@ static int nvme_pci_enable(struct nvme_dev *dev) dev->q_depth); } -if (readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,2 )) +if (readl (dev->bar +NVME_REG_VS ) >=NVME_VS (1 ,2 ,0 )) dev->cmb =nvme_map_cmb (dev);pci_enable_pcie_error_reporting (pdev);drivers/nvme/host/scsi.c +2
-2@@ -615,7 +615,7 @@ static int nvme_fill_device_id_eui64(struct nvme_ns *ns, struct sg_io_hdr *hdr, eui = id_ns->eui64; len =sizeof (id_ns->eui64); -if (ns->ctrl->vs >=NVME_VS (1 ,2 )) { +if (ns->ctrl->vs >=NVME_VS (1 ,2 ,0 )) {if (bitmap_empty (eui, len *8 )) { eui = id_ns->nguid; len =sizeof (id_ns->nguid);@@ -688,7 +688,7 @@ static int nvme_trans_device_id_page(struct nvme_ns *ns, struct sg_io_hdr *hdr, {int res; -if (ns->ctrl->vs >=NVME_VS (1 ,1 )) { +if (ns->ctrl->vs >=NVME_VS (1 ,1 ,0 )) { res =nvme_fill_device_id_eui64 (ns, hdr, resp, alloc_len);if (res != -EOPNOTSUPP )return res;drivers/nvme/target/core.c +1
-1@@ -882,7 +882,7 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,if (!subsys)return NULL ; - subsys->ver = (1 <<16 ) | (2 <<8 ) |1 ;/* NVMe 1.2.1 */ + subsys->ver =NVME_VS (1 ,2 ,1 );switch (type) {case NVME_NQN_NVME :include/linux/nvme.h +2
-1@@ -960,6 +960,7 @@ struct nvme_completion { __le16 status; /* did the command fail, and if so, why? */ }; -#define NVME_VS (major, minor) (((major) << 16) | ((minor) << 8)) +#define NVME_VS (major, minor, tertiary) \ + (((major) << 16) | ((minor) << 8) | (tertiary))#endif /* _LINUX_NVME_H */
Signature · 1 line
Gabriel Krisman Bertazi