diff --git a/plugins/ocp/ocp-nvme.h b/plugins/ocp/ocp-nvme.h index 04acbfc032..1fbc47487f 100644 --- a/plugins/ocp/ocp-nvme.h +++ b/plugins/ocp/ocp-nvme.h @@ -73,8 +73,9 @@ struct __packed ssd_latency_monitor_log { __le64 static_latency_timestamp[4][3]; /* 0x130 - 0x18F */ __le16 static_measured_latency[4][3]; /* 0x190 - 0x1A7 */ __le16 static_latency_stamp_units; /* 0x1A8 */ - __u8 rsvd4[0x16]; /* 0x1AA */ + __u8 rsvd4[0x0A]; /* 0x1AA */ + __u8 latency_monitor_debug_log_size[0x0C]; /* 0x1B4 */ __le16 debug_log_trigger_enable; /* 0x1C0 */ __le16 debug_log_measured_latency; /* 0x1C2 */ __le64 debug_log_latency_stamp; /* 0x1C4 */ diff --git a/plugins/ocp/ocp-print-json.c b/plugins/ocp/ocp-print-json.c index a600628ddd..1e0a2dbb76 100644 --- a/plugins/ocp/ocp-print-json.c +++ b/plugins/ocp/ocp-print-json.c @@ -258,6 +258,7 @@ static void json_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log *lo char buf[128]; int i, j; char *operation[3] = {"Trim", "Write", "Read"}; + __u16 log_page_version = le16_to_cpu(log_data->log_page_version); root = json_create_object(); @@ -374,6 +375,21 @@ static void json_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log *lo json_object_add_value_uint(root, "Static Latency Stamp Units", le16_to_cpu(log_data->static_latency_stamp_units)); + + if (log_page_version >= 0x4) { + strcpy(buf, "0x"); + for (i = ARRAY_SIZE(log_data->latency_monitor_debug_log_size) - 1; + i > 0 && (log_data->latency_monitor_debug_log_size[i] == 0); i--) + ; + while (i >= 0) { + char hex_string[3]; + + sprintf(hex_string, "%02x", log_data->latency_monitor_debug_log_size[i--]); + strcat(buf, hex_string); + } + json_object_add_value_string(root, "Debug Telemetry Log Size", buf); + } + json_object_add_value_uint(root, "Debug Log Trigger Enable", le16_to_cpu(log_data->debug_log_trigger_enable)); json_object_add_value_uint(root, "Debug Log Measured Latency", @@ -390,8 +406,7 @@ static void json_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log *lo le16_to_cpu(log_data->debug_log_counter_trigger)); json_object_add_value_uint(root, "Debug Log Stamp Units", le16_to_cpu(log_data->debug_log_stamp_units)); - json_object_add_value_uint(root, "Log Page Version", - le16_to_cpu(log_data->log_page_version)); + json_object_add_value_uint(root, "Log Page Version", log_page_version); char guid[(GUID_LEN * 2) + 1]; char *ptr = &guid[0]; diff --git a/plugins/ocp/ocp-print-stdout.c b/plugins/ocp/ocp-print-stdout.c index e48c171479..48e4dc899a 100644 --- a/plugins/ocp/ocp-print-stdout.c +++ b/plugins/ocp/ocp-print-stdout.c @@ -205,6 +205,7 @@ static void stdout_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log * { char ts_buf[128]; int i, j; + __u16 log_page_version = le16_to_cpu(log_data->log_page_version); printf("-Latency Monitor/C3 Log Page Data-\n"); printf(" Controller : %s\n", dev->name); @@ -237,6 +238,17 @@ static void stdout_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log * le16_to_cpu(log_data->active_latency_stamp_units)); printf(" Static Latency Stamp Units %d\n", le16_to_cpu(log_data->static_latency_stamp_units)); + + if (log_page_version >= 0x4) { + printf(" Debug Telemetry Log Size 0x"); + for (i = ARRAY_SIZE(log_data->latency_monitor_debug_log_size) - 1; + i > 0 && (log_data->latency_monitor_debug_log_size[i] == 0); i--) + ; + while (i >= 0) + printf("%02x", log_data->latency_monitor_debug_log_size[i--]); + printf("\n"); + } + printf(" Debug Log Trigger Enable %d\n", le16_to_cpu(log_data->debug_log_trigger_enable)); printf(" Debug Log Measured Latency %d\n", @@ -253,8 +265,7 @@ static void stdout_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log * le16_to_cpu(log_data->debug_log_counter_trigger)); printf(" Debug Log Stamp Units %d\n", le16_to_cpu(log_data->debug_log_stamp_units)); - printf(" Log Page Version %d\n", - le16_to_cpu(log_data->log_page_version)); + printf(" Log Page Version %d\n", log_page_version); char guid[(GUID_LEN * 2) + 1]; char *ptr = &guid[0];