Skip to content

Commit 6e5abc5

Browse files
sc108-leehmi-jeon
authored andcommitted
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 a95d951 commit 6e5abc5

File tree

5 files changed

+220
-175
lines changed

5 files changed

+220
-175
lines changed

plugins/ocp/ocp-print-json.c

Lines changed: 86 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -138,84 +138,84 @@ static void json_fw_activation_history(const struct fw_activation_history *fw_hi
138138
printf("\n");
139139
}
140140

141-
static void json_smart_extended_log_v1(void *data)
141+
static void json_smart_extended_log_v1(struct ocp_smart_extended_log *log)
142142
{
143143
struct json_object *root;
144144
struct json_object *pmuw;
145145
struct json_object *pmur;
146146
uint16_t smart_log_ver = 0;
147-
__u8 *log_data = data;
148147
char guid[40];
149148

150149
root = json_create_object();
151150
pmuw = json_create_object();
152151
pmur = json_create_object();
153152

154153
json_object_add_value_uint64(pmuw, "hi",
155-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW + 8]));
154+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written[8]));
156155
json_object_add_value_uint64(pmuw, "lo",
157-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW]));
156+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written));
158157
json_object_add_value_object(root, "Physical media units written", pmuw);
159158
json_object_add_value_uint64(pmur, "hi",
160-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR + 8]));
159+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read[8]));
161160
json_object_add_value_uint64(pmur, "lo",
162-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR]));
161+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read));
163162
json_object_add_value_object(root, "Physical media units read", pmur);
164163
json_object_add_value_uint64(root, "Bad user nand blocks - Raw",
165-
int48_to_long(&log_data[SCAO_BUNBR]));
164+
int48_to_long(log->bad_user_nand_blocks_raw));
166165
json_object_add_value_uint(root, "Bad user nand blocks - Normalized",
167-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BUNBN]));
166+
le16_to_cpu(log->bad_user_nand_blocks_normalized));
168167
json_object_add_value_uint64(root, "Bad system nand blocks - Raw",
169-
int48_to_long(&log_data[SCAO_BSNBR]));
168+
int48_to_long(log->bad_system_nand_blocks_raw));
170169
json_object_add_value_uint(root, "Bad system nand blocks - Normalized",
171-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BSNBN]));
170+
le16_to_cpu(log->bad_system_nand_blocks_normalized));
172171
json_object_add_value_uint64(root, "XOR recovery count",
173-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_XRC]));
172+
le64_to_cpu(log->xor_recovery_count));
174173
json_object_add_value_uint64(root, "Uncorrectable read error count",
175-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UREC]));
174+
le64_to_cpu(log->uncorrectable_read_err_count));
176175
json_object_add_value_uint64(root, "Soft ecc error count",
177-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SEEC]));
176+
le64_to_cpu(log->soft_ecc_err_count));
178177
json_object_add_value_uint(root, "End to end detected errors",
179-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EEDC]));
178+
le32_to_cpu(log->end_to_end_detected_err));
180179
json_object_add_value_uint(root, "End to end corrected errors",
181-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
180+
le32_to_cpu(log->end_to_end_corrected_err));
182181
json_object_add_value_uint(root, "System data percent used",
183-
(__u8)log_data[SCAO_SDPU]);
184-
json_object_add_value_uint64(root, "Refresh counts", int56_to_long(&log_data[SCAO_RFSC]));
182+
log->system_data_used_percent);
183+
json_object_add_value_uint64(root, "Refresh counts",
184+
int56_to_long(log->refresh_counts));
185185
json_object_add_value_uint(root, "Max User data erase counts",
186-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
186+
le32_to_cpu(log->user_data_erase_count_max));
187187
json_object_add_value_uint(root, "Min User data erase counts",
188-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MNUDEC]));
188+
le32_to_cpu(log->user_data_erase_count_min));
189189
json_object_add_value_uint(root, "Number of Thermal throttling events",
190-
(__u8)log_data[SCAO_NTTE]);
190+
log->thermal_throttling_event_count);
191191
json_object_add_value_uint(root, "Current throttling status",
192-
(__u8)log_data[SCAO_CTS]);
192+
log->thermal_throttling_current_status);
193193
json_object_add_value_uint64(root, "PCIe correctable error count",
194-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PCEC]));
194+
le64_to_cpu(log->pcie_correctable_err_count));
195195
json_object_add_value_uint(root, "Incomplete shutdowns",
196-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_ICS]));
196+
le32_to_cpu(log->incomplete_shoutdowns));
197197
json_object_add_value_uint(root, "Percent free blocks",
198-
(__u8)log_data[SCAO_PFB]);
198+
log->percent_free_blocks);
199199
json_object_add_value_uint(root, "Capacitor health",
200-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
200+
le16_to_cpu(log->capacitor_health));
201201
json_object_add_value_uint64(root, "Unaligned I/O",
202-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UIO]));
202+
le64_to_cpu(log->unaligned_io));
203203
json_object_add_value_uint64(root, "Security Version Number",
204-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SVN]));
204+
le64_to_cpu(log->security_version));
205205
json_object_add_value_uint64(root, "NUSE - Namespace utilization",
206-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_NUSE]));
206+
le64_to_cpu(log->total_nuse));
207207
json_object_add_value_uint128(root, "PLP start count",
208-
le128_to_cpu(&log_data[SCAO_PSC]));
208+
le128_to_cpu(log->plp_start_count));
209209
json_object_add_value_uint128(root, "Endurance estimate",
210-
le128_to_cpu(&log_data[SCAO_EEST]));
211-
smart_log_ver = (uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_LPV]);
210+
le128_to_cpu(log->endurance_estimate));
211+
smart_log_ver = le16_to_cpu(log->log_page_version);
212212

