]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
Add function to get specific feature buffer lengths
authorBrandon Paupore <brandon.paupore@wdc.com>
Tue, 31 Aug 2021 15:01:05 +0000 (10:01 -0500)
committerKeith Busch <kbusch@kernel.org>
Tue, 7 Sep 2021 17:43:33 +0000 (11:43 -0600)
Signed-off-by: Brandon Paupore <brandon.paupore@wdc.com>
nvme.c
nvme.h
plugins/wdc/wdc-nvme.c

diff --git a/nvme.c b/nvme.c
index 2d30f398c5123af39a6905bf6055fd56384c06d4..0c9a201bf708ce891e9d6e7d34ebcc8088106eeb 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -365,6 +365,10 @@ ret:
        return nvme_status_to_errno(err, false);
 }
 
+__u16 get_feat_buf_len(unsigned short feature) {
+       return nvme_feat_buf_len[feature];
+}
+
 static int get_telemetry_log(int argc, char **argv, struct command *cmd, struct plugin *plugin)
 {
        const char *desc = "Retrieve telemetry log and write to binary file";
diff --git a/nvme.h b/nvme.h
index 16c493d62ca9535b04d6d16f9000d9a3795b78ab..e89be10bd976d8dd061d7b7163a87fad7cebac9a 100644 (file)
--- a/nvme.h
+++ b/nvme.h
@@ -152,5 +152,5 @@ static inline void nvme_strip_spaces(char *s, int l)
         while (l && (s[l] == '\0' || s[l] == ' '))
                 s[l--] = '\0';
 }
-
+__u16 get_feat_buf_len(unsigned short feature);
 #endif /* _NVME_H */
index 3a6bcb37403a2a5e9f63fd87be9ec1e8bc5fa39a..9e92ba0d92773a0ff7f4280b01d09e0cbe1d6e6d 100644 (file)
@@ -524,17 +524,6 @@ typedef enum
     EOL_RRER                = 108,     /* Raw Read Error Rate */
 } EOL_LOG_PAGE_C0_OFFSETS;
 
-static __u16 nvme_wdc_feat_buf_len[0x100] = {
-       [NVME_FEAT_LBA_RANGE]       = 4096,
-       [NVME_FEAT_AUTO_PST]        = 256,
-       [NVME_FEAT_HOST_MEM_BUF]    = 4096,
-       [NVME_FEAT_HOST_ID]         = 8,
-       [NVME_FEAT_PLM_CONFIG]      = 512,
-       [NVME_FEAT_TIMESTAMP]       = 8,
-       [NVME_FEAT_HOST_BEHAVIOR]   = 512
-};
-
-
 typedef struct __attribute__((__packed__)) _WDC_DE_VU_FILE_META_DATA
 {
     __u8 fileName[WDC_DE_FILE_NAME_SIZE];
@@ -2080,16 +2069,16 @@ static int wdc_do_cap_telemetry_log(int fd, char *file, __u32 bs, int type, int
                        goto close_output;
                }
                
-               if (posix_memalign(&buf, getpagesize(), nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR])) {
+               if (posix_memalign(&buf, getpagesize(), get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR))) {
                        fprintf(stderr, "can not allocate feature payload\n");
                        errno = ENOMEM;
                        err = -1;
                        goto close_output;
                }
-               memset(buf, 0, nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR]);
+               memset(buf, 0, get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR));
 
                err = nvme_get_feature(fd, NVME_NSID_ALL, NVME_FEAT_HOST_BEHAVIOR, 0, 0,
-                               0, nvme_wdc_feat_buf_len[NVME_FEAT_HOST_BEHAVIOR], buf, &result);
+                               0, get_feat_buf_len(NVME_FEAT_HOST_BEHAVIOR), buf, &result);
                if (err > 0) {
                        nvme_show_status(err);
                } else if (err < 0) {