Skip to content

Commit 69ee887

Browse files
committed
plugins/ocp: Use structure for ocp smart log
printed log tested (same), except below Remove wrong duplicated prints from stdout NVMe base errata version NVMe command set errata version Signed-off-by: Steven Seungcheol Lee <[email protected]>
1 parent 4f82fd2 commit 69ee887

File tree

5 files changed

+175
-130
lines changed

5 files changed

+175
-130
lines changed

plugins/ocp/ocp-print-json.c

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -136,85 +136,84 @@ static void json_fw_activation_history(const struct fw_activation_history *fw_hi
136136
printf("\n");
137137
}
138138

139-
static void json_smart_extended_log(void *data)
139+
static void json_smart_extended_log(struct ocp_smart_extended_log *log)
140140
{
141141
struct json_object *root;
142142
struct json_object *pmuw;
143143
struct json_object *pmur;
144144
uint16_t smart_log_ver = 0;
145-
__u8 *log_data = data;
146145
char guid[40];
147146

148147
root = json_create_object();
149148
pmuw = json_create_object();
150149
pmur = json_create_object();
151150

152151
json_object_add_value_uint64(pmuw, "hi",
153-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW + 8] & 0xFFFFFFFFFFFFFFFF));
152+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written[8]));
154153
json_object_add_value_uint64(pmuw, "lo",
155-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW] & 0xFFFFFFFFFFFFFFFF));
154+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written));
156155
json_object_add_value_object(root, "Physical media units written", pmuw);
157156
json_object_add_value_uint64(pmur, "hi",
158-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR + 8] & 0xFFFFFFFFFFFFFFFF));
157+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read[8]));
159158
json_object_add_value_uint64(pmur, "lo",
160-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR] & 0xFFFFFFFFFFFFFFFF));
159+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read));
161160
json_object_add_value_object(root, "Physical media units read", pmur);
162161
json_object_add_value_uint64(root, "Bad user nand blocks - Raw",
163-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BUNBR] & 0x0000FFFFFFFFFFFF));
162+
int48_to_long(log->bad_user_nand_blocks_raw));
164163
json_object_add_value_uint(root, "Bad user nand blocks - Normalized",
165-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BUNBN]));
164+
le16_to_cpu(log->bad_user_nand_blocks_normalized));
166165
json_object_add_value_uint64(root, "Bad system nand blocks - Raw",
167-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BSNBR] & 0x0000FFFFFFFFFFFF));
166+
int48_to_long(log->bad_system_nand_blocks_raw));
168167
json_object_add_value_uint(root, "Bad system nand blocks - Normalized",
169-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BSNBN]));
168+
le16_to_cpu(log->bad_system_nand_blocks_normalized));
170169
json_object_add_value_uint64(root, "XOR recovery count",
171-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_XRC]));
170+
le64_to_cpu(log->xor_recovery_count));
172171
json_object_add_value_uint64(root, "Uncorrectable read error count",
173-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UREC]));
172+
le64_to_cpu(log->uncorrectable_read_err_count));
174173
json_object_add_value_uint64(root, "Soft ecc error count",
175-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SEEC]));
174+
le64_to_cpu(log->soft_ecc_err_count));
176175
json_object_add_value_uint(root, "End to end detected errors",
177-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EEDC]));
176+
le32_to_cpu(log->end_to_end_detected_err));
178177
json_object_add_value_uint(root, "End to end corrected errors",
179-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
178+
le32_to_cpu(log->end_to_end_corrected_err));
180179
json_object_add_value_uint(root, "System data percent used",
181-
(__u8)log_data[SCAO_SDPU]);
180+
log->system_data_used_percent);
182181
json_object_add_value_uint64(root, "Refresh counts",
183-
(uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
182+
le64_to_cpu(*(uint64_t *)&log->refresh_counts) & 0x00FFFFFFFFFFFFFF);
184183
json_object_add_value_uint(root, "Max User data erase counts",
185-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
184+
le32_to_cpu(log->user_data_erase_count_max));
186185
json_object_add_value_uint(root, "Min User data erase counts",
187-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MNUDEC]));
186+
le32_to_cpu(log->user_data_erase_count_min));
188187
json_object_add_value_uint(root, "Number of Thermal throttling events",
189-
(__u8)log_data[SCAO_NTTE]);
188+
log->thermal_throttling_event_count);
190189
json_object_add_value_uint(root, "Current throttling status",
191-
(__u8)log_data[SCAO_CTS]);
190+
log->thermal_throttling_current_status);
192191
json_object_add_value_uint64(root, "PCIe correctable error count",
193-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PCEC]));
192+
le64_to_cpu(log->pcie_correctable_err_count));
194193
json_object_add_value_uint(root, "Incomplete shutdowns",
195-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_ICS]));
194+
le32_to_cpu(log->incomplete_shoutdowns));
196195
json_object_add_value_uint(root, "Percent free blocks",
197-
(__u8)log_data[SCAO_PFB]);
196+
log->percent_free_blocks);
198197
json_object_add_value_uint(root, "Capacitor health",
199-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
198+
le16_to_cpu(log->capacitor_health));
200199
json_object_add_value_uint64(root, "Unaligned I/O",
201-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UIO]));
200+
le64_to_cpu(log->unaligned_io));
202201
json_object_add_value_uint64(root, "Security Version Number",
203-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SVN]));
202+
le64_to_cpu(log->security_version));
204203
json_object_add_value_uint64(root, "NUSE - Namespace utilization",
205-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_NUSE]));
204+
le64_to_cpu(log->total_nuse));
206205
json_object_add_value_uint128(root, "PLP start count",
207-
le128_to_cpu(&log_data[SCAO_PSC]));
206+
le128_to_cpu(log->plp_start_count));
208207
json_object_add_value_uint128(root, "Endurance estimate",
209-
le128_to_cpu(&log_data[SCAO_EEST]));
210-
smart_log_ver = (uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_LPV]);
208+
le128_to_cpu(log->endurance_estimate));
209+
smart_log_ver = le16_to_cpu(log->log_page_version);
211210