213213
json_object_add_value_uint(root, "Log page version", smart_log_ver);
214214

215215
memset((void *)guid, 0, 40);
216216
sprintf((char *)guid, "0x%"PRIx64"%"PRIx64"",
217-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG + 8]),
218-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG]));
217+
le64_to_cpu(*(uint64_t *)&log->log_page_guid[8]),
218+
le64_to_cpu(*(uint64_t *)&log->log_page_guid));
219219
json_object_add_value_string(root, "Log page GUID", guid);
220220

221221
switch (smart_log_ver) {
@@ -224,110 +224,109 @@ static void json_smart_extended_log_v1(void *data)
224224
default:
225225
case 4:
226226
json_object_add_value_uint(root, "NVMe Command Set Errata Version",
227-
(__u8)log_data[SCAO_NCSEV]);
227+
log->nvme_cmdset_errata_version);
228228
json_object_add_value_uint(root, "Lowest Permitted Firmware Revision",
229-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
229+
le64_to_cpu(log->lowest_permitted_fw_rev));
230230
fallthrough;
231231
case 2 ... 3:
232232
json_object_add_value_uint(root, "Errata Version Field",
233-
(__u8)log_data[SCAO_EVF]);
233+
log->dssd_errata_version);
234234
json_object_add_value_uint(root, "Point Version Field",
235-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_PVF]));
235+
le16_to_cpu(log->dssd_point_version));
236236
json_object_add_value_uint(root, "Minor Version Field",
237-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_MIVF]));
237+
le16_to_cpu(log->dssd_minor_version));
238238
json_object_add_value_uint(root, "Major Version Field",
239-
(__u8)log_data[SCAO_MAVF]);
239+
log->dssd_major_version);
240240
json_object_add_value_uint(root, "NVMe Base Errata Version",
241-
(__u8)log_data[SCAO_NBEV]);
241+
log->nvme_base_errata_version);
242242
json_object_add_value_uint(root, "PCIe Link Retraining Count",
243-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PLRC]));
243+
le64_to_cpu(log->pcie_link_retaining_count));
244244
json_object_add_value_uint(root, "Power State Change Count",
245-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
245+
le64_to_cpu(log->power_state_change_count));
246246
}
247247
json_print_object(root, NULL);
248248
printf("\n");
249249
json_free_object(root);
250250
}
251251

