Skip to content

Commit e4ab11b

Browse files
authored
Merge pull request #144 from igaw/add_get_log_page_fields_2.0
ioctl: Add Offset Type to get_log_page()
2 parents 80c3074 + c35c684 commit e4ab11b

4 files changed

Lines changed: 46 additions & 30 deletions

File tree

src/nvme/ioctl.c

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ enum nvme_cmd_dword_fields {
228228
NVME_LOG_CDW11_LSI_SHIFT = 16,
229229
NVME_LOG_CDW14_UUID_SHIFT = 0,
230230
NVME_LOG_CDW14_CSI_SHIFT = 24,
231+
NVME_LOG_CDW14_OT_SHIFT = 23,
231232
NVME_LOG_CDW10_LID_MASK = 0xff,
232233
NVME_LOG_CDW10_LSP_MASK = 0xf,
233234
NVME_LOG_CDW10_RAE_MASK = 0x1,
@@ -236,6 +237,7 @@ enum nvme_cmd_dword_fields {
236237
NVME_LOG_CDW11_LSI_MASK = 0xff,
237238
NVME_LOG_CDW14_UUID_MASK = 0x7f,
238239
NVME_LOG_CDW14_CSI_MASK = 0xff,
240+
NVME_LOG_CDW14_OT_MASK = 0x1,
239241
NVME_IDENTIFY_CDW10_CNS_SHIFT = 0,
240242
NVME_IDENTIFY_CDW10_CNTID_SHIFT = 16,
241243
NVME_IDENTIFY_CDW11_NVMSETID_SHIFT = 0,
@@ -594,7 +596,7 @@ int nvme_nvm_identify_ctrl(int fd, struct nvme_id_ctrl_nvm *id)
594596

595597
int nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, __u32 nsid, __u64 lpo,
596598
__u8 lsp, __u16 lsi, bool rae, __u8 uuidx, enum nvme_csi csi,
597-
__u32 len, void *log, __u32 timeout, __u32 *result)
599+
bool ot, __u32 len, void *log, __u32 timeout, __u32 *result)
598600
{
599601
__u32 numd = (len >> 2) - 1;
600602
__u16 numdu = numd >> 16, numdl = numd & 0xffff;
@@ -608,7 +610,8 @@ int nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, __u32 nsid, __u64 lpo,
608610
__u32 cdw12 = lpo & 0xffffffff;
609611
__u32 cdw13 = lpo >> 32;
610612
__u32 cdw14 = NVME_SET(uuidx, LOG_CDW14_UUID) |
611-
NVME_SET(csi, LOG_CDW14_CSI);
613+
NVME_SET(csi, LOG_CDW14_CSI) |
614+
NVME_SET(!!ot, LOG_CDW14_OT);
612615

613616
struct nvme_passthru_cmd cmd = {
614617
.opcode = nvme_admin_get_log_page,
@@ -631,8 +634,8 @@ static int __nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, bool rae,
631634
{
632635
return nvme_get_log(fd, lid, NVME_NSID_ALL, 0, NVME_LOG_LSP_NONE,
633636
NVME_LOG_LSI_NONE, rae, NVME_UUID_NONE,
634-
NVME_CSI_NVM, len, log, NVME_DEFAULT_IOCTL_TIMEOUT,
635-
NULL);
637+
NVME_CSI_NVM, false, len, log,
638+
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
636639
}
637640

638641
int nvme_get_log_supported_log_pages(int fd, bool rae,
@@ -656,8 +659,9 @@ int nvme_get_log_smart(int fd, __u32 nsid, bool rae, struct nvme_smart_log *log)
656659
BUILD_ASSERT(sizeof(struct nvme_smart_log) == 512);
657660
return nvme_get_log(fd, NVME_LOG_LID_SMART, nsid, 0,
658661
NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE, rae,
659-
NVME_UUID_NONE, NVME_CSI_NVM, sizeof(*log), log,
660-
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
662+
NVME_UUID_NONE, NVME_CSI_NVM, false,
663+
sizeof(*log), log, NVME_DEFAULT_IOCTL_TIMEOUT,
664+
NULL);
661665
}
662666

663667
int nvme_get_log_fw_slot(int fd, bool rae, struct nvme_firmware_slot *log)
@@ -679,7 +683,7 @@ int nvme_get_log_cmd_effects(int fd, enum nvme_csi csi,
679683
BUILD_ASSERT(sizeof(struct nvme_cmd_effects_log) == 4096);
680684
return nvme_get_log(fd, NVME_LOG_LID_CMD_EFFECTS, NVME_NSID_ALL, 0,
681685
NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE,
682-
NVME_UUID_NONE, csi, false, sizeof(*log),
686+
NVME_UUID_NONE, csi, false, false, sizeof(*log),
683687
log, NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
684688
}
685689

@@ -700,25 +704,26 @@ int nvme_get_log_create_telemetry_host(int fd, struct nvme_telemetry_log *log)
700704
BUILD_ASSERT(sizeof(struct nvme_telemetry_log) == 512);
701705
return nvme_get_log(fd, NVME_LOG_LID_TELEMETRY_HOST, NVME_NSID_NONE, 0,
702706
NVME_LOG_TELEM_HOST_LSP_CREATE, NVME_LOG_LSI_NONE,
703-
false, NVME_UUID_NONE, NVME_CSI_NVM, sizeof(*log),
704-
log, NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
707+
false, NVME_UUID_NONE, NVME_CSI_NVM, false,
708+
sizeof(*log), log, NVME_DEFAULT_IOCTL_TIMEOUT,
709+
NULL);
705710
}
706711

707712
int nvme_get_log_telemetry_host(int fd, __u64 offset, __u32 len, void *log)
708713
{
709714
return nvme_get_log(fd, NVME_LOG_LID_TELEMETRY_HOST, NVME_NSID_NONE,
710715
offset, NVME_LOG_TELEM_HOST_LSP_RETAIN,
711716
NVME_LOG_LSI_NONE, false, NVME_UUID_NONE,
712-
NVME_CSI_NVM, len, log, NVME_DEFAULT_IOCTL_TIMEOUT,
713-
NULL);
717+
NVME_CSI_NVM, false, len, log,
718+
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
714719
}
715720

716721
int nvme_get_log_telemetry_ctrl(int fd, bool rae, __u64 offset, __u32 len,
717722
void *log)
718723
{
719724
return nvme_get_log(fd, NVME_LOG_LID_TELEMETRY_CTRL, NVME_NSID_NONE,
720725
offset, NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE, rae,
721-
NVME_UUID_NONE, NVME_CSI_NVM, len, log,
726+
NVME_UUID_NONE, NVME_CSI_NVM, false, len, log,
722727
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
723728
}
724729

@@ -728,7 +733,7 @@ int nvme_get_log_endurance_group(int fd, __u16 endgid,
728733
BUILD_ASSERT(sizeof(struct nvme_endurance_group_log) == 512);
729734
return nvme_get_log(fd, NVME_LOG_LID_ENDURANCE_GROUP, NVME_NSID_NONE,
730735
0, NVME_LOG_LSP_NONE, endgid, false, NVME_UUID_NONE,
731-
NVME_CSI_NVM, sizeof(*log), log,
736+
NVME_CSI_NVM, false, sizeof(*log), log,
732737
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
733738
}
734739

@@ -738,8 +743,9 @@ int nvme_get_log_predictable_lat_nvmset(int fd, __u16 nvmsetid,
738743
BUILD_ASSERT(sizeof(struct nvme_nvmset_predictable_lat_log) == 512);
739744
return nvme_get_log(fd, NVME_LOG_LID_PREDICTABLE_LAT_NVMSET,
740745
NVME_NSID_NONE, 0, NVME_LOG_LSP_NONE, nvmsetid,
741-
false, NVME_UUID_NONE, NVME_CSI_NVM, sizeof(*log),
742-
log, NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
746+
false, NVME_UUID_NONE, NVME_CSI_NVM, false,
747+
sizeof(*log),log, NVME_DEFAULT_IOCTL_TIMEOUT,
748+
NULL);
743749
}
744750

745751
int nvme_get_log_predictable_lat_event(int fd, bool rae, __u32 offset,
@@ -748,7 +754,7 @@ int nvme_get_log_predictable_lat_event(int fd, bool rae, __u32 offset,
748754
return nvme_get_log(fd, NVME_LOG_LID_PREDICTABLE_LAT_AGG,
749755
NVME_NSID_NONE, offset, NVME_LOG_LSP_NONE,
750756
NVME_LOG_LSI_NONE, rae, NVME_UUID_NONE,
751-
NVME_CSI_NVM, len, log,
757+
NVME_CSI_NVM, false, len, log,
752758
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
753759
}
754760

@@ -757,8 +763,8 @@ int nvme_get_log_ana(int fd, enum nvme_log_ana_lsp lsp, bool rae, __u64 offset,
757763
{
758764
return nvme_get_log(fd, NVME_LOG_LID_ANA, NVME_NSID_NONE, offset,
759765
lsp, NVME_LOG_LSI_NONE, false, NVME_UUID_NONE,
760-
NVME_CSI_NVM, len, log, NVME_DEFAULT_IOCTL_TIMEOUT,
761-
NULL);
766+
NVME_CSI_NVM, false, len, log,
767+
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
762768
}
763769

764770
int nvme_get_log_ana_groups(int fd, bool rae, __u32 len,
@@ -773,7 +779,7 @@ int nvme_get_log_lba_status(int fd, bool rae, __u64 offset, __u32 len,
773779
{
774780
return nvme_get_log(fd, NVME_LOG_LID_LBA_STATUS, NVME_NSID_NONE,
775781
offset, NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE, rae,
776-
NVME_UUID_NONE, NVME_CSI_NVM, len, log,
782+
NVME_UUID_NONE, NVME_CSI_NVM, false, len, log,
777783
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
778784
}
779785

@@ -783,8 +789,8 @@ int nvme_get_log_endurance_grp_evt(int fd, bool rae, __u32 offset, __u32 len,
783789
return nvme_get_log(fd, NVME_LOG_LID_ENDURANCE_GRP_EVT,
784790
NVME_NSID_NONE, offset, NVME_LOG_LSP_NONE,
785791
NVME_LOG_LSI_NONE, rae, NVME_UUID_NONE,
786-
NVME_CSI_NVM, len, log, NVME_DEFAULT_IOCTL_TIMEOUT,
787-
NULL);
792+
NVME_CSI_NVM, false, len, log,
793+
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
788794
}
789795

790796
int nvme_get_log_fid_supported_effects(int fd, bool rae,
@@ -794,7 +800,7 @@ int nvme_get_log_fid_supported_effects(int fd, bool rae,
794800
return nvme_get_log(fd, NVME_LOG_LID_FID_SUPPORTED_EFFECTS,
795801
NVME_NSID_NONE, 0, NVME_LOG_LSP_NONE,
796802
NVME_LOG_LSI_NONE, rae, NVME_UUID_NONE,
797-
NVME_CSI_NVM, sizeof(*log), log,
803+
NVME_CSI_NVM, false, sizeof(*log), log,
798804
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
799805
}
800806

@@ -805,7 +811,7 @@ int nvme_get_log_boot_partition(int fd, bool rae, __u8 lsp, __u32 len,
805811
return nvme_get_log(fd, NVME_LOG_LID_BOOT_PARTITION,
806812
NVME_NSID_NONE, 0, NVME_LOG_LSP_NONE,
807813
NVME_LOG_LSI_NONE, rae, NVME_UUID_NONE,
808-
NVME_CSI_NVM, len, part,
814+
NVME_CSI_NVM, false, len, part,
809815
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
810816

811817
}
@@ -814,7 +820,7 @@ int nvme_get_log_discovery(int fd, bool rae, __u32 offset, __u32 len, void *log)
814820
{
815821
return nvme_get_log(fd, NVME_LOG_LID_DISCOVER, NVME_NSID_NONE, offset,
816822
NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE, rae,
817-
NVME_UUID_NONE, NVME_CSI_NVM, len, log,
823+
NVME_UUID_NONE, NVME_CSI_NVM, false, len, log,
818824
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
819825
}
820826

@@ -847,8 +853,9 @@ int nvme_get_log_zns_changed_zones(int fd, __u32 nsid, bool rae,
847853
BUILD_ASSERT(sizeof(struct nvme_zns_changed_zone_log) == 4096);
848854
return nvme_get_log(fd, NVME_LOG_LID_ZNS_CHANGED_ZONES, nsid, 0,
849855
NVME_LOG_LSP_NONE, NVME_LOG_LSI_NONE, rae,
850-
NVME_UUID_NONE, NVME_CSI_ZNS, sizeof(*log), log,
851-
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
856+
NVME_UUID_NONE, NVME_CSI_ZNS, false,
857+
sizeof(*log), log, NVME_DEFAULT_IOCTL_TIMEOUT,
858+
NULL);
852859
}
853860

854861
int nvme_set_features(int fd, __u8 fid, __u32 nsid, __u32 cdw11, __u32 cdw12,

src/nvme/ioctl.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -788,6 +788,13 @@ int nvme_zns_identify_ctrl(int fd, struct nvme_zns_id_ctrl *id);
788788
* @lsi: Endurance group information
789789
* @rae: Retain asynchronous events
790790
* @uuidx: UUID selection, if supported
791+
* @csi: Command Set Identifier
792+
* @ot: Offset Type. If set to false, the Log Page Offset Lower
793+
* field and the Log Page Offset Upper field specify the
794+
* byte offset into the log page to be returned.
795+
* If set to true, the Log Page Offset Lower field and the
796+
* Log Page Offset Upper field specify the index into the
797+
* list of data structures in the log page to be returned.
791798
* @len: Length of provided user buffer to hold the log data in bytes
792799
* @log: User space destination address to transfer the data
793800
* @timeout: Timeout in ms
@@ -798,13 +805,14 @@ int nvme_zns_identify_ctrl(int fd, struct nvme_zns_id_ctrl *id);
798805
*/
799806
int nvme_get_log(int fd, enum nvme_cmd_get_log_lid lid, __u32 nsid, __u64 lpo,
800807
__u8 lsp, __u16 lsi, bool rae, __u8 uuidx, enum nvme_csi csi,
801-
__u32 len, void *log, __u32 timeout, __u32 *result);
808+
bool ot, __u32 len, void *log, __u32 timeout, __u32 *result);
802809

803810
static inline int nvme_get_nsid_log(int fd, enum nvme_cmd_get_log_lid lid,
804811
__u32 nsid, __u32 len, void *log)
805812
{
806-
return nvme_get_log(fd, lid, nsid, 0, 0, 0, false, 0, NVME_CSI_NVM, len,
807-
log, NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
813+
return nvme_get_log(fd, lid, nsid, 0, 0, 0, false, 0, NVME_CSI_NVM,
814+
false, len, log, NVME_DEFAULT_IOCTL_TIMEOUT,
815+
NULL);
808816
}
809817

810818
static inline int nvme_get_log_simple(int fd, enum nvme_cmd_get_log_lid lid,

src/nvme/linux.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ int __nvme_get_log_page(int fd, __u32 nsid, __u8 log_id, bool rae,
124124

125125
ret = nvme_get_log(fd, log_id, nsid, offset, NVME_LOG_LSP_NONE,
126126
NVME_LOG_LSI_NONE, retain, NVME_UUID_NONE,
127-
NVME_CSI_NVM, xfer, ptr,
127+
NVME_CSI_NVM, false, xfer, ptr,
128128
NVME_DEFAULT_IOCTL_TIMEOUT, NULL);
129129
if (ret)
130130
return ret;

src/nvme/types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ enum nvme_constants {
114114
/**
115115
* enum nvme_csi - Defined command set indicators
116116
* @NVME_CSI_NVM: NVM Command Set Indicator
117+
* @NVME_CSI_ZNS: Zoned Namespace Command Set
117118
*/
118119
enum nvme_csi {
119120
NVME_CSI_NVM = 0,

0 commit comments

Comments
 (0)