212211
json_object_add_value_uint(root, "Log page version", smart_log_ver);
213212

214213
memset((void *)guid, 0, 40);
215214
sprintf((char *)guid, "0x%"PRIx64"%"PRIx64"",
216-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG + 8]),
217-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG]));
215+
(uint64_t)le64_to_cpu(*(uint64_t *)&log->log_page_guid[8]),
216+
(uint64_t)le64_to_cpu(*(uint64_t *)&log->log_page_guid));
218217
json_object_add_value_string(root, "Log page GUID", guid);
219218

220219
switch (smart_log_ver) {
@@ -223,25 +222,25 @@ static void json_smart_extended_log(void *data)
223222
default:
224223
case 4:
225224
json_object_add_value_uint(root, "NVMe Command Set Errata Version",
226-
(__u8)log_data[SCAO_NCSEV]);
225+
log->nvme_cmdset_errata_version);
227226
json_object_add_value_uint(root, "Lowest Permitted Firmware Revision",
228-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
227+
le64_to_cpu(log->lowest_permitted_fw_rev));
229228
fallthrough;
230229
case 2 ... 3:
231230
json_object_add_value_uint(root, "Errata Version Field",
232-
(__u8)log_data[SCAO_EVF]);
231+
log->dssd_errata_version);
233232
json_object_add_value_uint(root, "Point Version Field",
234-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_PVF]));
233+
le16_to_cpu(log->dssd_point_version));
235234
json_object_add_value_uint(root, "Minor Version Field",
236-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_MIVF]));
235+
le16_to_cpu(log->dssd_minor_version));
237236
json_object_add_value_uint(root, "Major Version Field",
238-
(__u8)log_data[SCAO_MAVF]);
237+
log->dssd_major_version);
239238
json_object_add_value_uint(root, "NVMe Base Errata Version",
240-
(__u8)log_data[SCAO_NBEV]);
239+
log->nvme_base_errata_version);
241240
json_object_add_value_uint(root, "PCIe Link Retraining Count",
242-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PLRC]));
241+
le64_to_cpu(log->pcie_link_retaining_count));
243242
json_object_add_value_uint(root, "Power State Change Count",
244-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
243+
le64_to_cpu(log->power_state_change_count));
245244
}
246245
json_print_object(root, NULL);
247246
printf("\n");

plugins/ocp/ocp-print-stdout.c

Lines changed: 41 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -98,101 +98,96 @@ static void stdout_fw_activation_history(const struct fw_activation_history *fw_
9898
printf("\n");
9999
}
100100