252-
static void json_smart_extended_log_v2(void *data)
252+
static void json_smart_extended_log_v2(struct ocp_smart_extended_log *log)
253253
{
254254
struct json_object *root;
255255
struct json_object *pmuw;
256256
struct json_object *pmur;
257257
uint16_t smart_log_ver = 0;
258-
__u8 *log_data = data;
259258
char guid[40];
260259

261260
root = json_create_object();
262261
pmuw = json_create_object();
263262
pmur = json_create_object();
264263

265264
json_object_add_value_uint64(pmuw, "hi",
266-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW + 8] & 0xFFFFFFFFFFFFFFFF));
265+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written[8]));
267266
json_object_add_value_uint64(pmuw, "lo",
268-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUW] & 0xFFFFFFFFFFFFFFFF));
267+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_written));
269268
json_object_add_value_object(root, "physical_media_units_written", pmuw);
270269
json_object_add_value_uint64(pmur, "hi",
271-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR + 8] & 0xFFFFFFFFFFFFFFFF));
270+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read[8]));
272271
json_object_add_value_uint64(pmur, "lo",
273-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PMUR] & 0xFFFFFFFFFFFFFFFF));
272+
le64_to_cpu(*(uint64_t *)&log->physical_media_units_read));
274273
json_object_add_value_object(root, "physical_media_units_read", pmur);
275274
json_object_add_value_uint64(root, "bad_user_nand_blocks_raw",
276-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BUNBR] & 0x0000FFFFFFFFFFFF));
275+
int48_to_long(log->bad_user_nand_blocks_raw));
277276
json_object_add_value_uint(root, "bad_user_nand_blocks_normalized",
278-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BUNBN]));
277+
le16_to_cpu(log->bad_user_nand_blocks_normalized));
279278
json_object_add_value_uint64(root, "bad_system_nand_blocks_raw",
280-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_BSNBR] & 0x0000FFFFFFFFFFFF));
279+
int48_to_long(log->bad_system_nand_blocks_raw));
281280
json_object_add_value_uint(root, "bad_system_nand_blocks_normalized",
282-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_BSNBN]));
281+
le16_to_cpu(log->bad_system_nand_blocks_normalized));
283282
json_object_add_value_uint64(root, "xor_recovery_count",
284-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_XRC]));
283+
le64_to_cpu(log->xor_recovery_count));
285284
json_object_add_value_uint64(root, "uncorrectable_read_errors",
286-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UREC]));
285+
le64_to_cpu(log->uncorrectable_read_err_count));
287286
json_object_add_value_uint64(root, "soft_ecc_error_count",
288-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SEEC]));
287+
le64_to_cpu(log->soft_ecc_err_count));
289288
json_object_add_value_uint(root, "end_to_end_detected_errors",
290-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EEDC]));
289+
le32_to_cpu(log->end_to_end_detected_err));
291290
json_object_add_value_uint(root, "end_to_end_corrected_errors",
292-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_EECE]));
291+
le32_to_cpu(log->end_to_end_corrected_err));
293292
json_object_add_value_uint(root, "system_data_percent_used",
294-
(__u8)log_data[SCAO_SDPU]);
293+
log->system_data_used_percent);
295294
json_object_add_value_uint64(root, "refresh_count",
296-
(uint64_t)(le64_to_cpu(*(uint64_t *)&log_data[SCAO_RFSC]) & 0x00FFFFFFFFFFFFFF));
295+
int56_to_long(log->refresh_counts));
297296
json_object_add_value_uint(root, "max_user_data_erase_count",
298-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MXUDEC]));
297+
le32_to_cpu(log->user_data_erase_count_max));
299298
json_object_add_value_uint(root, "min_user_data_erase_count",
300-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_MNUDEC]));
299+
le32_to_cpu(log->user_data_erase_count_min));
301300
json_object_add_value_uint(root, "thermal_throttling_events",
302-
(__u8)log_data[SCAO_NTTE]);
301+
log->thermal_throttling_event_count);
303302
json_object_add_value_uint(root, "current_throttling_status",
304-
(__u8)log_data[SCAO_CTS]);
303+
log->thermal_throttling_current_status);
305304
json_object_add_value_uint64(root, "pcie_correctable_errors",
306-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_PCEC]));
305+
le64_to_cpu(log->pcie_correctable_err_count));
307306
json_object_add_value_uint(root, "incomplete_shutdowns",
308-
(uint32_t)le32_to_cpu(*(uint32_t *)&log_data[SCAO_ICS]));
307+
le32_to_cpu(log->incomplete_shoutdowns));
309308
json_object_add_value_uint(root, "percent_free_blocks",
310-
(__u8)log_data[SCAO_PFB]);
309+
log->percent_free_blocks);
311310
json_object_add_value_uint(root, "capacitor_health",
312-
(uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_CPH]));
311+
le16_to_cpu(log->capacitor_health));
313312
json_object_add_value_uint64(root, "unaligned_io",
314-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_UIO]));
313+
le64_to_cpu(log->unaligned_io));
315314
json_object_add_value_uint64(root, "security_version_number",
316-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_SVN]));
315+
le64_to_cpu(log->security_version));
317316
json_object_add_value_uint64(root, "nuse_namespace_utilization",
318-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_NUSE]));
317+
le64_to_cpu(log->total_nuse));
319318
json_object_add_value_uint128(root, "plp_start_count",
320-
le128_to_cpu(&log_data[SCAO_PSC]));
319+
le128_to_cpu(log->plp_start_count));
321320
json_object_add_value_uint128(root, "endurance_estimate",
322-
le128_to_cpu(&log_data[SCAO_EEST]));
323-
smart_log_ver = (uint16_t)le16_to_cpu(*(uint16_t *)&log_data[SCAO_LPV]);
321+
le128_to_cpu(log->endurance_estimate));
322+
smart_log_ver = le16_to_cpu(log->log_page_version);
324323

325324
json_object_add_value_uint(root, "log_page_version", smart_log_ver);
326325

327326
memset((void *)guid, 0, 40);
328327
sprintf((char *)guid, "0x%"PRIx64"%"PRIx64"",
329-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG + 8]),
330-
(uint64_t)le64_to_cpu(*(uint64_t *)&log_data[SCAO_LPG]));
328+
le64_to_cpu(*(uint64_t *)&log->log_page_guid[8]),
329+
le64_to_cpu(*(uint64_t *)&log->log_page_guid));
331330
json_object_add_value_string(root, "log_page_guid", guid);
332331

333332
switch (smart_log_ver) {
@@ -336,40 +335,40 @@ static void json_smart_extended_log_v2(void *data)
336335
default:
337336
case 4:
338337
json_object_add_value_uint(root, "nvme_command_set_errata_version",
339-
(__u8)log_data[SCAO_NCSEV]);
338+
log->nvme_cmdset_errata_version);
340339
json_object_add_value_uint(root, "lowest_permitted_firmware_revision",
341-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
340+
le64_to_cpu(log->lowest_permitted_fw_rev));
342341
fallthrough;
343342
case 2 ... 3:
344343
json_object_add_value_uint(root, "errata_version_field",
345-
(__u8)log_data[SCAO_EVF]);
344+
log->dssd_errata_version);
346345
json_object_add_value_uint(root, "point_version_field",
347-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_PVF]));
346+
le16_to_cpu(log->dssd_point_version));
348347
json_object_add_value_uint(root, "minor_version_field",
349-
le16_to_cpu(*(uint16_t *)&log_data[SCAO_MIVF]));
348+
le16_to_cpu(log->dssd_minor_version));
350349
json_object_add_value_uint(root, "major_version_field",
351-
(__u8)log_data[SCAO_MAVF]);
350+
log->dssd_major_version);
352351
json_object_add_value_uint(root, "nvme_base_errata_version",
353-
(__u8)log_data[SCAO_NBEV]);
352+
log->nvme_base_errata_version);
354353
json_object_add_value_uint(root, "pcie_link_retraining_count",
355-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PLRC]));
354+
le64_to_cpu(log->pcie_link_retaining_count));
356355
json_object_add_value_uint(root, "power_state_change_count",
357-
le64_to_cpu(*(uint64_t *)&log_data[SCAO_PSCC]));
356+
le64_to_cpu(log->power_state_change_count));
358357
}
359358
json_print_object(root, NULL);
360359
printf("\n");
361360
json_free_object(root);
362361
}
363362

364-
static void json_smart_extended_log(void *data, unsigned int version)
363+
static void json_smart_extended_log(struct ocp_smart_extended_log *log, unsigned int version)
365364
{
366365
switch (version) {
367366
default:
368367
case 1:
369-
json_smart_extended_log_v1(data);
368+
json_smart_extended_log_v1(log);
370369
break;
371370
case 2:
372-
json_smart_extended_log_v2(data);
371+
json_smart_extended_log_v2(log);
373372
}
374373
}
375374
static void json_telemetry_log(struct ocp_telemetry_parse_options *options)

0 commit comments

Comments
 (0)