101-
static void stdout_smart_extended_log(void *data)
101+
static void stdout_smart_extended_log(struct ocp_smart_extended_log *log)
102102
{
103103
uint16_t smart_log_ver = 0;
104-
__u8 *log_data = data;
105104

106105
printf("SMART Cloud Attributes :-\n");
107106

108107
printf(" Physical media units written - %"PRIu64" %"PRIu64"\n",
109-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW + 8] & 0xFFFFFFFFFFFFFFFF),
110-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW] & 0xFFFFFFFFFFFFFFFF));
108+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written[8]),
109+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written));
111110
printf(" Physical media units read - %"PRIu64" %"PRIu64"\n",
112-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR + 8] & 0xFFFFFFFFFFFFFFFF),
113-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR] & 0xFFFFFFFFFFFFFFFF));
111+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read[8]),
112+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read));
114113
printf(" Bad user nand blocks - Raw %"PRIu64"\n",
115-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BUNBR] & 0x0000FFFFFFFFFFFF));
114+
int48_to_long(log->bad_user_nand_blocks_raw));
116115
printf(" Bad user nand blocks - Normalized %d\n",
117-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BUNBN]));
116+
le16_to_cpu(log->bad_user_nand_blocks_normalized));
118117
printf(" Bad system nand blocks - Raw %"PRIu64"\n",
119-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BSNBR] & 0x0000FFFFFFFFFFFF));
118+
int48_to_long(log->bad_system_nand_blocks_raw));
120119
printf(" Bad system nand blocks - Normalized %d\n",
121-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BSNBN]));
120+
le16_to_cpu(log->bad_system_nand_blocks_normalized));
122121
printf(" XOR recovery count %"PRIu64"\n",
123-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_XRC]));
122+
le64_to_cpu(log->xor_recovery_count));
124123
printf(" Uncorrectable read error count %"PRIu64"\n",
125-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UREC]));
124+
le64_to_cpu(log->uncorrectable_read_err_count));
126125
printf(" Soft ecc error count %"PRIu64"\n",
127-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SEEC]));
126+
le64_to_cpu(log->soft_ecc_err_count));
128127
printf(" End to end detected errors %"PRIu32"\n",
129-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EEDC]));
128+
le32_to_cpu(log->end_to_end_detected_err));
130129
printf(" End to end corrected errors %"PRIu32"\n",
131-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
130+
le32_to_cpu(log->end_to_end_corrected_err));
132131
printf(" System data percent used %d\n",
133-
(__u8)log_data[SCAO_SDPU]);
132+
log->system_data_used_percent);
134133
printf(" Refresh counts %"PRIu64"\n",
135-
(uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
134+
le64_to_cpu(*(uint64_t *)&log->refresh_counts) & 0x00FFFFFFFFFFFFFF);
136135
printf(" Max User data erase counts %"PRIu32"\n",
137-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
136+
le32_to_cpu(log->user_data_erase_count_max));
138137
printf(" Min User data erase counts %"PRIu32"\n",
139-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MNUDEC]));
138+
le32_to_cpu(log->user_data_erase_count_min));
140139
printf(" Number of Thermal throttling events %d\n",
141-
(__u8)log_data[SCAO_NTTE]);
140+
log->thermal_throttling_event_count);
142141
printf(" Current throttling status 0x%x\n",
143-
(__u8)log_data[SCAO_CTS]);
142+
log->thermal_throttling_current_status);
144143
printf(" PCIe correctable error count %"PRIu64"\n",
145-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PCEC]));
144+
le64_to_cpu(log->pcie_correctable_err_count));
146145
printf(" Incomplete shutdowns %"PRIu32"\n",
147-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_ICS]));
146+
le32_to_cpu(log->incomplete_shoutdowns));
148147
printf(" Percent free blocks %d\n",
149-
(__u8)log_data[SCAO_PFB]);
148+
log->percent_free_blocks);
150149
printf(" Capacitor health %"PRIu16"\n",
151-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
152-
printf(" NVMe base errata version %c\n",
153-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
154-
printf(" NVMe command set errata version %c\n",
155-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
150+
le16_to_cpu(log->capacitor_health));
156151
printf(" Unaligned I/O %"PRIu64"\n",
157-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UIO]));
152+
le64_to_cpu(log->unaligned_io));
158153
printf(" Security Version Number %"PRIu64"\n",
159-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SVN]));
154+
le64_to_cpu(log->security_version));
160155
printf(" NUSE - Namespace utilization %"PRIu64"\n",
161-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_NUSE]));
156+
le64_to_cpu(log->total_nuse));
162157
printf(" PLP start count %s\n",
163-
uint128_t_to_string(le128_to_cpu(&log_data[SCAO_PSC])));
158+
uint128_t_to_string(le128_to_cpu(log->plp_start_count)));
164159
printf(" Endurance estimate %s\n",
165-
uint128_t_to_string(le128_to_cpu(&log_data[SCAO_EEST])));
166-
smart_log_ver = (uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_LPV]);
160+
uint128_t_to_string(le128_to_cpu(log->endurance_estimate)));
161+
smart_log_ver = le16_to_cpu(log->log_page_version);
167162
printf(" Log page version %"PRIu16"\n", smart_log_ver);
168163
printf(" Log page GUID 0x");
169-
printf("%"PRIx64"%"PRIx64"\n", (uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG + 8]),
170-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG]));
164+
printf("%"PRIx64"%"PRIx64"\n", le64_to_cpu(*(uint64_t *)&log->log_page_guid[8]),
165+
(uint64_t)le64_to_cpu(*(uint64_t *)&log->log_page_guid));
171166
switch (smart_log_ver) {
172167
case 0 ... 1:
173168
break;
174169
default:
175170
case 4:
176171
printf(" NVMe Command Set Errata Version %d\n",
177-
(__u8)log_data[SCAO_NCSEV]);
172+
log->nvme_cmdset_errata_version);
178173
printf(" Lowest Permitted Firmware Revision %"PRIu64"\n",
179-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
174+
le64_to_cpu(log->lowest_permitted_fw_rev));
180175
fallthrough;
181176
case 2 ... 3:
182177
printf(" Errata Version Field %d\n",
183-
(__u8)log_data[SCAO_EVF]);
178+
log->dssd_errata_version);
184179
printf(" Point Version Field %"PRIu16"\n",
185-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_PVF]));
180+
le16_to_cpu(log->dssd_point_version));
186181
printf(" Minor Version Field %"PRIu16"\n",
187-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_MIVF]));
182+
le16_to_cpu(log->dssd_minor_version));
188183
printf(" Major Version Field %d\n",
189-
(__u8)log_data[SCAO_MAVF]);
184+
log->dssd_major_version);
190185
printf(" NVMe Base Errata Version %d\n",
191-
(__u8)log_data[SCAO_NBEV]);
186+
log->nvme_base_errata_version);
192187
printf(" PCIe Link Retraining Count %"PRIu64"\n",
193-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PLRC]));
188+
le64_to_cpu(log->pcie_link_retaining_count));
194189
printf(" Power State Change Count %"PRIu64"\n",
195-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
190+
le64_to_cpu(log->power_state_change_count));
196191
}
197192
printf("\n");
198193
}

plugins/ocp/ocp-print.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
#include "ocp-hardware-component-log.h"
66
#include "ocp-fw-activation-history.h"
7+
#include "ocp-smart-extended-log.h"
78
#include "ocp-telemetry-decode.h"
89
#include "ocp-nvme.h"
910

1011
struct ocp_print_ops {
1112
void (*hwcomp_log)(struct hwcomp_log *log, __u32 id, bool list);
1213
void (*fw_act_history)(const struct fw_activation_history *fw_history);
13-
void (*smart_extended_log)(void *data);
14+
void (*smart_extended_log)(struct ocp_smart_extended_log *log);
1415
void (*telemetry_log)(struct ocp_telemetry_parse_options *options);
1516
void (*c3_log)(struct nvme_dev *dev, struct ssd_latency_monitor_log *log_data);
1617
void (*c5_log)(struct nvme_dev *dev, struct unsupported_requirement_log *log_data);

plugins/ocp/ocp-smart-extended-log.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ static __u8 scao_guid[GUID_LEN] = {
3030
static int get_c0_log_page(struct nvme_dev *dev, char *format)
3131
{
3232
nvme_print_flags_t fmt;
33-
__u8 *data;
33+
struct ocp_smart_extended_log *data;
3434
int i;
3535
int ret;
3636
int fd = dev_fd(dev);
@@ -67,7 +67,7 @@ static int get_c0_log_page(struct nvme_dev *dev, char *format)
6767
/* check log page guid */
6868
/* Verify GUID matches */
6969
for (i = 0; i < 16; i++) {
70-
if (scao_guid[i] != data[SCAO_LPG + i]) {
70+
if (scao_guid[i] != data->log_page_guid[i]) {
7171
int j;
7272

7373
fprintf(stderr, "ERROR : OCP : Unknown GUID in C0 Log Page data\n");
@@ -77,7 +77,7 @@ static int get_c0_log_page(struct nvme_dev *dev, char *format)
7777

7878
fprintf(stderr, "\nERROR : OCP : Actual GUID: 0x");
7979
for (j = 0; j < 16; j++)
80-
fprintf(stderr, "%x", data[SCAO_LPG + j]);
80+
fprintf(stderr, "%x", data->log_page_guid[j]);
8181
fprintf(stderr, "\n");
8282

8383
ret = -1;

0 commit comments

Comments
 (0)